摘要:例如自定義局部變量作用域上的引用比較作用域上的引用比較其中,定義局部變量時(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
摘要:基本數(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)題: 比如...
摘要:新聞熱點(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 前端入門...
摘要:作為對(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)換,...
摘要:作為對(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)換,...
摘要:將他們放在堆中是為了不影響棧的效率。所以簡(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 {}==![...
閱讀 1104·2021-10-12 10:11
閱讀 887·2019-08-30 15:53
閱讀 2301·2019-08-30 14:15
閱讀 2971·2019-08-30 14:09
閱讀 1210·2019-08-29 17:24
閱讀 984·2019-08-26 18:27
閱讀 1291·2019-08-26 11:57
閱讀 2167·2019-08-23 18:23