深刻探討 Undefined [每日前端夜話(0x0E)]

每日前端夜話,陪你聊前端。天天晚上18:00準時推送javascript

原文:http://davidshariff.com/blog/javascripts-undefined-exploredhtml

翻譯:瘋狂的技術宅前端

Undefined這個概念聽起來很簡單,不過你知道應該怎樣檢查JavaScript中的變量或屬性是否真的存在嗎? 作這件事最好的方法是什麼? 咱們如何涵蓋全部的邊界值? 要回答這些問題,首先讓咱們來看看究竟什麼是undefined……java

undefined概述

變量的值被賦予一個類型,JavaScript中有幾個內置的本地類型:web

  1. Undefined面試

  2. Null編程

  3. Boolean瀏覽器

  4. String安全

  5. Number微信

  6. Object

  7. Reference

  8. etc…

首先看第一個,內置的Undefined類型只能有一個值,它稱爲undefined。 這是一個原始值,只要聲明瞭變量,就會爲其分配此undefined值,直到您以編程的手段爲其分配不一樣的值。

此外,每當函數完成執行並返回一個沒有給定的值時,它默認返回undefined

所以,當聲明一個變量但還未賦值時,它將被賦予undefined值。 咱們還應該注意的是:undefined自己是一個在全局範圍內可用的變量/屬性,它的值也是undefined

可是,全局變量undefined並非保留字,所以它能夠被從新定義。 幸運的是,從ECMA 5開始,就不容許從新定義undefined了,可是在之前的版本和舊版瀏覽器中,能夠執行如下操做:

null到底表明了什麼?

先看下面的代碼:

不少人對此都感到困惑,實際上很簡單。 nullundefined之間惟一真正的關係是:它們在類型強制過程當中都判斷爲false。

之因此因此 null == undefined // true是由於 ==沒有執行嚴格的比較,由於在比較類型時使用 !==更嚴格。 每當您把 null看做是一個值時,它會始終以編程方式進行指定,而且在默認狀況下從不設置。

訪問對象的屬性

當您嘗試使用對象上一個不存在的屬性時,也會獲得undefined,若是您把不存在的屬性做爲函數使用有時會引起錯誤。

若是您想分辨「有未定義值的屬性」和「根本不存在的屬性」這二者,應該怎麼作呢? 

使用typeof或者 ===都會給你一個undefined的值。

使用in運算符可以檢查對象中是否存在某個屬性:

應該用typeof仍是in/hasOwnProperty?

這很顯然。通常來講,若是要測試是一個屬性否存在,那麼就用 in/hasOwnProperty,若是要檢查屬性或變量的值,則用 typeof

經過例子進行總結

檢查變量是否存在:

檢查對象上的屬性是否存在,不管是否已經爲它分配了值:

檢查對象上是否存在屬性,而且屬性具備值集(真值或假)


若是你以爲這篇文章對你有幫助,請點擊右下角的 「🌸好看」 並分享給小夥伴們↘️↘️↘️🙏🏼



下面夾雜一些私貨,也許你和高薪之間只差這一張圖

2019年京程一燈課程體系上新,這是咱們第一次將所有課程列表對外開放。

願你有個好前程,願你月薪30K。咱們是認真的 !


在公衆號內回覆「體系」查看高清大圖



長按二維碼,加海洋老師微信好友,嘮一嘮怎樣才能拿高薪。






往期精選文章
容易被忽略的CSS安全性
混合內容下的瀏覽器行爲
2018年JavaScript狀態調查

世界頂級公司的前端面試都問些什麼

全棧工程師技能大全

擴展 Vue 組件

ECMAScript 2016,2017和2018中全部新功能的示例(上)

ECMAScript 2016,2017和2018中全部新功能的示例(下)

使用虛擬dom和JavaScript構建徹底響應式的UI框架
四步實現React頁面過渡動畫效果


小手一抖,資料全有。長按二維碼關注京程一燈,閱讀更多技術文章和業界動態。

本文分享自微信公衆號 - 前端先鋒(jingchengyideng)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索