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

JavaScript null和undefined區(qū)別分析

 更新時間:2009年10月14日 15:03:15   作者:  
在JavaScript開發(fā)中,被人問到:null與undefined到底有啥區(qū)別?

一時間不好回答,特別是undefined,因為這涉及到undefined的實現(xiàn)原理。于是,細想之后,寫下本文,請各位大俠拍磚。
總所周知:null == undefined
但是:null !== undefined
那么這兩者到底有啥區(qū)別呢?
請聽俺娓娓道來...
null
這是一個對象,但是為空。因為是對象,所以 typeof null 返回 'object' 。
null 是 JavaScript 保留關(guān)鍵字。
null 參與數(shù)值運算時其值會自動轉(zhuǎn)換為 0 ,因此,下列表達式計算后會得到正確的數(shù)值:
表達式:123 + null    結(jié)果值:123
表達式:123 * null    結(jié)果值:0
undefined
undefined是全局對象(window)的一個特殊屬性,其值是未定義的。但 typeof undefined 返回 'undefined' 。
雖然undefined是有特殊含義的,但它確實是一個屬性,而且是全局對象(window)的屬性。請看下面的代碼:

復制代碼 代碼如下:

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

從中可以看出,undefined是window對象的一個屬性,但卻不是anObj對象的一個屬性。
注意:盡管undefined是有特殊含義的屬性,但卻不是JavaScript的保留關(guān)鍵字。
undefined參與任何數(shù)值計算時,其結(jié)果一定是NaN。
隨便說一下,NaN是全局對象(window)的另一個特殊屬性,Infinity也是。這些特殊屬性都不是JavaScript的保留關(guān)鍵字!
提高undefined性能
當我們在程序中使用undefined值時,實際上使用的是window對象的undefined屬性。
同樣,當我們定義一個變量但未賦予其初始值,例如:
var aValue;
這時,JavaScript在所謂的預編譯時會將其初始值設(shè)置為對window.undefined屬性的引用,
于是,當我們將一個變量或值與undefined比較時,實際上是與window對象的undefined屬性比較。這個比較過程中,JavaScript會搜索window對象名叫‘undefined'的屬性,然后再比較兩個操作數(shù)的引用指針是否相同。
由于window對象的屬性值是非常多的,在每一次與undefined的比較中,搜索window對象的undefined屬性都會花費時 間。在需要頻繁與undefined進行比較的函數(shù)中,這可能會是一個性能問題點。因此,在這種情況下,我們可以自行定義一個局部的undefined變 量,來加快對undefined的比較速度。例如:
復制代碼 代碼如下:

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

其中,定義undefined局部變量時,其初始值會是對window.undefined屬性值的引用。新定義的局部undefined變 量存在與該函數(shù)的作用域上。在隨后的比較操作中,JavaScript代碼的書寫方式?jīng)]有任何的改變,但比較速度卻很快。因為作用域上的變量數(shù)量會遠遠少 于window對象的屬性,搜索變量的速度會極大提高。
這就是許多前端JS框架為什么常常要自己定義一個局部undefined變量的原因!

相關(guān)文章

  • js控制瀏覽器前進、后退、頁面跳轉(zhuǎn)詳細方法和示例

    js控制瀏覽器前進、后退、頁面跳轉(zhuǎn)詳細方法和示例

    這篇文章主要介紹了js控制瀏覽器前進、后退、頁面跳轉(zhuǎn)詳細方法和示例,包括location.href跳轉(zhuǎn)、history.back/forward前進后退、pushState修改歷史記錄,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-07-07
  • 通過實例了解Render Props回調(diào)地獄解決方案

    通過實例了解Render Props回調(diào)地獄解決方案

    這篇文章主要介紹了通過實例了解Render Props回調(diào)地獄解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Openlayers實現(xiàn)長度測量的方法

    Openlayers實現(xiàn)長度測量的方法

    在Openlayers中,使用ol/sphere模塊的getDistance函數(shù)可以計算兩點間的大圓距離,繪制線路時,通過監(jiān)聽繪制事件和幾何對象的變化,可實時更新距離,同時getLength函數(shù)幫助獲取整條線路的長度,這些功能主要用于地理信息系統(tǒng)中的距離測量和地圖制作
    2024-11-11
  • uni-app小程序中父組件和子組件傳值的實現(xiàn)實例

    uni-app小程序中父組件和子組件傳值的實現(xiàn)實例

    uniapp父子組件引用傳值,和vue的一樣,沒有小程序那樣的麻煩,下面這篇文章主要給大家介紹了關(guān)于uni-app小程序中父組件和子組件傳值的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 微信小程序 輪播圖實現(xiàn)原理及優(yōu)化詳解

    微信小程序 輪播圖實現(xiàn)原理及優(yōu)化詳解

    這篇文章主要介紹了微信小程序 輪播圖實現(xiàn)原理及優(yōu)化詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 詳解js創(chuàng)建對象的幾種方法及繼承

    詳解js創(chuàng)建對象的幾種方法及繼承

    這篇文章主要介紹了js創(chuàng)建對象的幾種方法及繼承,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 關(guān)于微信小程序使用echarts/數(shù)據(jù)刷新重新渲染/圖層遮擋問題

    關(guān)于微信小程序使用echarts/數(shù)據(jù)刷新重新渲染/圖層遮擋問題

    這篇文章主要介紹了微信小程序使用echarts/數(shù)據(jù)刷新重新渲染/圖層遮擋問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • js中??是什么意思(示例場景)

    js中??是什么意思(示例場景)

    ???是一個非常有用的運算符,特別適合在需要區(qū)分?null/undefined?和其他假值的場景中使用,它可以幫助你更精確地處理默認值邏輯,本文給大家介紹js中??是什么意思,感興趣的朋友一起看看吧
    2025-04-04
  • 幾個比較實用的JavaScript 測試及效驗工具

    幾個比較實用的JavaScript 測試及效驗工具

    JavaScript 是一款強大的廣泛運用于現(xiàn)代Web站點及應用的腳本語言。作為一個技藝精湛的 Web 開發(fā)者,掌握JavaScript可以增強用戶的使用體驗,提供交互及富客戶端等功能。
    2010-04-04
  • JavaScript實現(xiàn)切換多張圖片

    JavaScript實現(xiàn)切換多張圖片

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)切換多張圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01

最新評論