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_INFINITYNumber.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 ✅