欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS基礎(chǔ)之undefined與null的區(qū)別分析

 更新時(shí)間:2011年08月08日 19:39:50   作者:  
在JavaScript開(kāi)發(fā)中,被人問(wèn)到:null與undefined到底有啥區(qū)別?一時(shí)間不好回答,特別是undefined,因?yàn)檫@涉及到undefined的實(shí)現(xiàn)原理。
于是,細(xì)想之后,寫(xiě)下本文,請(qǐng)各位大俠拍磚。
總所周知:
null == undefined
但是:
null !== undefined
那么這兩者到底有啥區(qū)別呢?
null
這是一個(gè)對(duì)象,但是為空。因?yàn)槭菍?duì)象,所以 typeof null 返回 'object' 。
null 是 JavaScript 保留關(guān)鍵字。
null 參與數(shù)值運(yùn)算時(shí)其值會(huì)自動(dòng)轉(zhuǎn)換為 0 ,因此,下列表達(dá)式計(jì)算后會(huì)得到正確的數(shù)值:
表達(dá)式:123 + null結(jié)果值:123
表達(dá)式:123 * null結(jié)果值:0
undefined
undefined是全局對(duì)象(window)的一個(gè)特殊屬性,其值是未定義的。但 typeof undefined 返回 'undefined' 。
雖然undefined是有特殊含義的,但它確實(shí)是一個(gè)屬性,而且是全局對(duì)象(window)的屬性。請(qǐng)看下面的代碼:
復(fù)制代碼 代碼如下:

alert('undefined' in window); //輸出:true
var anObj = {};
alert('undefined' in anObj); //輸出:false

從中可以看出,undefined是window對(duì)象的一個(gè)屬性,但卻不是anObj對(duì)象的一個(gè)屬性。
注意:盡管undefined是有特殊含義的屬性,但卻不是JavaScript的保留關(guān)鍵字。
undefined參與任何數(shù)值計(jì)算時(shí),其結(jié)果一定是NaN。
隨便說(shuō)一下,NaN是全局對(duì)象(window)的另一個(gè)特殊屬性,Infinity也是。這些特殊屬性都不是JavaScript的保留關(guān)鍵字!
提高undefined性能
當(dāng)我們?cè)诔绦蛑惺褂胾ndefined值時(shí),實(shí)際上使用的是window對(duì)象的undefined屬性。
同樣,當(dāng)我們定義一個(gè)變量但未賦予其初始值,例如:

var aValue;
這時(shí),JavaScript在所謂的預(yù)編譯時(shí)會(huì)將其初始值設(shè)置為對(duì)window.undefined屬性的引用,
于是,當(dāng)我們將一個(gè)變量或值與undefined比較時(shí),實(shí)際上是與window對(duì)象的undefined屬性比較。這個(gè)比較過(guò)程中,JavaScript會(huì)搜索window對(duì)象名叫‘undefined'的屬性,然后再比較兩個(gè)操作數(shù)的引用指針是否相同。
由于window對(duì)象的屬性值是非常多的,在每一次與undefined的比較中,搜索window對(duì)象的undefined屬性都會(huì)花費(fèi)時(shí) 間。在需要頻繁與undefined進(jìn)行比較的函數(shù)中,這可能會(huì)是一個(gè)性能問(wèn)題點(diǎn)。因此,在這種情況下,我們可以自行定義一個(gè)局部的undefined變 量,來(lái)加快對(duì)undefined的比較速度。例如:
復(fù)制代碼 代碼如下:

function anyFunc()
{
var undefined; //自定義局部undefined變量
if(x == undefined) //作用域上的引用比較
while(y != undefined) //作用域上的引用比較
};

其中,定義undefined局部變量時(shí),其初始值會(huì)是對(duì)window.undefined屬性值的引用。新定義的局部undefined變 量存在與該函數(shù)的作用域上。在隨后的比較操作中,JavaScript代碼的書(shū)寫(xiě)方式?jīng)]有任何的改變,但比較速度卻很快。因?yàn)樽饔糜蛏系淖兞繑?shù)量會(huì)遠(yuǎn)遠(yuǎn)少 于window對(duì)象的屬性,搜索變量的速度會(huì)極大提高。
這就是許多前端JS框架為什么常常要自己定義一個(gè)局部undefined變量的原因!
希望通過(guò)本文的介紹,能給你帶來(lái)幫助。

相關(guān)文章

  • JS實(shí)現(xiàn)躲避粒子小游戲

    JS實(shí)現(xiàn)躲避粒子小游戲

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)躲避粒子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • JavaScript實(shí)現(xiàn)的搜索及高亮顯示功能示例

    JavaScript實(shí)現(xiàn)的搜索及高亮顯示功能示例

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)的搜索及高亮顯示功能,涉及javascript字符遍歷與頁(yè)面元素屬性相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • 解決layui彈框失效的問(wèn)題

    解決layui彈框失效的問(wèn)題

    今天小編就為大家分享一篇解決layui彈框失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • 基于ES6作用域和解構(gòu)賦值詳解

    基于ES6作用域和解構(gòu)賦值詳解

    下面小編就為大家?guī)?lái)一篇基于ES6作用域和解構(gòu)賦值詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • layui table設(shè)置某一行的字體顏色方法

    layui table設(shè)置某一行的字體顏色方法

    今天小編就為大家分享一篇layui table設(shè)置某一行的字體顏色方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • JS+CSS實(shí)現(xiàn)帶關(guān)閉按鈕DIV彈出窗口的方法

    JS+CSS實(shí)現(xiàn)帶關(guān)閉按鈕DIV彈出窗口的方法

    這篇文章主要介紹了JS+CSS實(shí)現(xiàn)帶關(guān)閉按鈕DIV彈出窗口的方法,實(shí)例分析了div彈出層窗口的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 基于JavaScript實(shí)現(xiàn)單例模式

    基于JavaScript實(shí)現(xiàn)單例模式

    這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)單例模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • js判斷子窗體是否關(guān)閉的方法

    js判斷子窗體是否關(guān)閉的方法

    這篇文章主要介紹了js判斷子窗體是否關(guān)閉的方法,涉及javascript針對(duì)子窗體的獲取與屬性判定技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • JS常用字符串方法(推薦)

    JS常用字符串方法(推薦)

    下面小編就為大家?guī)?lái)一篇JS常用字符串方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • JS逆向之愛(ài)奇藝滑塊加密的實(shí)現(xiàn)

    JS逆向之愛(ài)奇藝滑塊加密的實(shí)現(xiàn)

    本文主要介紹了JS逆向之愛(ài)奇藝滑塊加密的實(shí)現(xiàn),文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論