null
, undefined
, number
, string
, boolean
)。undefined
和null
在if語句中,都會被自動轉爲false
,相等運算符甚至直接報告二者相等。if (!undefined) console.log('undefined is false');
// undefined is false
if (!null) console.log('null is false');
// null is false
undefined == null
// true複製代碼
null
表示一個值被定義了,定義爲「空值」;undefined
表示根本不存在定義。因此設置一個值爲 null
是合理的,如objA.valueA = null;
但設置一個值爲 undefined
是不合理的。null
轉爲數值時爲0;undefined
轉爲數值時爲NaN
。可是 parseInt
和parseFloat
不這麼認爲:parseInt(null)
和 parseFloat(undefined)
返回都是 NaN
。Number(null)
// 0
Number(undefined)
// NaN
parseInt(null)
// NaN
parseFloat(undefined)
// NaN
null === undefined
// false
複製代碼
undefined
這個類型,但存在表示空值的 null
。在一些使用普遍的庫(好比jQuery)中的深度拷貝函數會忽略 undefined
而不會忽略 null
,http接口的報文參數也是如此。var json = {a: 1, b: undefined, c: null}
JSON.stringify(json)
// "{"a":1,"c":null}"
JSON.parse(JSON.stringify(json))
// {a: 1, c: null}複製代碼
typeof null === "object"
更多是一個設計失誤,因此在 harmony 中有提議將這個返回值修正爲 null
,可是該提議由於會形成大量舊 Javascript 腳本出現問題而被否決了。typeof null
// "object"
typeof undefined
// "undefined"
null instanceof Object
// false複製代碼
null
的變量或者對象會被內存收集器回收,undefined
不會。JS 中同時存在 undefined
和 null
是合理的。javascript
首先在 Java 中不存在 undefined 是很合理的:Java 是一個靜態類型語言,對於 Java 來講不可能存在一個「不存在」的成員(不存在的話直接就編譯失敗了),因此只用 null 來表示語義上的空值。而 JavaScript 是一門動態類型語言,成員除了表示存在的空值外,還有可能根本就不存在(由於存不存在只在運行期才知道),因此這就要一個值來表示對某成員的 getter 是取不到值的。php
(文章純屬我的備忘記錄用途,部分引用來自網上加上我的理解整理。歡迎轉載,請註明出處。如對你有幫助,請隨意打賞。)java