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

資訊專欄INFORMATION COLUMN

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

zhigoo / 3260人閱讀

摘要:例如自定義局部變量作用域上的引用比較作用域上的引用比較其中,定義局部變量時(shí),其初始值會(huì)是對(duì)屬性值的引用。新定義的局部變量存在與該函數(shù)的作用域上。這就是許多前端框架為什么常常要自己定義一個(gè)局部變量的原因

在javascript開發(fā)中,開始學(xué)習(xí)js的時(shí)候時(shí)常困惑我的就是null和undefined的區(qū)別,所以很想總結(jié)下我對(duì)這兩個(gè)的理解
學(xué)習(xí)過(guò)js的同學(xué)都知道:

null==undefined;
true
null!==undefined;
true

那這個(gè)到底是怎么回事呢?

1.null
首先他是一個(gè)對(duì)象,但是是一個(gè)空對(duì)象,因?yàn)槭且粋€(gè)對(duì)象,所以

typeof null;
"object"

null是js保留的關(guān)鍵字;
null在參與數(shù)值運(yùn)算的時(shí)候?qū)⒆詣?dòng)轉(zhuǎn)換成 0 ;例如:

var c = 123 + null;
c
123
var a = 188*null;
a
0

2.undefined
首先undefined是全局對(duì)象中的一個(gè)特殊屬性,他的值是一個(gè)未定義的,我們來(lái)看看他是否為全局對(duì)象的屬性:

alert("undefined" in window);

上述這段代碼會(huì)在瀏覽器輸出true;
然而當(dāng)我們創(chuàng)建一個(gè)空對(duì)象的時(shí)候:

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

undefined參與的所有數(shù)值運(yùn)算,其值都會(huì)返回 NaN

var h=123+undefined;
h;
NaN
當(dāng)我們?cè)诔绦蛑惺褂胾ndefined值時(shí),實(shí)際上使用的是window對(duì)象的undefined屬性。 
同樣,當(dāng)我們定義一個(gè)變量但未賦予其初始值,例如:
var vaule ;
undefined
這個(gè)時(shí)候JavaScript預(yù)編譯會(huì)將其初始值的設(shè)置為 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的比較速度。例如:

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

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

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

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

相關(guān)文章

  • 分析 JavaScript 數(shù)據(jù)類型變量

    摘要:基本數(shù)據(jù)類型在中,基本數(shù)據(jù)類型有種,即數(shù)值字符串布爾值。兩個(gè)布爾值轉(zhuǎn)為數(shù)值進(jìn)行比較。對(duì)于對(duì)象和布爾值,調(diào)用它們的方法得到對(duì)應(yīng)的字符串值,然后進(jìn)行字符串相加。減法對(duì)于字符串布爾值或者,自動(dòng)調(diào)用,轉(zhuǎn)換結(jié)果若為,那么最終結(jié)果為。 這篇文章,來(lái)聊聊 JS 中的數(shù)據(jù)類型與變量。這是在學(xué)習(xí) JS 時(shí)最基礎(chǔ)的一類問(wèn)題,但卻很重要。希望我的分享有幫助到你。 文章開頭,我先提幾個(gè)面試中遇到的問(wèn)題: 比如...

    Mike617 評(píng)論0 收藏0
  • 前端每周清單第 10 期:Firefox53、React VR發(fā)布、Microsoft Edge現(xiàn)代

    摘要:新聞熱點(diǎn)國(guó)內(nèi)國(guó)外,前端最新動(dòng)態(tài)發(fā)布近日,正式發(fā)布新版本中提供了一系列的特性與問(wèn)題修復(fù)。而近日正式發(fā)布,其能夠幫助開發(fā)者快速構(gòu)建應(yīng)用。 前端每周清單第 10 期:Firefox53、React VR發(fā)布、JS測(cè)試技術(shù)概述、Microsoft Edge現(xiàn)代DOM樹構(gòu)建及性能之道 為InfoQ中文站特供稿件,首發(fā)地址為這里;如需轉(zhuǎn)載,請(qǐng)與InfoQ中文站聯(lián)系。從屬于筆者的 Web 前端入門...

    MingjunYang 評(píng)論0 收藏0
  • 前端面經(jīng)整理JS和CSS

    摘要:作為對(duì)象原型鏈的終點(diǎn)。調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于。它可以用于引用該函數(shù)的函數(shù)體內(nèi)當(dāng)前正在執(zhí)行的函數(shù)。 一 JS 二 CSS 一 JS ==和===的區(qū)別 ===叫做嚴(yán)格運(yùn)算符 ==叫做相等運(yùn)算符嚴(yán)格運(yùn)算符比較時(shí)不僅僅比較數(shù)值還要比較數(shù)據(jù)類型是否一樣相等運(yùn)算符在比較相同類型的數(shù)據(jù)時(shí),與嚴(yán)格相等運(yùn)算符完全一樣。 在比較不同類型的數(shù)據(jù)時(shí),相等運(yùn)算符會(huì)先將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,...

    stonezhu 評(píng)論0 收藏0
  • 前端面經(jīng)整理JS和CSS

    摘要:作為對(duì)象原型鏈的終點(diǎn)。調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于。它可以用于引用該函數(shù)的函數(shù)體內(nèi)當(dāng)前正在執(zhí)行的函數(shù)。 一 JS 二 CSS 一 JS ==和===的區(qū)別 ===叫做嚴(yán)格運(yùn)算符 ==叫做相等運(yùn)算符嚴(yán)格運(yùn)算符比較時(shí)不僅僅比較數(shù)值還要比較數(shù)據(jù)類型是否一樣相等運(yùn)算符在比較相同類型的數(shù)據(jù)時(shí),與嚴(yán)格相等運(yùn)算符完全一樣。 在比較不同類型的數(shù)據(jù)時(shí),相等運(yùn)算符會(huì)先將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,...

    lvzishen 評(píng)論0 收藏0
  • 從[]==![]為true來(lái)剖析JavaScript各種蛋疼類型轉(zhuǎn)換

    摘要:將他們放在堆中是為了不影響棧的效率。所以簡(jiǎn)單數(shù)據(jù)類型的值直接存放在棧中??梢詫?duì)比上面那張圖默認(rèn)是調(diào)用方法的依,于是等于空字符串。空字符串中國(guó)標(biāo)準(zhǔn)時(shí)間方法返回對(duì)象的原始值,可能是字符串?dāng)?shù)值或值等,看具體的對(duì)象。,需要兩個(gè)操作數(shù)同時(shí)轉(zhuǎn)為。 你是否在面試中遇到過(guò)各種奇葩和比較細(xì)節(jié)的問(wèn)題? []==[] //false []==![] //true {}==!{} //false {}==![...

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

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

0條評(píng)論

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