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); // undefined document.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