日期:2014-05-16 浏览次数:20370 次
在找一些javascript资料的时候,翻看了一些博文, 其中一篇关于对null和undefined的分析的博文 http://blog.csdn.net/leadzen/article/details/3899392, 里面一些总结, 评论让我思考不少, 个人认为是一篇理解偏差非常大的文章, 但是访问量, 回复基本上都是叫好的. 甚至让我有些怀疑自己(自以为我的javascript知识是远远远远不够好的). 停下来想想, 在国内的各个论坛找一些技术文章看的时候, 好像对于90%以上的人对javascript的理解, 有严重的偏差(在找一些资料的时候,都不太敢看国内论坛里的一些文章). 也写一点东西, 希望能让自己的思路清晰一些, 也能帮到一些人.
先对javascript本身这个名词加一些说明, 参见 http://www.w3school.com.cn/js/pro_js_history.asp (w3school.com.cn的内容基本可信, 基本就是国外w3school的翻译, 里面的内容基本算是比较权威). 本文后面所有用的ECMAScript代表平时所说的javascript.
还是针对之前提到的博文,作一些说明(博文建议直接找开链接查看,由于格式、篇幅原因,不贴出来)
1. 对于null和undefined,ECMAScript规范中定义了6中数据类型, Null, Undefined, Boolean, Number, String和Object. null和undefined分别是类型Null和Undefined的唯一的值<参见 ecmascript language specification第4章,第8章>. 而对于null和undefined的比较, 语言规范本身就说明: 在比较 x == y 时, 如果 x 为 null 并且 y 为 undefined 或 者 x 为undefined 并且 y 为 null时, 返回true. 而 !== 符号是跟 === (strict equality) 相对的, 而 undefined === null 是返回false的<具体比较规则参见ecmascript language specification第11.9章>.
所以对于二者的比较结果, 就没有意外了.
2.关于运算符typeof对null和undefined的运算
对值为Undefined类型执行typeof运算返回"undefined", 对Null类型执行typeof运算,返回"object". 其它类型执行typeof运算返回值见下表
Table 20 — typeof Operator Results
Type of val | Result |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |