JavaScript中null與undefined的區(qū)別總結(jié)
前言
寫Java的時(shí)候我們就是用null來標(biāo)識對象沒有值,一個(gè)聲明但是沒有賦值的對象默認(rèn)就是null,這個(gè)點(diǎn)對于Java老手來說實(shí)在是熟悉不過了;但是Java老手你可指定js中“空”對象是用啥表示嗎?
我問了這個(gè)問題,就表示在js中表示空對對象與Java是不太一樣的,除了null還有一個(gè)undefined可以表示空對象,今天我們就來看看在js中這兩兄弟有啥不一樣的。
1、typeof操作符
首先來看看typeof操作符,這個(gè)東西會返回所檢測變量的類型,請看下面表格:
表達(dá)式 | 返回值 | 說明 |
---|---|---|
typeof undefined | "undefined" | 未定義的值 |
typeof true | "boolean" | 布爾值 |
typeof 42 | "number" | 所有數(shù)字類型 |
typeof "text" | "string" | 字符串 |
typeof {a:1} | "object" | 對象、數(shù)組、null |
typeof function(){} | "function" | 函數(shù) |
typeof Symbol() | "symbol" | ES6新增符號類型 |
typeof BigInt(10) | "bigint" | ES2020新增大整數(shù)類型 |
來些實(shí)例:
console.log(typeof 'Hello') //string console.log(typeof 112.33) //number console.log(typeof {a: '1'}) //object console.log(typeof [1, 2, 3,4 ]) //object console.log(Array.isArray([1, 2, 3, 4])) //true console.log([1, 2, 3, 4] instanceof Array) //true var x = new Number console.log(typeof x) //object console.log(x instanceof Number) //true console.log(x instanceof String) //false
如下是運(yùn)行結(jié)果:
再來看看一些用法:
- 檢測未定義變量:
if (typeof variable === "undefined") {...}
- 檢測函數(shù)是否存在:
if (typeof myFunction === "function") {...}
- 注意數(shù)組和null的特殊情況:
// 正確檢測數(shù)組 if (Array.isArray(myVar)) {...} // 正確檢測null if (myVar === null) {...}
有一些特殊情況需要注意:
typeof null 會返回 "object",這是一個(gè)歷史遺留的問題,實(shí)際上 null 是一個(gè)空或者不存在的值,不是一個(gè)對象。
typeof NaN 會返回 "number",這是因?yàn)?NaN 是一個(gè)特殊的數(shù)值類型,表示 Not a Number(不是一個(gè)數(shù)字)。
typeof [] 會返回 "object",這是因?yàn)閿?shù)組是一種特殊的對象類型,它有一個(gè) length 屬性和一些方法來操作元素。
2、null
在 JavaScript 中 null 表示 "什么都沒有"。
null是一個(gè)只有一個(gè)值的特殊類型,表示一個(gè)空對象引用,typeof一個(gè)null的變量會返回object。
你可以設(shè)置為 null 來清空對象:
var person = null; // 值為 null(空), 但類型為對象
你也可以設(shè)置為 undefined 來清空對象:
var person = undefined; // 值為 undefined, 類型為 undefined
3、undefined
在 JavaScript 中, undefined 是一個(gè)沒有設(shè)置值的變量。typeof 一個(gè)沒有值的變量會返回 undefined。
var person; // 值為 undefined(空), 類型是undefined
任何變量都可以通過設(shè)置值為 undefined 來清空。 類型為 undefined.
person = undefined; // 值為 undefined, 類型是undefined
4、undefined 和 null 的區(qū)別
null 和 undefined 的值相等,但類型不等:
typeof undefined // undefined typeof null // object null === undefined // false null == undefined // true
5、總結(jié)一下
在 JavaScript 中, null 用于對象,undefined 用于變量、屬性和方法。對象只有被定義才有可能為 null,否則為 undefined。
如果我們想測試對象是否存在,在對象還沒定義時(shí)將會拋出一個(gè)錯(cuò)誤。錯(cuò)誤的使用方式:
if (myObj !== null && typeof myObj !== "undefined")
正確的方式是我們需要先使用 typeof 來檢測對象是否已定義:
if (typeof myObj !== "undefined" && myObj !== null)
1、定義
- undefined:是所有沒有賦值變量的默認(rèn)值,自動(dòng)賦值。
- null:主動(dòng)釋放一個(gè)變量引用的對象,表示一個(gè)變量不再指向任何對象地址。
2、何時(shí)使用null?
當(dāng)使用完一個(gè)比較大的對象時(shí),需要對其進(jìn)行釋放內(nèi)存時(shí),設(shè)置為 null。
3、null 與 undefined 的異同點(diǎn)是什么呢?
共同點(diǎn):都是原始類型,保存在棧中變量本地。
不同點(diǎn):
(1)undefined——表示變量聲明過但并未賦過值。
它是所有未賦值變量默認(rèn)值,例如:
var a; // a 自動(dòng)被賦值為 undefined(2)null——表示一個(gè)變量將來可能指向一個(gè)對象。
一般用于主動(dòng)釋放指向?qū)ο蟮囊?,例如?/p>
var emps = ['ss','nn']; emps = null; // 釋放指向數(shù)組的引用4、延伸——垃圾回收站
它是專門釋放對象內(nèi)存的一個(gè)程序。
- 在底層,后臺伴隨當(dāng)前程序同時(shí)運(yùn)行;引擎會定時(shí)自動(dòng)調(diào)用垃圾回收期;
- 總有一個(gè)對象不再被任何變量引用時(shí),才釋放。
附:建議在何時(shí)使用null或undefined
在JavaScript中,Null和Undefined都有其特殊用法和含義,取決于具體使用場景,我們可以根據(jù)以下建議來決定何時(shí)使用Null或Undefined:
1. 使用Undefined
當(dāng)需要表示一個(gè)變量或?qū)傩陨形幢毁x值或者定義時(shí),使用Undefined是非常合適的。例如,在聲明變量但不初始化的情況下,變量的默認(rèn)值為Undefined。
var a; console.log(a); // undefined
另外,在訪問對象的不存在屬性時(shí),也會得到Undefined值:
var person = {} console.log(person.age) // undefined
2. 使用Null
當(dāng)需要表示一個(gè)變量尚未被初始化或者引用的對象不存在時(shí),使用Null是非常合適的。例如,在釋放某個(gè)對象的引用時(shí),可以使用Null:
var obj = {} obj = null
另外,有些API方法可能會返回Null,例如當(dāng)查詢某個(gè)元素不存在時(shí),可以得到Null值:
var el = document.getElementById('not-exist') console.log(el) // null
總的來說,當(dāng)我們需要判斷變量或?qū)傩允欠褚驯怀跏蓟蛘咭玫膶ο笫欠翊嬖跁r(shí),可以使用Undefined或Null來表示。需要注意的是,在使用Undefined或Null時(shí),要考慮其在類型、屬性值、比較運(yùn)算符等方面的特殊性,避免由此引起的問題。
總結(jié)
到此這篇關(guān)于JavaScript中null與undefined區(qū)別的文章就介紹到這了,更多相關(guān)js中null與undefined區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- js判斷undefined類型,undefined,null, 的區(qū)別詳細(xì)解析
- JS中判斷null、undefined與NaN的方法
- JavaScript null和undefined區(qū)別分析
- JS基礎(chǔ)之undefined與null的區(qū)別分析
- JavaScript Undefined,Null類型和NaN值區(qū)別
- Javascript 中 null、NaN和undefined的區(qū)別總結(jié)
- 詳解JavaScript中undefined與null的區(qū)別
- js中 關(guān)于undefined和null的區(qū)別介紹
- JS中null和undefined的區(qū)別
- JavaScript中undefined和null的區(qū)別
相關(guān)文章
JS實(shí)現(xiàn)文字向下滾動(dòng)完整實(shí)例
這篇文章主要介紹了JS實(shí)現(xiàn)文字向下滾動(dòng)的方法,以一個(gè)完整實(shí)例形式詳細(xì)分析了html頁面布局、css樣式及對應(yīng)的js滾動(dòng)功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-02-02uni-app應(yīng)用配置manifest.json最全最詳細(xì)配置
這篇文章主要給大家介紹了關(guān)于uni-app應(yīng)用配置manifest.json最全最詳細(xì)配置,manifest.json文件是UniApp開發(fā)中用來配置應(yīng)用信息的重要文件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01IE6/7/8中Option元素未設(shè)value時(shí)Select將獲取空字符串
可以看到當(dāng)忘記寫option的value時(shí)這些現(xiàn)代瀏覽器都會盡量返回正確的(客戶端程序員想要的)結(jié)果value,其容錯(cuò)性比IE6/7/8做的更好。2011-04-04LayUI數(shù)據(jù)接口返回實(shí)體封裝的例子
今天小編就為大家分享一篇LayUI數(shù)據(jù)接口返回實(shí)體封裝的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09uniapp實(shí)現(xiàn)全局設(shè)置字體大小(小中大的字體切換)
隨著UniApp的流行,越來越多的開發(fā)者選擇使用它來構(gòu)建跨平臺應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于uniapp實(shí)現(xiàn)全局設(shè)置字體大小(小中大的字體切換)的相關(guān)資料,需要的朋友可以參考下2023-06-06