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

javascript中undefined的本質(zhì)解析

 更新時(shí)間:2019年07月31日 14:33:24   作者:前端前端前端  
這篇文章主要介紹了javascript中undefined的本質(zhì)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、列出7種數(shù)據(jù)類型(面試可能問)

  • Undefined
  • Null
  • Boolean
  • String
  • Number
  • Symbol
  • Object

二、undefined本質(zhì)

undefined是window對象的一個(gè)屬性,其類型是Undefined。

下面解釋javascript中屬性的本質(zhì),因?yàn)閡ndefined是一個(gè)屬性,了解undefine的本質(zhì)要用到屬性的本質(zhì)。

三、屬性本質(zhì)

對JavaScript來說,屬性并非只是簡單的名稱和值,JavaScript用一組特征(attribute)來描述屬性(property)。

先來說第一類屬性,數(shù)據(jù)屬性。它比較接近于其它語言的屬性概念。數(shù)據(jù)屬性具有四個(gè)特征。

  • value:就是屬性的值。
  • writable:決定屬性能否被賦值。
  • enumerable:決定for in能否枚舉該屬性。
  • configurable:決定該屬性能否被刪除或者改變特征值。

補(bǔ)充:第二類屬性是訪問器(getter/setter)屬性,它也有四個(gè)特征。 (本文用不到,但可以和第一類屬性放在一起記憶)

  • getter:函數(shù)或undefined,在取屬性值時(shí)被調(diào)用。
  • setter:函數(shù)或undefined,在設(shè)置屬性值時(shí)被調(diào)用。
  • enumerable:決定for in能否枚舉該屬性。
  • configurable:決定該屬性能否被刪除或者改變特征值。

我們通常用于定義屬性的代碼會產(chǎn)生數(shù)據(jù)屬性,其中的writable、enumerable、configurable都默認(rèn)為true。我們可以使用內(nèi)置函數(shù) Object.getOwnPropertyDescripter來查看,如以下代碼所示:

const print = console.log
const o = {a: 1}
o.b = 2
// a和b均為數(shù)據(jù)屬性
const aa = Object.getOwnPropertyDescriptor(o, 'a')
// {value: 1, writable: true, enumerable: true, configurable: true}
const bb = Object.getOwnPropertyDescriptor(o, 'b')
// {value: 2, writable: true, enumerable: true, configurable: true}
print('aa', aa)
print('bb', bb)

對window對象的undefined施加此函數(shù):

由此看出undefined是window的第一類屬性--數(shù)據(jù)屬性,而且該屬性不能能被賦值(writable=false),不能被for in枚舉(enumerable=false),不能刪除或改變特征值(configurable=false)。這也解釋為什么給undefined重新賦值后其值卻不改變:因?yàn)閣ritable=false

以及解釋為什么不能重新用Object.defineProperty函數(shù)定義undefined:因?yàn)閏onfigurable=false

注:如果我們要想改變屬性的特征,或者定義訪問器屬性,我們可以使用 Object.defineProperty

四、Undefined與Null

一個(gè)問題,為什么有的編程規(guī)范要求用void 0代替undefined?現(xiàn)在我們就分別來看一下。

Undefined 類型表示未定義,它的類型只有一個(gè)值,就是 undefined。任何變量在賦值前是 Undefined 類型、值為 undefined,一般我們可以用全局變量undefined(就是名為undefined的這個(gè)變量)來表達(dá)這個(gè)值,或者 void 運(yùn)算來把任一一個(gè)表達(dá)式變成 undefined 值。

但是呢,因?yàn)镴avaScript的代碼undefined是一個(gè)變量,而并非是一個(gè)關(guān)鍵字,這是JavaScript語言公認(rèn)的設(shè)計(jì)失誤之一,所以,為了避免無意中被篡改,建議使用 void 0 來獲取undefined值。

Undefined跟 null 有一定的表意差別,null表示的是:“定義了但是為空”。所以,在實(shí)際編程時(shí),我們一般不會把變量賦值為 undefined,這樣可以保證所有值為 undefined 的變量,都是從未賦值的自然狀態(tài) 。

