国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

深入理解 Undefined

jimhs / 447人閱讀

摘要:因此,當(dāng)聲明一個(gè)變量但還未賦值時(shí),它將被賦予值。和之間唯一真正的關(guān)系是它們?cè)陬愋蛷?qiáng)制過(guò)程中都判斷為。之所以所以是因?yàn)闆](méi)有執(zhí)行嚴(yán)格的比較,因?yàn)樵诒容^類型時(shí)使用更嚴(yán)格。

</>復(fù)制代碼

  1. 原文:http://davidshariff.com/blog/...
    翻譯:瘋狂的技術(shù)宅

本文首發(fā)微信公眾號(hào):jingchengyideng
歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章

Undefined 這個(gè)概念聽(tīng)起來(lái)很簡(jiǎn)單,不過(guò)你知道應(yīng)該怎樣檢查JavaScript中的變量或?qū)傩允欠裾娴拇嬖趩幔?做這件事最好的方法是什么? 我們?nèi)绾魏w所有的邊界值? 要回答這些問(wèn)題,首先讓我們來(lái)看看究竟什么是undefined......

undefined概述

變量的值被賦予一個(gè)類型,JavaScript中有幾個(gè)內(nèi)置的本地類型:

Undefined

Null

Boolean

String

Number

Object

Reference

etc…

首先看第一個(gè),內(nèi)置的Undefined類型只能有一個(gè)值,它稱為undefined。 這是一個(gè)原始值,只要聲明了變量,就會(huì)為其分配此undefined值,直到您以編程的手段為其分配不同的值。

此外,每當(dāng)函數(shù)完成執(zhí)行并返回一個(gè)沒(méi)有給定的值時(shí),它默認(rèn)返回undefined

</>復(fù)制代碼

  1. var foo,
  2. bar = (function() {
  3. // do some stuff
  4. }()),
  5. baz = (function() {
  6. var hello;
  7. return hello;
  8. }());
  9. typeof foo; // undefined
  10. typeof bar; // undefined
  11. typeof baz; // undefined

因此,當(dāng)聲明一個(gè)變量但還未賦值時(shí),它將被賦予undefined值。 我們還應(yīng)該注意的是:undefined本身是一個(gè)在全局范圍內(nèi)可用的變量/屬性,它的值也是undefined

</>復(fù)制代碼

  1. typeof undefined; // undefined
  2. var foo;
  3. foo === undefined; // true

但是,全局變量undefined并不是保留字,因此它可以被重新定義。 幸運(yùn)的是,從ECMA 5開(kāi)始,就不允許重新定義undefined了,但是在以前的版本和舊版瀏覽器中,可以執(zhí)行以下操作:

</>復(fù)制代碼

  1. typeof undefined; // undefined
  2. undefined = 99;
  3. typeof undefined; // number
null到底代表了什么?

先看下面的代碼:

</>復(fù)制代碼

  1. null == undefined // true
  2. null !== undefined // true

很多人對(duì)此都感到困惑,實(shí)際上很簡(jiǎn)單。 nullundefined之間唯一真正的關(guān)系是:它們?cè)陬愋蛷?qiáng)制過(guò)程中都判斷為false。

之所以所以 null == undefined // true 是因?yàn)?== 沒(méi)有執(zhí)行嚴(yán)格的比較,因?yàn)樵诒容^類型時(shí)使用 !== 更嚴(yán)格。 每當(dāng)您把 null 看作是一個(gè)值時(shí),它會(huì)始終以編程方式進(jìn)行指定,并且在默認(rèn)情況下從不設(shè)置。

訪問(wèn)對(duì)象的屬性

當(dāng)您嘗試使用對(duì)象上一個(gè)不存在的屬性時(shí),也會(huì)得到undefined,如果您把不存在的屬性作為函數(shù)使用有時(shí)會(huì)引發(fā)錯(cuò)誤。

</>復(fù)制代碼

  1. var foo = {};
  2. foo.bar; // undefined
  3. foo.bar(); // TypeError

如果您想分辨“有未定義值的屬性”和“根本不存在的屬性”這兩者,應(yīng)該怎么做呢?

使用typeof 或者 ===都會(huì)給你一個(gè)undefined的值。

使用in運(yùn)算符能夠檢查對(duì)象中是否存在某個(gè)屬性:

</>復(fù)制代碼

  1. var foo = {};
  2. // undefined (這樣不好,bar從未在window對(duì)象中被聲明過(guò))
  3. typeof foo.bar;
  4. // false (如果您不關(guān)心原型鏈,這樣用)
  5. "bar" in foo;
  6. // false (如果你關(guān)心原型鏈,就這樣用)
  7. foo.hasOwnProperty("bar");
應(yīng)該用typeof還是in/hasOwnProperty?

這很顯然。一般來(lái)說(shuō),如果要測(cè)試是一個(gè)屬性否存在,那么就用 in/hasOwnProperty,如果要檢查屬性或變量的值,則用 typeof

通過(guò)例子進(jìn)行總結(jié)

