概述
JavaScript(ECMAScript标准)里共有5种基本类型:undefined, null, Boolean, Number, String,
和一种复杂类型Object
。
JavaScript的设计者希望用null
表示一个空的值,而undefined
表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null
。undefined
仅仅在判断函数参数是否传递的情况下有用。
undefined
类型只有一个值,即undefined
。当声明的变量还未被初始化时,变量的默认值为undefined
。null
类型也只有一个值,即null
。null
用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
var oValue;
console.log(oValue == undefined); // true
这段代码显示为true,代表oVlaue的值即为undefined,因为我们没有初始化它。
console.log(null==document.getElementById('notExistNode'));
当页面上不存在id为"notExistNode"的DOM节点时,这段代码显示为"true",因为我们尝试获取一个不存在的对象。
console.log(typeof undefined) // undefined
console.log(typeof null) // object
第一行代码很容易理解,undefined的类型为undefined;第二行代码却让人疑惑,为什么null的类型又是Object了 呢?其实这是JavaScript最初实现的一个错误,后来被ECMAScript沿用下来。在今天我们可以解释为,null即是一个不存在的对象的占位符,但是在实际编码时还是要注意这一特性。
null
null
表示"没有对象",即该处不应该有值。典型用法是:
- 作为函数的参数,表示该函数的参数不是对象。
- 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype) // null
undefined
undefined
表示"缺省值",就是此处应该有一个值,但是还没有定义。典型用法是:
- 变量被声明了,但没有赋值时,就等于undefined。
- 调用函数时,应该提供的参数没有提供,该参数等于undefined。
- 对象没有赋值的属性,该属性的值为undefined。
- 函数没有返回值时,默认返回undefined。
typeof
typeof
是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
它返回值是一个字符串,该字符串说明运算数的类型。typeof 一般只能返回如下几个结果:number,boolean,string,function,object(null,数组,对象),undefined
。我们可以使用 typeof
来获取一个变量是否存在,如:
if(typeof a != "undefined"){alert("ok")}
而不要去使用 if(a)
因为如果 a
不存在(未声明)则会出错,对于 Array,Null
等特殊对象使用 typeof
一律返回 object
,这正是 typeof
的局限性。
instanceof
instanceof
用于判断一个变量是否某个类的实例.
var a=new Array();
alert(a instanceof Array); // true
alert(a instanceof Object); // true
两个结果都为true
,因为Array
是 Object
的子类。
function test(){};
var a = new test();
alert(a instanceof test) // true
谈到 instanceof 我们要注意一点,就是 function
的 arguments
,我们大家也许都认为 arguments
是一个Array
,但如果使用 instaceof
去测试会发现 arguments
不是一个 Array 对象
,尽管看起来很像,但其实它是类数组对象。