Null 類型也只有一個(gè)值,就是 null,它的語義表示空值,與 undefined 不同,null 是 JavaScript 關(guān)鍵字,所以在任何代碼中,你都可以放心用 null 關(guān)鍵字來獲取 null 值。

五、總結(jié)

undefined是window對象的一個(gè)屬性其類型是Undefined,屬性不是簡單的名值對,它還具有一組特征值(attribute)。通過Object.getOwnPropertyDescriptor函數(shù)可以得到這組特征值。通過Object.defineProperty函數(shù)可以添加一個(gè)自定義特征值的屬性,在已有屬性的特征值configurable為true的前提下也可以通過該函數(shù)修改已有屬性的特征值。

補(bǔ)充:undefined在全局環(huán)境沒法被賦值,在局部環(huán)境是可以被賦值的!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript 圖像動(dòng)畫的小demo

    JavaScript 圖像動(dòng)畫的小demo

    深夜沒睡著,起來翻了翻《JavaScript權(quán)威指南》這本書,看了下圖形動(dòng)畫的demo,學(xué)習(xí)學(xué)習(xí)了
    2012-05-05
  • JavaScript中的普通函數(shù)與構(gòu)造函數(shù)比較

    JavaScript中的普通函數(shù)與構(gòu)造函數(shù)比較

    這篇文章主要介紹了JavaScript中的普通函數(shù)與構(gòu)造函數(shù)比較,需要的朋友可以參考下
    2015-04-04
  • js實(shí)現(xiàn)產(chǎn)品縮略圖效果

    js實(shí)現(xiàn)產(chǎn)品縮略圖效果

    本文主要介紹了js實(shí)現(xiàn)產(chǎn)品縮略圖效果的實(shí)例。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • Node版本升級和降級完整步驟

    Node版本升級和降級完整步驟

    這篇文章主要給大家介紹了關(guān)于使用Node版本升級和降級的相關(guān)資料,在開發(fā)的工程中我們可能需要經(jīng)常切換node版本來應(yīng)對不同的開發(fā)環(huán)境,所以需要經(jīng)常使用不同版本的node,需要的朋友可以參考下
    2023-09-09
  • JavaScript異步編程:異步數(shù)據(jù)收集的具體方法

    JavaScript異步編程:異步數(shù)據(jù)收集的具體方法

    我們先嘗試在不借助任何工具函數(shù)的情況下來解決這個(gè)問題。筆者能想到的最簡單的方法是:因前一個(gè)readFile的回調(diào)運(yùn)行下一個(gè)readFile,同時(shí)跟蹤記錄迄今已觸發(fā)的回調(diào)次數(shù),并最終顯示輸出。下面是筆者的實(shí)現(xiàn)結(jié)果。
    2013-08-08
  • 微信小程序開發(fā)之IOS和Android兼容的問題

    微信小程序開發(fā)之IOS和Android兼容的問題

    這篇文章主要介紹了微信小程序開發(fā)之IOS和Android兼容的問題的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • javascript 函數(shù)限制調(diào)用代碼

    javascript 函數(shù)限制調(diào)用代碼

    javascript 函數(shù)限制調(diào)用代碼,需要的朋友可以參考下。
    2010-05-05
  • top.location.href 沒有權(quán)限 解決方法

    top.location.href 沒有權(quán)限 解決方法

    以前好像沒有遇到這問題,也可能是沒有在意吧,我的blog內(nèi)容頁都是有判斷的,規(guī)則是,如果top.location不是內(nèi)容頁的話就跳到內(nèi)容頁
    2008-08-08
  • 微信小程序使用image組件顯示圖片的方法【附源碼下載】

    微信小程序使用image組件顯示圖片的方法【附源碼下載】

    這篇文章主要介紹了微信小程序使用image組件顯示圖片的方法,結(jié)合實(shí)例形式簡單分析了微信小程序附image組件的相關(guān)使用技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下
    2017-12-12
  • JavaScript基于用戶照片姓名生成海報(bào)

    JavaScript基于用戶照片姓名生成海報(bào)

    這篇文章主要介紹了JavaScript基于用戶照片姓名生成海報(bào),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評論