最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

理解Javascript_02_理解undefined和null

 更新時(shí)間:2010年10月11日 22:59:31   作者:  
其實(shí)在 ECMAScript 的原始類型中,是有Undefined 和 Null 類型的。 這兩種類型都分別對(duì)應(yīng)了屬于自己的唯一專用值,即undefined 和 null。
來自普遍的回答:
其實(shí)在 ECMAScript 的原始類型中,是有Undefined 和 Null 類型的。 這兩種類型都分別對(duì)應(yīng)了屬于自己的唯一專用值,即undefined 和 null。
值 undefined 實(shí)際上是從值 null 派生來的,因此 ECMAScript 把它們定義為相等的,通過下列代碼可以驗(yàn)證這一結(jié)論:
alert(undefined == null); //true

盡管這兩個(gè)值相等,但它們的含義不同。
undefined 是聲明了變量但未對(duì)其初始化時(shí)賦予該變量的值,null 則用于表示尚未存在的對(duì)象。如果函數(shù)或方法要返回的是對(duì)象,那么找不到該對(duì)象時(shí),返回的通常是 null。
所以alert(undefined===null);//false

說實(shí)話,我沒有看明白,為什么undefined會(huì)繼承null,即然是繼承那為什么undefined!==null,還有未初始化的變量與函數(shù)返回的對(duì)象不存在之間有什么區(qū)別,問題種種,讓人很不信服。

看看內(nèi)存是怎么說的:
Udefined代表沒有賦值的基本數(shù)據(jù)類型。
Null代表沒有賦值的引用數(shù)據(jù)類型。
我們來看一段代碼:
復(fù)制代碼 代碼如下:

var age;
var id = 100;
var div02 = document.getElementById("div02");//注:div02是不存在的
var div01 = document.getElementById("div01");//注:div01存在
alert(id);//100
alert(age);//undefined
alert(div02);//null
alert(div01);//object

再來看一下內(nèi)存的情況:

解決第一個(gè)問題:為什么undefine繼承自null

在Javascript中,基本數(shù)據(jù)類型都有一個(gè)與其對(duì)應(yīng)的引用數(shù)據(jù)類型,number Number,string String,boolean Boolean...,他們具有完全相同的行為,并且相互之間會(huì)產(chǎn)生自動(dòng)拆箱與裝箱的操作。在內(nèi)存分析一文中已經(jīng)講述了基本數(shù)據(jù)類型放在棧內(nèi)存中的意義,由此這們可以得出一個(gè)膚淺的結(jié)論:基本數(shù)據(jù)類型是對(duì)應(yīng)引用數(shù)據(jù)類型的子類,只不過是為了提高效率,將其放在棧內(nèi)存中而已,對(duì)應(yīng)的Undefined代表無值的基本類型,Null代表無值的引用類型,那勢(shì)必就可以推出undefined繼承null。

解決第二個(gè)問題:為什么undefined==null

推出來的答案undefined繼承自null,內(nèi)存告訴我們的答案他們都處于棧中

解決第三個(gè)問題:為什么undefined!==null

內(nèi)存告訴我們,它們的意義確實(shí)是不一樣的,老話一句:Udefined代表沒有賦值的基本數(shù)據(jù)類型,Null代表沒有賦值的引用數(shù)據(jù)類型。他們的內(nèi)存圖有很大的區(qū)別

解決額外的問題:null是處理引用的,為什么null處在棧內(nèi)存中,而不是堆內(nèi)存中

答案一樣的簡單,效率!有必要在棧中分配一塊額外的內(nèi)存去指向堆中的null嗎!

額外的收獲:

當(dāng)我們要切斷與對(duì)象的聯(lián)系,但又并不想給變量賦于其他的值,那么我們可了置null,如var obj = new Object();obj=null;

一些關(guān)于undefined和null的行為

null 參與數(shù)值運(yùn)算時(shí)其值會(huì)自動(dòng)轉(zhuǎn)換為 0 ,因此,下列表達(dá)式計(jì)算后會(huì)得到正確的數(shù)值:

表達(dá)式:123 + null    結(jié)果值:123

typeof null 返回object,因?yàn)閚ull代表是無值的引用。

undefined是全局對(duì)象(window)的一個(gè)特殊屬性,其值為Undefined類型的專用值undefined

undefined參與任何數(shù)值計(jì)算時(shí),其結(jié)果一定是NaN。

當(dāng)聲明的變量未初始化時(shí),該變量的默認(rèn)值是undefined,但是undefined并不同于未定義的值。Typeof運(yùn)算符無法區(qū)分這兩種值