檢查變量是否存在:

</>復(fù)制代碼

  1. if (typeof foo !== "undefined") {}

檢查對(duì)象上的屬性是否存在,無(wú)論是否已經(jīng)為它分配了值:

</>復(fù)制代碼

  1. // 存在于對(duì)象上,同時(shí)也檢查原型
  2. if ("foo" in bar) {}
  3. // 直接存在于對(duì)象上,不檢查原型
  4. if (bar.hasOwnProperty("foo")) {}

檢查對(duì)象上是否存在屬性,并且屬性具有值集(真值或假)

</>復(fù)制代碼

  1. var bar = {
  2. foo: false
  3. };
  4. if ("foo" in bar && typeof bar.foo !== "undefined"){
  5. // bar.foo存在,并且它包含以編程方式分配的值
  6. }
本文首發(fā)微信公眾號(hào):jingchengyideng


歡迎掃描二維碼關(guān)注公眾號(hào),每天都給你推送新鮮的前端技術(shù)文章

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/108897.html

相關(guān)文章

  • 【1】JavaScript 基礎(chǔ)深入——數(shù)據(jù)類型深入理解與總結(jié)

    摘要:類型的實(shí)例首先要理解的含義是例子的意思,實(shí)際上是判斷是否是的一個(gè)實(shí)例。 數(shù)據(jù)類型深入理解 數(shù)據(jù)類型分類 基本(值)類型(5種) String:任意字符串 Number:任意的數(shù)字 boolean:true/false null:null undefined:undefined 對(duì)象(引用)類型(3種) Object:任意對(duì)象 Array:一種特別的對(duì)象(數(shù)值下...

    since1986 評(píng)論0 收藏0
  • 深入理解JavaScript(一):變量提升

    摘要:變量提升原理引擎的工作方式是先解析代碼,獲取所有被聲明的變量然后在運(yùn)行。代碼自上而下執(zhí)行之前,瀏覽器首先會(huì)把所有帶關(guān)鍵詞的進(jìn)行提前聲明或者定義,這種預(yù)先處理機(jī)制稱之為變量提升。 變量提升 原理:JS引擎的工作方式是先解析代碼,獲取所有被聲明的變量;然后在運(yùn)行。JS代碼自上而下執(zhí)行之前,瀏覽器首先會(huì)把所有帶 VAR/FUNCTION 關(guān)鍵詞的進(jìn)行提前 聲明 或者 定義 ,這種預(yù)先處理機(jī)制...

    voidking 評(píng)論0 收藏0
  • 深入理解 Javascript 之 JS的解析與執(zhí)行過(guò)程

    摘要:的解析與執(zhí)行過(guò)程第一個(gè)彈出函數(shù)體第二個(gè)彈出函數(shù)體第三個(gè)彈出第四個(gè)彈出第五個(gè)彈出最后一行報(bào)錯(cuò)執(zhí)行分析第行,沒(méi)有關(guān)鍵字,不解析第行,遇到關(guān)鍵字,解析到全局的頭部第行,沒(méi)有關(guān)鍵字,不解析第行,遇到關(guān)鍵字,解析到全局的頭部第行,沒(méi)有關(guān)鍵 js的解析與執(zhí)行過(guò)程 showImg(https://segmentfault.com/img/bVbe2UQ?w=1744&h=782); alert(a)...

    amuqiao 評(píng)論0 收藏0
  • JavaScript深入理解對(duì)象方法——Object.defineProperties()

    摘要:方法直接在一個(gè)對(duì)象上定義新的屬性或修改現(xiàn)有屬性,并返回該對(duì)象。默認(rèn)為當(dāng)且僅當(dāng)在枚舉相應(yīng)對(duì)象上的屬性時(shí)該屬性顯現(xiàn)。函數(shù)返回值將被用作屬性的值。默認(rèn)為返回值傳遞給函數(shù)的對(duì)象。 Object.defineProperties() Object.defineProperties() 方法直接在一個(gè)對(duì)象上定義新的屬性或修改現(xiàn)有屬性,并返回該對(duì)象。 語(yǔ)法 Object.defineProperti...

    jk_v1 評(píng)論0 收藏0
  • 深入理解Webpack核心模塊Tapable鉤子[同步版]

    摘要:本文將根據(jù)以下章節(jié)分別梳理每個(gè)鉤子同步鉤子首先安裝是簡(jiǎn)單的同步鉤子,它很類似于發(fā)布訂閱。至此,我們把的所有同步鉤子都解析完畢異步鉤子比同步鉤子麻煩些,我們會(huì)在下一章節(jié)開(kāi)始解析異步的鉤子傳送門深入理解核心模塊鉤子異步版代碼 記錄下自己在前端路上爬坑的經(jīng)歷 加深印象,正文開(kāi)始~ tapable是webpack的核心依賴庫(kù) 想要讀懂webpack源碼 就必須首先熟悉tapableok.下面是...

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

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

0條評(píng)論

jimhs

|高級(jí)講師

TA的文章

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