JavaScript基礎-全局常亮屬性-

1. Infinity

全局屬性 Infinity 是一個數值,表示無窮大。

Infinity 屬性的屬性特性:
writable false
enumerable false
configurable false

語法

Infinity 

描述

Infinity 是全局對象(global object)的一個屬性,即它是一個全局變量。

Infinity 的初始值是 Number.POSITIVE_INFINITYInfinity(正無窮大)大於任何值。該值和數學意義上的無窮大很像,例如任何正值乘以 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章