因此對(duì)于變量是否存在的判斷操作是通過if(typeof var == ‘undefined'){ //code here } 來進(jìn)行判斷的,這樣既完全兼容未定義(undefined)和未初始化(uninitialized)兩種情況的

哈哈,當(dāng)你站在內(nèi)存的高度的分析問題的時(shí)候,如此抽象的東西有了實(shí)際的表現(xiàn),一切變得簡單起來!

相關(guān)文章

  • javascript定義函數(shù)的方法

    javascript定義函數(shù)的方法

    javscript中定義和聲明函數(shù)有三種方式:正常方法 構(gòu)造函數(shù) 函數(shù)直接量。
    2010-12-12
  • JavaScript數(shù)組和循環(huán)詳解

    JavaScript數(shù)組和循環(huán)詳解

    這篇文章主要介紹了JavaScript數(shù)組和循環(huán)詳解,本文講解了循環(huán)遍歷數(shù)組、按順序存儲(chǔ)和訪問值、以相反的順序存儲(chǔ)和訪問值、在數(shù)組中搜索等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • JS 實(shí)現(xiàn)banner圖片輪播效果(鼠標(biāo)事件)

    JS 實(shí)現(xiàn)banner圖片輪播效果(鼠標(biāo)事件)

    js實(shí)現(xiàn)banner圖片輪播效果,通過鼠標(biāo)點(diǎn)擊左右可切換圖片,具體實(shí)現(xiàn)代碼大家參考下本文
    2017-08-08
  • js轉(zhuǎn)化毫秒為時(shí)間格式代碼

    js轉(zhuǎn)化毫秒為時(shí)間格式代碼

    這篇文章主要介紹了使用js轉(zhuǎn)化毫秒為時(shí)間格式的具體實(shí)現(xiàn),需要的朋友可以參考下
    2014-04-04
  • javascript實(shí)現(xiàn)簡易數(shù)碼時(shí)鐘

    javascript實(shí)現(xiàn)簡易數(shù)碼時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)簡易數(shù)碼時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • js無后端實(shí)現(xiàn)點(diǎn)擊加載查看更多(提示SEO友好度)

    js無后端實(shí)現(xiàn)點(diǎn)擊加載查看更多(提示SEO友好度)

    為了提示SEO友好度,并且避免調(diào)用后端接口給服務(wù)器造成負(fù)擔(dān),可以使用js無后端實(shí)現(xiàn)點(diǎn)擊加載查看更多,比如HTML中源碼存在60條記錄,預(yù)先顯示20條記錄,點(diǎn)擊“查看更多”一次追加10條,最后一次后按鈕文本改為“已查看全部”,在JavaScript中,你可以使用以下步驟來實(shí)現(xiàn)
    2024-10-10
  • js實(shí)現(xiàn)移動(dòng)端微信頁面禁止字體放大

    js實(shí)現(xiàn)移動(dòng)端微信頁面禁止字體放大

    本文主要介紹了js實(shí)現(xiàn)移動(dòng)端微信頁面禁止字體放大的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • js 鍵盤記錄實(shí)現(xiàn)(兼容FireFox和IE)

    js 鍵盤記錄實(shí)現(xiàn)(兼容FireFox和IE)

    用js實(shí)現(xiàn)鍵盤記錄,要關(guān)注瀏覽器的三種按鍵事件類型,即keydown,keypress和keyup,它們分別對(duì)應(yīng)onkeydown、onkeypress和onkeyup這三個(gè)事件句柄。一個(gè)典型的按鍵會(huì)產(chǎn)生所有這三種事件,依次是keydown,keypress,然后是按鍵釋放時(shí)候的keyup。
    2010-02-02
  • Javascript !!的作用

    Javascript !!的作用

    取變量的Boolean值
    2008-12-12
  • 深入理解JS中的變量及作用域、undefined與null

    深入理解JS中的變量及作用域、undefined與null

    本篇文章主要是對(duì)JS中的變量及作用域、undefined與null進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-03-03

最新評(píng)論

喀什市| 阳新县| 南江县| 海宁市| 库伦旗| 镇赉县| 开平市| 开平市| 孝昌县| 舟山市| 台安县| 寻乌县| 涞水县| 东至县| 永年县| 石城县| 喀什市| 田阳县| 霍城县| 临海市| 乡宁县| 新乡县| 洛川县| 岳阳县| 巍山| 丘北县| 清镇市| 大庆市| 翁源县| 佳木斯市| 苍溪县| 扬中市| 和顺县| 乌兰察布市| 治多县| 开化县| 绥江县| 平利县| 桑日县| 东台市| 托克逊县|