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

資訊專欄INFORMATION COLUMN

【譯】javascript中的undefined可以被重寫

codeKK / 1962人閱讀

摘要:然而,這一行為在年的被修復(fù)了。在現(xiàn)代瀏覽器中,的值將不能被重寫我們需要支持或者更古老的瀏覽器怎么辦通常指令是安全的。都會(huì)計(jì)算得到另外一種選擇,你可以使用操作符安全地檢查是否已經(jīng)被賦值。雖然沒(méi)有被聲明,仍然會(huì)說(shuō)他是。

眾所周知,當(dāng)聲明一個(gè)變量,并且沒(méi)有給賦值的情況下,它的初始值是 undefined。
但是在javascript中,怎么檢查一個(gè)值是否為 undefined 呢?

簡(jiǎn)單的回答

在現(xiàn)代瀏覽器中,你可以安全的直接比較將變量是與 undefined 進(jìn)行比較

if (name === undefined) {
    //...
}

一些人反對(duì)直接使用 undefined 變量進(jìn)行比較,因?yàn)樵谂f的瀏覽器中它允許被重新賦值,像下面這樣:

undefined = "test"

在被重新賦值后,直接使用 undefined 將不能正確的檢測(cè)一個(gè)變量是否被賦值。
然而,這一行為在2009年的ECMAScript 5被修復(fù)了。

15.1.1.3 undefined
The value of undefined is undefined (see 8.1). This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
undefined 的值是 undefined。這個(gè)屬性有不可寫,不可枚舉,不可配置的特性。

在現(xiàn)代瀏覽器中,undefined的值將不能被重寫

我們需要支持ie8或者更古老的瀏覽器怎么辦

通常undefined指令是安全的。在應(yīng)用中并沒(méi)有什么理由需要修改undefined的值。
Thomas的回答使用具有說(shuō)服力的推理,論證了這一點(diǎn)。

我沒(méi)有聽(tīng)從人們告訴我,我不應(yīng)該使用setTimeout,因?yàn)橛腥丝梢裕ㄟ@樣用):

window.setTimeout = function () {
    alert("Got you now!");
};

下面一行,它可以重新定義參數(shù),替換原始值,使 raw === undefined 看起來(lái)是假的。

如果你仍然很在意,有兩個(gè)方法在即使全局 window.undefined 已經(jīng)被重寫的情況下,依然可以檢查一個(gè)值是否為 undefined

if (name === void(0)) {
    //...
}

在這個(gè)例子中 0 沒(méi)有任何實(shí)際意義,你想要使用 1 or function(){}也無(wú)所謂。 void(anything)都會(huì)計(jì)算得到undefiend

另外一種選擇,你可以使用typeof操作符安全地檢查是否已經(jīng)被賦值。你可以檢查一個(gè)值的類型是否為 "undefined" 代替與全局的 undefined 比較.

if (typeof name === "undefined") {
    //...
}

注意第二個(gè)選擇與前一個(gè)方案稍微有點(diǎn)差異。雖然name沒(méi)有被聲明,typeof 仍然會(huì)說(shuō)他是 undefined。如果你直接使用 nameundefinedor void(0)你會(huì)得到ReferenceError異常的錯(cuò)誤.

但是不要直接使用void(0)

在代碼中避免使用void(0)或者 typeof x === "undefined",這些表達(dá)式不是自解釋的,應(yīng)該包裝在isUndefined function函數(shù)中,像這樣:

function isUndefined(value){
    //獲得undefined,保證它沒(méi)有被重新賦值
    var undefined = void(0);
    return value === undefined;
}

許多的工具庫(kù)已經(jīng)部署了這個(gè)方法,例如: _.isUndefined,underscore中的isUndefined方法

原文地址
原文標(biāo)題:在javascript中怎樣檢查undefiend

初次翻譯,如有錯(cuò)誤,歡迎指正

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

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

相關(guān)文章

  • JavaScript中的執(zhí)行上下文和堆棧是什么?

    摘要:每次調(diào)用函數(shù)時(shí),都會(huì)創(chuàng)建一個(gè)新的執(zhí)行上下文。理解執(zhí)行上下文和堆??梢宰屇私獯a為什么要計(jì)算您最初沒(méi)有預(yù)料到的不同值的原因。 首發(fā):https://www.love85g.com/?p=1723 在這篇文章中,我將深入研究JavaScript最基本的部分之一,即執(zhí)行上下文。在這篇文章的最后,您應(yīng)該更清楚地了解解釋器要做什么,為什么在聲明一些函數(shù)/變量之前可以使用它們,以及它們的值是如何...

    miguel.jiang 評(píng)論0 收藏0
  • [] 為什么原型繼承很重要

    摘要:使用構(gòu)造函數(shù)的原型繼承相比使用原型的原型繼承更加復(fù)雜,我們先看看使用原型的原型繼承上面的代碼很容易理解。相反的,使用構(gòu)造函數(shù)的原型繼承像下面這樣當(dāng)然,構(gòu)造函數(shù)的方式更簡(jiǎn)單。 五天之前我寫了一個(gè)關(guān)于ES6標(biāo)準(zhǔn)中Class的文章。在里面我介紹了如何用現(xiàn)有的Javascript來(lái)模擬類并且介紹了ES6中類的用法,其實(shí)它只是一個(gè)語(yǔ)法糖。感謝Om Shakar以及Javascript Room中...

    xiao7cn 評(píng)論0 收藏0
  • 搞懂JavaScript的Function.prototype.bind[]

    摘要:搞懂的譯可能是初學(xué)的人最不關(guān)心的函數(shù),當(dāng)你意識(shí)到需要保持在其他函數(shù)中的上下文,實(shí)際上你需要的是。這就是問(wèn)題所在。整合事件綁定和一個(gè)重大提高就是,和等等。然而,并沒(méi)有原生添加事件到多個(gè)節(jié)點(diǎn)的方式。能力有限,如有疑問(wèn),紕漏,速指出,感謝你 搞懂JavaScript的Function.prototype.bind[譯] Ben Howdle binding可能是初學(xué)Javascript的人最...

    Pandaaa 評(píng)論0 收藏0
  • 】45種Javascript技巧大全

    摘要:對(duì)進(jìn)行序列化和反序列化避免使用和構(gòu)造函數(shù)使用和構(gòu)造函數(shù)是非常昂貴的操作,因?yàn)槊看嗡麄兌紩?huì)調(diào)用腳本引擎將源代碼轉(zhuǎn)換成可執(zhí)行代碼。 原文:45 Useful JavaScript Tips, Tricks and Best Practices 譯文:45個(gè)有用的JavaScript技巧,竅門和最佳實(shí)踐 譯者:dwqs 在這篇文章中,我將分享一些JavaScript常用的技巧,竅門和最...

    hufeng 評(píng)論0 收藏0
  • 」編寫更好的 JavaScript 條件式和匹配條件的技巧

    摘要:通常情況下,面向?qū)ο缶幊套屛覀兊靡员苊鈼l件式,并代之以繼承和多態(tài)。同時(shí),使用條件式簡(jiǎn)寫來(lái)表示值。因此,對(duì)于以這種方式編寫的代碼,你需要使用進(jìn)行編譯。 原文地址:Tips and Tricks for Better JavaScript Conditionals and Match Criteria 原文作者:Milos Protic 介紹 如果你像我一樣樂(lè)于見(jiàn)到整潔的代碼,那么你...

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

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

0條評(píng)論

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