JavaScript
中0, "", null, false, undefined
返回的Boolean
类型均为false
。然而它们所指的并不是同一个概念,需要加以区分。
首先先看一段代码:
document.write(typeof(0)) //number
document.write(typeof("")) //string
document.write(typeof(null)) //object
document.write(typeof(false)) //boolean
document.write(typeof(undefined)) //undefined
从上述代码可以看出:0
是数字类型对象,空字符串是字符串类型对象,null
是object
对象,false
是布尔类型对象,undefined
还是undefined
类型.。
对于null
为什么是一个object
对象,这是JavaScript最初实现的一个错误,后来被ECMAScript
沿用下来。可以将它理解为一个不存在的对象的占位符。
使用==
操作将0
和false
与其他对象进行比较:
document.write(false==undefined); //false
document.write(false==null); //false
document.write(undefined==0); //false
document.write(null==0); //false
document.write(""==0); //true
document.write(false==0); //true
document.write(false==""); //true
document.write(null==undefined); //true
观察可发现:0、""
和false
是相等的,null
和undefined
是相等的,而undefined
和null
并不等于false
对象。
可以把0、""
和false
归为一类,称之为“假值”,把null
和undefined
归为一类,称之为“空值”。假值还是一个有效的对象,所以可以对其使用toString
等类型相关方法,空值则不行。
document.write(false.toString()); // false
document.write("".length); // 0
document.write((0).toString()); // 0
document.write(undefined.toString()); // throw exception "undefined has no properties"
document.write(null.toString()); // "null has no properties"
undefined
表示无效对象,null
表示空对象。当声明的变量未被初始化时其默认值为undefined
;如果被赋予null
,则代表变量初始化值为空值。ECMAScript
认为undefined
是从null
派生出来的所以把他们定义为相等。
以下两种方式会输出false
:
document.write(null===undefined); //false
document.write(typeof(null)==typeof(undefined)); //false
因为===
代表的是绝对等于,判断值及类型是否完全相等。null
和undefined
各自的type
在前面已经说过。