首页 > 代码库 > javascript ECMAScript类型判断

javascript ECMAScript类型判断

JS中的变量是松散类型(即弱类型)的,可以用来保存任何类型的数据。

 

typeof   一元操作  判断是原生类型还是对象类型时候用

typeof 可以用来检测给定变量的数据类型,可能的返回值:

1. ‘undefined‘ --- 这个值未定义;

2. ‘boolean‘    --- 这个值是布尔值;

3. ‘string‘        --- 这个值是字符串;

4. ‘number‘     --- 这个值是数值;

5. ‘object‘       --- 这个值是对象或null;

6. ‘function‘    --- 这个值是函数。

var aa = new Array(3);document.write(typeof a);  // undefineddocument.write(typeof aa); // Object

 

但 typeof 的能力有限,其对于Date、RegExp类型返回的都是"object"。如: 

 

typeof {}; // "object" typeof []; // "object" typeof new Date(); // "object" 

 

instanceof  判断是那种类型  左边操作符必须为对象

var aa = new Array(3);alert(aa instanceof Array);  // true

可以以此判断对象是否是数组类型,另,isArray()方法,可以直接判断是否为数组

 

var aa = new Array(3);aa.isArray();

constructor 属性

constructor 属性返回对创建此对象的数组函数的引用。

在Javascript语言中,constructor属性是专门为function而设计的,它存在于每一个function的prototype属性中。这个constructor保存了指向function的一个引用。在定义一个函数(代码如下所示)时,  
function F() {  // some code  } 
? JavaScript内部会执行如下几个动作:为该函数添加一个原形(即prototype)属性 
? 为prototype对象额外添加一个constructor属性,并且该属性保存指向函数F的一个引用 
这样当我们把函数F作为自定义构造函数来创建对象的时候,对象实例内部会自动保存一个指向其构造函数(这里就是我们的自定义构造函数F)的prototype对象的一个属性__proto__,所以我们在每一个对象实例中就可以访问构造函数的prototype所有拥有的全部属性和方法,就好像它们是实例自己的一样。当然该实例也有一个constructor属性了(从prototype那里获得的),这时候constructor的作用就很明显了,因为在这时,每一个对象实例都可以通过constrcutor对象访问它的构造函数,

 

 

 var ary = new Array(3); ary[0] ="1"; ary[1] ="1"; ary[2] ="1"; ary[3] ="1"; ary[4] ="1"; alert(ary.constructor == Array);    // true 

 

javascript ECMAScript类型判断