代码改变世界

JavaScript中值的固有布尔属性及其比较

2012-07-19 09:24  @影子@  阅读(559)  评论(0编辑  收藏  举报

 

固有的布尔属性

值在js中存在一个固有的布尔值。以下的值总是false的,他们是:

false

0

""  (空字符串)

null

undefined

NaN (Not-a-Number)

另外,有些值是true的,"0" (0在引号中),"false"(false在引号中),空函数,空数组,空对象。

  1. var a = !!(0); // variable is set to false  
  2. var b = !!("0"); // true 

固有false值的比较

false、 0 、""  (空字符串) 是相等的,并且可以进行比较

  1. var c = (false == 0); // true  
  2. var d = (false == ""); // true  
  3. var e = (0 == ""); // true 

而,null 和 undefined 和其他所有的值比较都是不相等的。

  1. var f = (null == false); // false  
  2. var g = (null == null); // true  
  3. var h = (undefined == undefined); // true 
  4. var i = (undefined == null); // true 

而,null 和 undefined 和其他所有的值比较都是不相等的。

最后,NaN和任何值比较都是不相等的,包括自己。

  1. var j = (NaN == null); // false  
  2. var k = (NaN == NaN); // false 

另外,必须明确typeof(NaN)返回的是 "number" ,在核心js中有个函数isNaN()可以去直接判断这个值是否是NaN

严格等于

==是比较两个值

===也是一样的功能,但是===要求的比较严格

==会在把两个值自动转换成同类型后再比较,而===在比较前不转换

所以严格等于时候,flase值的比较和普通等于的比较结果有不同,应注意区分

  1. var l = (false == 0); // true  
  2. var m = (false === 0); // false  

 

参考文章:http://www.sitepoint.com/javascript-truthy-falsy/