javascript中對null, undefined的誤解

來源:互聯網
上載者:User

在找一些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"
Number "number"
String "string"
Object (native and does not implement [[Call]]) "object"
Object (native or host and does implement [[Call]]) "function"
Object (host and does not implement [[Call]]) Implementation-defined except may not be "undefined","boolean""number",
or "string".

typeof的具體運算規則參見<ecmascript language specification 11.4.3章>.


    3.對於null和undefined到其它類型的轉換

3.1 轉Boolean類型

Undefined  -->  false

Null  -->  false

Number(+0, -0, NaN)返回false, 其它返回true

String 類型, 空串返回false, 其它返回true.

具體參見<ecmascript language specification 第九章>.

3.2  轉Number類型

Undefine會返回NaN

Null會返回0

    

    4. 關於ECMAScript(javascript)和html

之前提到博文中,博主提到undefined是window的屬性,這句話本身應該是沒錯的,但是這個肯定不是必然的! ECMAScript本身只是一門語言,雖然現在的用途基本上是作為瀏覽器的指令碼語言,但其本身應該是跟瀏覽器沒有任何關係的.而window對象是html
dom模型的一個root對象(global對象), window對象有undefined屬性只是因為瀏覽器javascript引擎的實現. 跟ECAScript本身沒有任何關係.

 window對象跟undefined更是沒有任何聯絡.

    以上是關於this和undefined的行為的一些分析,主要是看到博文http://blog.csdn.net/leadzen/article/details/3899392之後有感.如果有不正確的地方,歡迎指出.

參考(ECMAScript規範):
http://www.ecma-international.org/ecma-262/5.1/

PDF版本可在我的CSDN資源中下到,也可直接到ecma的網站中下載閱讀.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.