成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

由ES規(guī)范學(xué)JavaScript(一):為什么undefined可以被賦值,而null不可以?

ccj659 / 2043人閱讀

摘要:既然是屬性,當(dāng)然可以賦值。然而這三個(gè)屬性又是不可寫的屬性,即它們的的內(nèi)部特性為,所以賦值無效。因?yàn)閲?yán)格模式下,禁止給對(duì)象的只讀屬性賦值。雖然號(hào)稱是這種原始類型可以取的唯一值,然而輸出參考文檔

提出問題

如下代碼:

undefined = 123;
null = 123; // 報(bào)錯(cuò):Uncaught Reference Error

第一條語句可以執(zhí)行,盡管賦值并沒有成功;第二條語句報(bào)錯(cuò)。這是為什么呢?undefinednull有什么區(qū)別?

解決問題

讀過ES規(guī)范后,發(fā)現(xiàn)原來是這樣的:

undefined、NaNInfinity都是全局對(duì)象window的屬性。既然是屬性,當(dāng)然可以賦值。然而這三個(gè)屬性又是不可寫的屬性,即它們的的內(nèi)部特性[[writable]]false,所以賦值無效。

null是一個(gè)字面量(literal),準(zhǔn)確地說叫做Null字面量。與truefalse類似。它們都屬于JavaScript的保留字。換句話說它們都是,與數(shù)字值123、字符串值"foobar"一樣,當(dāng)然不能被賦值了。

再多說些

既然undefined只是一個(gè)屬性,并不是語言的保留字,那么它是否可以用來作為變量的名字?當(dāng)然可以,你完全可以自定義一個(gè)叫做undefined的變量或者函數(shù),但是注意不要把它放到全局作用域。例如:

function foo() {
     var undefined = 10;
     console.log(undefined);
}
foo(); // 打印10

通過ES5新增的方法Object.getOwnPropertyDescriptor方法,可以證明undefinedwindow對(duì)象的只讀屬性:

Object.getOwnPropertyDescriptor(window, "undefined");

/** 輸出:Object {value: undefined, writable: false,
enumerable: false, configurable: false} **/

在嚴(yán)格模式下,給undefined賦值會(huì)報(bào)錯(cuò)。因?yàn)閲?yán)格模式下,禁止給對(duì)象的只讀屬性賦值。

null雖然號(hào)稱是Null這種原始類型可以取的唯一值,然而:

 typeof null; // 輸出"object"

參考文檔

15.1.1.3 undefined

7.6.1 Reserved Words

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/91587.html

相關(guān)文章

  • ES規(guī)范學(xué)JavaScript(二):深入理解“連等賦值”問題

    摘要:有這樣一個(gè)熱門問題其實(shí)這個(gè)問題很好理解,關(guān)鍵要弄清下面兩個(gè)知識(shí)點(diǎn)引擎對(duì)賦值表達(dá)式的處理過程賦值運(yùn)算的右結(jié)合性一賦值表達(dá)式形如的表達(dá)式稱為賦值表達(dá)式。賦值表達(dá)式是右結(jié)合的。 有這樣一個(gè)熱門問題: var a = {n: 1}; var b = a; a.x = a = {n: 2}; alert(a.x); // --> undefined alert(b.x); // --> {n: ...

    JasonZhang 評(píng)論0 收藏0
  • 學(xué)前端學(xué)習(xí)筆記(六)--JavaScript類型有哪些你知道的細(xì)節(jié)?

    摘要:的碼點(diǎn)被稱為基本字符區(qū)域。關(guān)于的介紹,我準(zhǔn)備用文檔阮一峰來做一些介紹,具體的可以參考文檔引入的原因的對(duì)象屬性名都是字符串,這容易造成屬性名的沖突。其他的一些屬性可以去看文檔阮一峰注意函數(shù)前不能使用命令,否則會(huì)報(bào)錯(cuò)。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完...

    joyvw 評(píng)論0 收藏0
  • 學(xué)前端學(xué)習(xí)筆記(六)--JavaScript類型有哪些你知道的細(xì)節(jié)?

    摘要:的碼點(diǎn)被稱為基本字符區(qū)域。關(guān)于的介紹,我準(zhǔn)備用文檔阮一峰來做一些介紹,具體的可以參考文檔引入的原因的對(duì)象屬性名都是字符串,這容易造成屬性名的沖突。其他的一些屬性可以去看文檔阮一峰注意函數(shù)前不能使用命令,否則會(huì)報(bào)錯(cuò)。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完...

    zlyBear 評(píng)論0 收藏0
  • 學(xué)前端學(xué)習(xí)筆記(六)--JavaScript類型有哪些你知道的細(xì)節(jié)?

    摘要:的碼點(diǎn)被稱為基本字符區(qū)域。關(guān)于的介紹,我準(zhǔn)備用文檔阮一峰來做一些介紹,具體的可以參考文檔引入的原因的對(duì)象屬性名都是字符串,這容易造成屬性名的沖突。其他的一些屬性可以去看文檔阮一峰注意函數(shù)前不能使用命令,否則會(huì)報(bào)錯(cuò)。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完...

    Lsnsh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<