javascript類型系統——undefined和null

来源:http://www.cnblogs.com/xiaohuochai/archive/2016/07/13/5665637.html
-Advertisement-
Play Games

× 目錄 [1]原因 [2]undefined [3]null 前面的話 一般的程式語言,表示空的只有null,但javascript的設計者Brendan Eich卻設計了一個undefined,這無疑增加了程式複雜度,但這樣做也是有一定原因的。本文將詳細介紹javascript中的undefin ...


×
目錄
[1]原因 [2]undefined [3]null

前面的話

  一般的程式語言,表示空的只有null,但javascript的設計者Brendan Eich卻設計了一個undefined,這無疑增加了程式複雜度,但這樣做也是有一定原因的。本文將詳細介紹javascript中的undefined和null

 

歷史原因

  1995年JavaScript誕生時,最初像Java一樣,只設置了null作為表示”無”的值。根據C語言的傳統,null被設計成可以自動轉為0

  但是,JavaScript的設計者Brendan Eich,覺得這樣做還不夠,有兩個原因。首先,null像在Java里一樣,被當成一個對象。但是,JavaScript的值分成原始類型和對象類型兩大類,Brendan Eich覺得表示”無”的值最好不是對象。其次,JavaScript的最初版本沒有包括錯誤處理機制,發生數據類型不匹配時,往往是自動轉換類型或者默默地失敗。Brendan Eich覺得,如果null自動轉為0,很不容易發現錯誤

  因此,Brendan Eich又設計了一個undefined。他是這樣區分的:null是一個表示”無”的對象,轉為數值時為0;undefined是一個表示”無”的原始值,轉為數值時為NaN

  但是,目前null和undefined基本是同義的,都是原始類型,且只有一些細微的差別

 

undefined

  Undefined類型只有一個值,就是undefined。當聲明的變數未初始化時,該變數的預設值是undefined。所以一般地,undefined表示變數沒有初始化

var test;//undefined
console.log(test == undefined);//true
var test = undefined;//undefined

  對於尚未聲明過的變數只能執行一項操作,使用typeof操作符檢測其數據類型,但嚴格模式下會導致錯誤

typeof(test);//undefined

【出現場景】

  【1】已聲明未賦值的變數

  【2】獲取對象不存在的屬性

  【3】無返回值的函數的執行結果

  【4】函數的參數沒有傳入

  【5】void(expression)

var i;
console.log(i);//undefined

var o = {};
console.log(o.p);//undefined

function f(){};
console.log(f());//undefined

function f(x){return x;}
console.log(f());//undefined

console.log(void(0));//undefined

【類型轉換】

Boolean(undefined):  false
Number(undefined):   NaN
String(undefined):  'undefined'    

 

null

  Null類型只有一個值,就是null。null是javascript語言的關鍵字,它表示一個特殊值,常用來描述"空值"

  邏輯角度看,null值表示一個空對象指針

  [註意]null是空對象指針,而[]是空數組,{}是空對象,三者不相同

console.log(typeof null);//'object'

  儘管null和undefined是不同的,但它們都表示"值的空缺",null表示"空值",undefined表示"未定義"。兩者往往可以互換。判斷相等運算符==認為兩者是相等的

console.log(null == undefined);//true

  實際上,因為undefined和null不是構造器類型,所以它們沒有任何的屬性和方法,使用.和[]來存取這兩個值的成員或方法都會產生一個類型錯誤

【類型轉換】

Boolean(null):   false
Number(null):    0
String(null):    'null'

 

參考資料

【1】 阮一峰Javascript標準參考教程——語法概述 http://javascript.ruanyifeng.com/grammar/basic.html#toc21
【2】 W3School-Javascript高級教程——原始類型 http://www.w3school.com.cn/js/pro_js_primitivetypes.asp
【3】《javascript權威指南(第6版)》第3章 類型、值和變數
【4】《javascript高級程式設計(第3版)》第3章 基本概念


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 這次藉助了表格組件, 參考資料地址: http://v3.bootcss.com/css/#tables 2. 使用了query 進行對滑鼠移入移出表格進行響應 參考資料地址: http://www.w3school.com.cn/jquery/ 3. 項目的github 地址:https:/ ...
  • 一個前端同事遇到的面試題,抽空寫了寫,也算是個積累 1.先準備三個工具方法,用於判斷是否是對象類型,是否是數組,獲取對象長度 2.準備兩個相同或不同的Json對象 3.主要的代碼 4.調用方法 ...
  • <!DOCTYPE html><html><head> <title>guodu</title> <meta charset="utf-8"> <style type="text/css"> #wp{ border: 1px solid red; width: 500px; height: 500p ...
  • 正則表達式,有木有人像我一樣,學了好幾遍卻還是很懵圈,學的時候老明白了,學完了忘光了。好吧,其實還是練的不夠,所謂溫故而知新,可以為師矣,今天就隨我來複習一下這傲嬌的正則表達式吧。 為啥要有正則表達式呢?其實就是因為電腦笨(這話不是我說的),比如[email protected],我們一看就是郵箱,可是計 ...
  • 前端-響應式 1.什麼是響應式設計? 響應式設計就是在網站開發過程中根據用戶操作以及設備的環境進行相應的操作和佈局,讓網站針對不同系統平臺、屏幕尺寸、屏幕定向等進行智能化調整,進行相對應的佈局,如在pc端、iphone、Android、ipad,實現了在智能手機和平板電腦等多種智能移動終端瀏覽效果的 ...
  • js中拼接html,總是感覺不夠優雅,本著要優雅不要污,決定嘗試js模板引擎。 JavaScript 模板引擎 JavaScript 模板引擎作為數據與界面分離工作中最重要一環,越來越受開發者關註。 常見模板引擎 baiduTemplate(百度)\artTemplate(騰訊)\juicer(淘寶 ...
  • 概述 上一篇我們介紹瞭如何使用vue resource處理HTTP請求,結合服務端的REST API,就能夠很容易地構建一個增刪查改應用。這個應用始終遺留了一個問題,Web App在訪問REST API時,沒有經過任何認證,這使得服務端的REST API是不安全的,只要有人知道api地址,就可以調用... ...
  • 她基於原生JavaScript精心雕琢,相容了包括IE6在內的所有主流瀏覽器。她具備優雅的內部代碼,良好的性能體驗,和完善的皮膚體系,並且完全開源,你可以任意獲取開發版源代碼,一掃某些傳統日期控制項的封閉與狹隘。layDate本著資源共用的開發者精神和對網頁日曆交互無窮的追求,延續了layui一貫的簡 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...