1. Infinity
全局屬性 Infinity
是一個數值,表示無窮大。
Infinity 屬性的屬性特性: |
|
---|---|
writable | false |
enumerable | false |
configurable | false |
語法
Infinity
描述
Infinity
是全局對象(global object)的一個屬性,即它是一個全局變量。
Infinity
的初始值是
Number.POSITIVE_INFINITY
。Infinity
(正無窮大)大於任何值。該值和數學意義上的無窮大很像,例如任何正值乘以 Infinity
爲 Infinity
, 任何數值(除了Infinity 和 -Infinity)除以 Infinity
爲 0。
2.NaN
全局屬性 NaN
表示 Not-A-Number 的值。
Property attributes of NaN |
|
---|---|
Writable | no |
Enumerable | no |
Configurable | no |
描述
NaN
是一個全局對象的屬性。
NaN 屬性的初始值就是 NaN,和 Number.NaN
的值一樣。在現代瀏覽器中(ES5中), NaN
屬性是一個不可配置(non-configurable),不可寫(non-writable)的屬性。但在ES3中,這個屬性的值是可以被更改的,但是也應該避免覆蓋。
在編碼很少直接使用到 NaN
。通常都是在計算失敗時,作爲 Math 的某個方法的返回值出現的(例如:Math.sqrt(-1)
)或者嘗試將一個字符串解析成數字但失敗了的時候(例如:parseInt("blabla")
)。
判斷一個值是否是NaN
等號運算符(==
和 ===)
不能被用來判斷一個值是否是 NaN
。必須使用
Number.isNaN()
或
isNaN()
函數。
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
3.undefined
undefined
有多重角色,通常情況下,我們所說的undefined
都指的是全局對象的一個屬性"undefined"
.
描述
在JavaScript中,undefined這個詞有多重含義.首字母大寫的Undefined表示的是一種數據類型,小寫的undefined表示的是屬於這種數據類型的唯一的一個值.但這兩種undefined都只能存在於文檔或規範中,不能存在於JavaScript代碼中.在JavaScript代碼中,你看到的undefined最有可能是全局對象的一個屬性
,該屬性的初始值是就是前面所說的原始值undefined
,還有種情況就是,這個undefined
是個局部變量,就像其他普通變量一樣,沒有任何特殊性,它的值不一定是undefined
,但通常情況下都是的.下面我們所說的undefined
,都指的是window.undefined
這個屬性.
在ES3中(Firefox4之前),window.undefined
就是一個普通的屬性,你完全可以把它的值改變成爲任意的真值,但在ES5中((Firefox4之後),window.undefined
成了一個不可寫,不可配置的數據屬性,它的值永遠是undefined
.
一個未初始化的變量的值爲undefined
,一個沒有傳入實參的形參變量的值爲undefined
,如果一個函數什麼都不返回,則該函數默認返回undefined
.
你可以使用嚴格相等運算符來判斷一個值是否是undefined
:
var x;
if (x === undefined) {
// 執行到這裏
}
else {
// 不會執行到這裏
}
x == undefined
成立還可能是因爲x爲
null
,在JavaScript中null
==
undefined
是返回true的.另外,還可以使用typeof
來判斷:
var x;
if (typeof x === 'undefined') {
// 執行到這裏
}
有時必須使用typeof
的原因是,如果一個變量根本沒有被聲明,只有使用typeof
判斷纔不會報錯,用相等運算符判斷會拋出異常.
// x沒有被聲明過
if (typeof x === 'undefined') { // 不會報錯
// these statements execute
}
if(x === undefined){ // 拋出ReferenceError異常
}
不過如果要檢測的變量是個全局變量,可以不使用typeof
.可以通過檢測全局對象的同名屬性來代替:
// x可能沒有被聲明過,但如果已經聲明瞭的話,x是個全局變量
if (window.x === undefined) { // 即使window.x不存在,也不會報錯
// 可能會執行到這裏
}
if(x === undefined){ // 如果window.x不存在,則會拋出ReferenceError異常
}
4.null
值 null
是一個 JavaScript 字面量,表示空值(null or an "empty" value),即沒有對象被呈現(no object value is present)。它是 JavaScript 原始值 之一。
描述
null
是一個字面量(而不是全局對象的一個屬性,undefined
是)。在 APIs 中,null
常被放在期望一個對象,但是不引用任何對象的參數位置。當檢測 null 或 undefined 時,注意相等(==)與全等(===)兩個操作符的區別 (前者會執行類型轉換)。
// foo does not exist, it is not defined and has never been initialized:
> foo
"ReferenceError: foo is not defined"
// foo is known to exist now but it has no type or value:
> var foo = null; foo
"null"
null
與 undefined
的不同點:
typeof null // object (bug in ECMAScript, should be null)
typeof undefined // undefined
null === undefined // false
null == undefined // true