typeof是一个一元运算,放在一个运算数前面,运算数可以是任意类型的数
返回值一般有这几个:number,boolean,string,function,object,undefined
实际应用中通常用来获取一个变量是否存在,if(typeof a!='undefined'){alert('ok')}; 不要用if(a){}这样的方式判断是否存在,如果不存在会报错,而且有bug,如果a是0
那么得到的结果一样是false,因为0会转换成false。
那么为什么不用typeof来判断一个变量的类型呢?string,number这些事可以的,但是Array,null这些特殊对象使用typeof通通得到的都是一个object,这往往不是我们
想要的结果,这就是typeof的局限性,所以我们会用另外一个来判断,instanceof来判断
instanceof是用来判断某个对象是不是另一个类的实例
function aa(){}
var a=new aa();
var b={};
a instanceof aa; //true a是aa的一个实例
b instanceof aa; //false b不是aa的实例额,但是它是Object的实例,所以,b instanceo Object; //true
注意instanceof测试的object是指js语法中的object,dom节点的object不能起作用:
window instanceof Object; //false 因为window是dom模型的对象,不是js语法中的对象,但是typeof这个时候就能用上了:typeof window;//Object
说多一个插曲 , 函数的arguments很多人都误以为是数组,其实不是:
证明:
function testArg(){
console.log(arguments);
console.log(arguments instanceof Array);
console.log(arguments instanceof Object);
console.log(typeof arguments);
}
testArg(2,4,5)
[2, 4, 5] //arguments打印出来的确实是数组的形式,但是通过检测证明了它其实是一个对象
false // arguments in Array;
true // arguments in Object;
object // typeof arguments
今天就扯到这,打完收工