JavaScript 提供一個全域物件,它包含一組全域使用的屬性、函式和物件,無需使用命名空間。
這些屬性包括:
Infinity
NaN
undefined
這些函式包括:
decodeURI()
decodeURIComponent()
encodeURI()
encodeURIComponent()
eval()
isFinite()
isNaN()
parseFloat()
parseInt()
以下為這些物件:
以及以下錯誤類型:
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
我在JavaScript 錯誤參考文章中描述了這些錯誤。
現在我們來介紹一下全域屬性和函式。
Infinity
Infinity
在 JavaScript 中代表無窮大。
要獲得負無窮大,可使用-
運算子:-Infinity
。
這些值等同於 Number.POSITIVE_INFINITY
和 Number.NEGATIVE_INFINITY
。
將任何數字加上 Infinity
,或將 Infinity
乘以任何數字,結果仍為 Infinity
。
NaN
全域的 NaN
值代表非數字。它通常由零除以零、無效的 parseInt()
執行或其他運算返回。
parseInt() //NaN
parseInt('a') //NaN
0/0 //NaN
特別注意的是,NaN
值永遠不等於任何其他 NaN
值。必須使用 isNaN()
全域函式來檢查值是否為 NaN
。
NaN === NaN //false
0/0 === NaN //false
isNaN(0/0) //true
undefined
全域的 undefined
屬性含有原始值 undefined
。
執行未指定返回值的函式時,返回值為 undefined
。
const test = () => {}
test() //undefined
與 NaN
不同,可以將 undefined
值與 undefined
值進行比較,並得到 true
。
undefined === undefined
通常使用 typeof
運算子來確定變數是否為 undefined
。
if (typeof dog === 'undefined') {
}
decodeURI()
執行與 encodeURI()
相反的操作。
decodeURIComponent()
執行與 encodeURIComponent()
相反的操作。
encodeURI()
此函式用於編碼完整 URL,將所有字符除了 URI 結構中具有特殊意義的字符轉換為其 HTML 實體,包括所有字母和數字,以及以下特殊字符:
~!@#$&*()=:/,;?+-_.
例如:
encodeURI("http://flaviocopes.com/ hey!/")
//"http://flaviocopes.com/%20hey!/"
encodeURIComponent()
與 encodeURI()
類似,encodeURIComponent()
是用於編碼 URI 的一部分。
它將所有字符除了 URI 結構中具有特殊意義的字符轉換為其 HTML 實體,包括所有字符和數字,以及以下特殊字符:
-_.!~*'()
例如:
encodeURIComponent("http://www.example.org/a file with spaces.html")
// "http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html"
eval()
這是一個特殊的函式,接受包含 JavaScript 代碼的字符串,並對其進行評估/運行。
此函式很少使用,並有一定的風險,因此建議閱讀此文章。
isFinite()
如果傳遞的值是有限的,則返回 true
。
isFinite(1) //true
isFinite(Number.POSITIVE_INFINITY) //false
isFinite(Infinity) //false
isNaN()
如果傳遞的值為 NaN
,則返回 true
。
isNaN(NaN) //true
isNaN(Number.NaN) //true
isNaN('x') //true
isNaN(2) //false
isNaN(undefined) //true
此函式非常有用,因為 NaN
值永遠不等於其他任何 NaN
值。必須使用 isNaN()
全域函式來檢查值是否為 NaN
。
0/0 === NaN //false
isNaN(0/0) //true
parseFloat()
與 parseInt()
類似,parseFloat()
用於將字符串值轉換為數字,並保留小數部分。
parseFloat('10,000', 10) //10 ❌
parseFloat('10.00', 10) //10 ✅(考慮小數位,取整數)
parseFloat('10.000', 10) //10 ✅(考慮小數位,取整數)
parseFloat('10.20', 10) //10.2 ✅(考慮小數位)
parseFloat('10.81', 10) //10.81 ✅(考慮小數位)
parseFloat('10000', 10) //10000 ✅
parseInt()
此函式用於將字符串值轉換為數字。
另一個轉換整數的好方法是調用 parseInt()
函式:
const count = parseInt('1234', 10) //1234
不要忘記第二個參數,即基數,對於十進制數,總是使用 10,否則轉換可能會嘗試猜測基數並產生意外結果。
parseInt()
會嘗試從包含非數字的字符串中獲取數字:
parseInt('10 lions', 10) //10
但如果字符串不以數字開頭,將返回 NaN
(Not a Number):
parseInt("I'm 10", 10) //NaN
另外,就像 Number
一樣,在數字之間的分隔符上不可靠:
parseInt('10,000', 10) //10 ❌
parseInt('10.00', 10) //10 ✅(考慮小數位,取整數)
parseInt('10.000', 10) //10 ✅(考慮小數位,取整數)
parseInt('10.20', 10) //10 ✅(考慮小數位,取整數)
parseInt('10.81', 10) //10 ✅(考慮小數位,取整數)
parseInt('10000', 10) //10000 ✅