Null是类型对象,所以它是真的吗?幕后发生了什么?

千里ち*_*ちゃん 4 javascript c++ types programming-languages type-conversion

我正在阅读我的书"优雅的JavaScript",null == true评价为假.使用口译员,我已经证实了这一点TRUE.但是,在本章的后面 - 实际上,在同一页面上 - ,它表示当作为if,while或for语句的条件给出null时,它将被转换为布尔值并返回false.

任何有更深入洞察力的人都可以告诉我为什么会这样吗?我知道在哪里可以找到浏览器源代码,但我不知道如何定位导致这种特殊和不正常行为的编程.因为我对C++知之甚少,所以我也很欣赏任何有关如此独立查找信息的提示.

谢谢.

Ray*_*nos 6

做出一个重要的区别是这TypenullNull.

(忽略typeof它返回"object"null,因为糟糕的设计和向后兼容性)

11.9.3抽象等式比较算法#Ⓣ比较x == y,其中x和y是值,产生真或假.这样的比较如下进行:

[...剥离]

  1. 返回false.

ES5规范

说,与比较nullBoolean应该返回false,因为TypeNullBoolean是不一样的,并没有在11.9.3其他步骤也适用这样的默认操作return false发生

唯一的情况下Typexy是不同的,要么xynull==操作仍然返回true

如果x为null且y未定义,则返回true.

如果x未定义且y为null,则返回true.

这意味着undefined == null回报true

特别说明:

有一个ES6:和谐提案要修复typeof null

  • @jamietre*"这个"默认是指函数所属的对象.*这是**不正确**.`this`的值仅由**调用函数的方式确定,并且确定是在每次调用时进行的. (3认同)
  • 我想我忘了点击更新:http://jsfiddle.net/jamietre/wbPvz/3/ ..重点是,`this`是指父对象,除非另有定义*除了*当函数在另一个函数内时.这是不一致的. (2认同)
  • @jamietre这只是当前问题的切线,[这可以用来聊聊](http://chat.stackoverflow.com/rooms/17/javascript).另外[反击小提琴](http://jsfiddle.net/wbPvz/4/).作为旁注,[JavaScript Garden解释`this`](http://bonsaiden.github.com/JavaScript-Garden/#function.this)相当不错,它基于函数执行或方法执行完全不同 (2认同)