码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript中 !!、&&和||以及其他运算符的故事

时间:2015-11-16 19:17:44      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

  先吐槽下谷哥的搜索,在搜索框中输入关键词"!!",没有搜索结果...,在度娘中这样搜索却能找到我想要的答案,然后segmentfault.com里面的搜索也是完全对"!!"关键词不作反应,最后安利下百度的 site:segmentfault !! 这种搜索方式,还是可以找到比较满意的资料的。

1. 关于 JavaScript 中的 !!

while(!!_tempNode && _tempNode.nodeType != 1){
    _tempNode = _tempNode.nextSibling;
}

  是这段代码引起了我的注意,因为这里面 _tempNode 的取值只会是 null 或者是 Node对象,感觉这个 !! 出现的道理不是很明确。后来才发现这里的一个重要知识点,就是 !! 和 && / || 连用的情况。如果 && / || 连接两侧的数据类型都是 Boolean 类型,那么答案显而易见。但是一旦出现有不是 Boolean 类型的数值,却没有进行转换,就会出现想不通的情况。两者都遵循这样一个规律,有一个操作数不是布尔值的情况下,逻辑与、逻辑或(&&/||)就不一定返回 Boolean 类型的值。

(1). 逻辑与

- 如果第一个操作数是对象,则返回第二个操作数;

- 如果第二个操作数是对象,则只有在第一个操作数的求值结果是 true 的情况下才会返回该对象;

- 如果两个操作数都是对象,则返回第二个操作数;

- 如果有一个操作数是null / NaN / undefined,则返回null / NaN / undefined;

(2). 逻辑或

- 如果第一个操作数是对象,则返回第一个操作数;

- 如果第一个操作数的求值结果是false,则返回第二个操作数;

- 如果两个操作数都是对象,则返回第一个操作数;

- 如果两个操作数都是null / NaN / undefined,则返回null / NaN / undefined;

之前代码中的情况:“_tempNode && _tempNode.nodeType != 1”,如果没有 !! 带来的类型转换,这里就完全脱离了这行代码的本意。

 

JavaScript中 !!、&&和||以及其他运算符的故事

标签:

原文地址:http://www.cnblogs.com/WitNesS/p/4969426.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!