- 資訊首頁(yè) > 互聯(lián)網(wǎng) > 主機資訊 >
- 網(wǎng)頁(yè)出現undefined是什么意思?undefined與null有何區
最近上網(wǎng)出現了一個(gè)奇怪的現象,瀏覽百度貼吧的時(shí)候,出現undefined,那么這個(gè)undefined到底是什么意思呢?
undefined是一個(gè)特殊值,通常用于指示變量尚未賦值。對未定義值的引用返回特殊值。其實(shí)大多數計算機語(yǔ)言,只有一個(gè)表示"無(wú)"的值,比如,C語(yǔ)言的NULL,Java語(yǔ)言的null,Python語(yǔ)言的None,Ruby語(yǔ)言的nil。
但有一種語(yǔ)言是例外的,JavaScript語(yǔ)言居然有兩個(gè)表示"無(wú)"的值:undefined和null。這是為什么?undefined 和null有什么區別呢?
一、相似性
在JavaScript中,將一個(gè)變量賦值為undefined或null,實(shí)話(huà)說(shuō),二者幾乎沒(méi)區別。
var a = undefined;
var a = null;
上面代碼中,a變量分別被賦值為undefined和null,這兩種寫(xiě)法效果幾乎是一樣的。
undefined和null在if語(yǔ)句中,都會(huì )被自動(dòng)轉為false,相等運算符甚至直接報告兩者相等。
if (!undefined)
console.log('undefined is false');
// undefined is false
if (!null)
console.log('null is false');
// null is false
undefined == null
// true
上面代碼說(shuō)明,兩者的行為是何等相似!
既然undefined和null的含義與用法都差不多,為什么要同時(shí)設置兩個(gè)這樣的值?
二、真相揭秘
原來(lái),這與JavaScript的歷史有關(guān)。1995年JavaScript誕生時(shí),最初像Java一樣,只設置了null作為表示"無(wú)"的值。但是,JavaScript的設計者Brendan Eich,覺(jué)得這樣做還不夠,有兩個(gè)原因。
首先,null像在Java里一樣,被當成一個(gè)對象。但是,JavaScript的數據類(lèi)型分成原始類(lèi)型(primitive)和合成類(lèi)型(complex)兩大類(lèi),Brendan Eich覺(jué)得表示"無(wú)"的值最好不是對象。
其次,JavaScript的最初版本沒(méi)有包括錯誤處理機制,發(fā)生數據類(lèi)型不匹配時(shí),往往是自動(dòng)轉換類(lèi)型或者默默地失敗。Brendan Eich覺(jué)得,如果null自動(dòng)轉為0,很不容易發(fā)現錯誤。
因此,Brendan Eich又設計了一個(gè)undefined。
三、目前的用法
但是,上面這樣的區分,在實(shí)踐中很快就被證明不可行。目前,null和undefined基本是同義的,只有一些細微的差別。
null表示"沒(méi)有對象",即該處不應該有值。典型用法是:
(1) 作為函數的參數,表示該函數的參數不是對象。
(2) 作為對象原型鏈的終點(diǎn)。
Object.getPrototypeOf(Object.prototype)
// null
undefined表示"缺少值",就是此處應該有一個(gè)值,但是還沒(méi)有定義。典型用法是:
(1)變量被聲明了,但沒(méi)有賦值時(shí),就等于undefined。
(2) 調用函數時(shí),應該提供的參數沒(méi)有提供,該參數等于undefined。
(3)對象沒(méi)有賦值的屬性,該屬性的值為undefined。
(4)函數沒(méi)有返回值時(shí),默認返回undefined。
var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined
來(lái)源鏈接:https://www.qy.cn/zx/idc/829.html
本站聲明:網(wǎng)站內容來(lái)源于網(wǎng)絡(luò ),如有侵權,請聯(lián)系我們,我們將及時(shí)處理。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站