摘要:既然是屬性,當(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ò)。這是為什么呢?undefined和null有什么區(qū)別?
解決問題讀過ES規(guī)范后,發(fā)現(xiàn)原來是這樣的:
undefined、NaN和Infinity都是全局對(duì)象window的屬性。既然是屬性,當(dāng)然可以賦值。然而這三個(gè)屬性又是不可寫的屬性,即它們的的內(nèi)部特性[[writable]]為false,所以賦值無效。
null是一個(gè)字面量(literal),準(zhǔn)確地說叫做Null字面量。與true和false類似。它們都屬于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方法,可以證明undefined是window對(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
摘要:有這樣一個(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: ...
摘要:的碼點(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)筆記以及感悟,完...
摘要:的碼點(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)筆記以及感悟,完...
摘要:的碼點(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)筆記以及感悟,完...
閱讀 1704·2021-11-24 09:39
閱讀 3176·2021-11-22 15:24
閱讀 3108·2021-10-26 09:51
閱讀 3298·2021-10-19 11:46
閱讀 2910·2019-08-30 15:44
閱讀 2231·2019-08-29 15:30
閱讀 2551·2019-08-29 15:05
閱讀 792·2019-08-29 10:55