全局的對象( global objects )或稱標準內置對象返十,
不要和 "全局對象(global object)" 混淆。
這里說的全局的對象是說在全局作用域里的對象椭微。
"全局對象 (global object)” 是一個Global類的對象洞坑。
可以在全局作用域里,用this訪問(但只有在非嚴格模式下才可以蝇率,
在嚴格模式下得到的是 undefined)迟杂。實際上,
全局作用域包含了全局對象的屬性本慕,還有它可能繼承來的屬性排拷。
全局對象(global object)在javascript中有著重要的用途:
全局對象的屬性是全局定義的符號,js程序可以直接使用锅尘。
當javascript解釋器啟動時(或web瀏覽器加載新頁面時)监氢,
它將創(chuàng)建一個新的全局對象,并給它一組定義的初始屬性藤违。
全局作用域中的其他對象可以由用戶的腳本創(chuàng)建或由宿主程序提供浪腐。
瀏覽器作為最常見的宿主程序,其所提供的宿主對象的說明可以在這里找到:
全局作用域中的其他對象可以由用戶的腳本創(chuàng)建或由宿主程序提供顿乒。瀏覽器作為最常見的宿主程序议街,其所提供的宿主對象的說明可以在這里找到:API 參考。 關于 DOM 和核心 JavaScript之間的區(qū)別璧榄,可參閱 JavaScript 技術概述 來了解更詳細的信息特漩。
標準內置對象的分類
值屬性
這些全局屬性返回一個簡單值吧雹,這些值沒有自己的屬性和方法。
-
Infinity
"全局屬性 Infinity 是一個數(shù)值拾稳,表示無窮大吮炕。" -
NaN
"全局屬性 NaN 的值表示不是一個數(shù)字(Not-A-Number)。" -
undefined
"undefined是全局對象的一個屬性访得。也就是說龙亲,它是全局作用域的一個變量。undefined的最初值就是原始數(shù)據(jù)類型undefined悍抑。" -
null
字面量
"值 null 特指對象的值未設置鳄炉。它是 JavaScript 基本類型 之一。"
函數(shù)屬性
-
eval()
"執(zhí)行指定代碼之后的返回值搜骡。如果返回值為空拂盯,返回undefined" -
uneval()
"uneval() 函數(shù)創(chuàng)建一個代表對象的源代碼的字符串。" -
isFinite()
"該全局 isFinite() 函數(shù)用來判斷被傳入的參數(shù)值是否為一個有限數(shù)值(finite number)记靡。在必要情況下谈竿,參數(shù)會首先轉為一個數(shù)值。" -
isNaN()
"isNaN() 函數(shù)用來確定一個值是否為NaN 摸吠。注:isNaN函數(shù)內包含一些非常有趣的規(guī)則空凸;
你也可以通過ECMAScript 2015/ES6 中定義的Number.isNaN()或者 可以使用typeof 來判斷該值是否為一個非數(shù)字。" -
parseFloat()
"parseFloat() 函數(shù)解析一個字符串參數(shù)并返回一個浮點數(shù)寸痢。" -
parseInt()
"parseInt() 函數(shù)解析一個字符串參數(shù)呀洲,并返回一個指定基數(shù)的整數(shù) (數(shù)學系統(tǒng)的基礎)。" -
decodeURI()
"decodeURI() 函數(shù)解碼一個由encodeURI 先前創(chuàng)建的統(tǒng)一資源標識符(URI)或類似的例程啼止。" -
decodeURIComponent()
"decodeURIComponent() 方法用于解碼由 encodeURIComponent 方法或者其它類似方法編碼的部分統(tǒng)一資源標識符(URI)道逗。") -
encodeURI()
"encodeURI() 函數(shù)通過將特定字符的每個實例替換為一個、兩個献烦、三或四轉義序列來對統(tǒng)一資源標識符 (URI) 進行編碼
(該字符的 UTF-8 編碼僅為四轉義序列)由兩個 "代理" 字符組成)滓窍。" -
encodeURIComponent()
"encodeURIComponent()是對統(tǒng)一資源標識符(URI)的組成部分進行編碼的方法。
它使用一到四個轉義序列來表示字符串中的每個字符的UTF-8編碼
(只有由兩個Unicode代理區(qū)字符組成的字符才用四個轉義字符編碼)巩那。") -
escape()
"廢棄的 escape() 方法生成新的由十六進制轉義序列替換的字符串. 使用 encodeURI 或 encodeURIComponent 代替." -
unescape()
"已廢棄的unescape() 方法計算生成一個新的字符串吏夯,其中的十六進制轉義序列將被其表示的字符替換。
上述的轉義序列就像escape里介紹的一樣拢操。因為 unescape 已經廢棄锦亦,
建議使用 decodeURI或者decodeURIComponent 替代本方法舶替。"
基本對象
顧名思義令境,基本對象是定義或使用其他對象的基礎」说桑基本對象包括一般對象舔庶、函數(shù)對象和錯誤對象抛蚁。
-
Object
"Object 構造函數(shù)創(chuàng)建一個對象包裝器。" -
Function
"此頁面仍未被本地化, 期待您的翻譯!" -
Boolean
"此頁面仍未被本地化, 期待您的翻譯!" -
Symbol
"Symbol()函數(shù)會返回symbol類型的值惕橙,該類型具有靜態(tài)屬性和靜態(tài)方法瞧甩。
它的靜態(tài)屬性會暴露幾個內建的成員對象;它的靜態(tài)方法會暴露全局的symbol注冊弥鹦,
且類似于內建對象類肚逸,但作為構造函數(shù)來說它并不完整,因為它不支持語法:"new Symbol()"彬坏。" -
Error
"通過Error的構造器可以創(chuàng)建一個錯誤對象朦促。當運行時錯誤產生時,Error的實例對象會被拋出栓始。
Error對象也可用于用戶自定義的異常的基礎對象务冕。下面列出了各種內建的標準錯誤類型。" -
EvalError
"本對象代表了一個關于 eval 函數(shù)的錯誤.此異常不再會被JavaScript拋出幻赚,但是EvalError對象仍然保持兼容性." -
InternalError
"InternalError 對象表示出現(xiàn)在JavaScript引擎內部的錯誤禀忆。
例如: "InternalError: too much recursion"(內部錯誤:遞歸過深)。" -
RangeError
"RangeError對象標明一個錯誤落恼,當一個值不在其所允許的范圍或者集合中箩退。" -
ReferenceError
"ReferenceError(引用錯誤) 對象代表當一個不存在的變量被引用時發(fā)生的錯誤。" -
SyntaxError
"SyntaxError 對象代表嘗試解析語法上不合法的代碼的錯誤领跛。" -
TypeError
"TypeError(類型錯誤) 對象用來表示值的類型非預期類型時發(fā)生的錯誤乏德。" -
URIError
"URIError 對象用來表示以一種錯誤的方式使用全局URI處理函數(shù)而產生的錯誤。"
數(shù)字和日期對象
用來表示數(shù)字吠昭、日期和執(zhí)行數(shù)學計算的對象喊括。
-
Number
"JavaScript 的 Number 對象是經過封裝的能讓你處理數(shù)字值的對象。Number 對象由 Number() 構造器創(chuàng)建矢棚。" -
Math
"Math 是一個內置對象郑什, 它具有數(shù)學常數(shù)和函數(shù)的屬性和方法。不是一個函數(shù)對象蒲肋。" -
Date
"此頁面仍未被本地化, 期待您的翻譯!"
字符串
用來表示和操作字符串的對象蘑拯。
可索引的集合對象
這些對象表示按照索引值來排序的數(shù)據(jù)集合,包括數(shù)組和類型數(shù)組兜粘,以及類數(shù)組結構的對象申窘。
-
Array
"entries() 方法返回一個新的Array Iterator對象,該對象包含數(shù)組中每個索引的鍵/值對孔轴。" -
Int8Array
"Int8Array 類型數(shù)組表示二進制補碼8位有符號整數(shù)的數(shù)組剃法。內容初始化為0。
一旦建立路鹰,你可以使用對象的方法引用數(shù)組中的元素贷洲,或使用標準數(shù)組索引語法( 即收厨,使用括號注釋)。" -
Uint8Array
"Uint8Array 數(shù)組類型表示一個8位無符號整型數(shù)組优构,創(chuàng)建時內容被初始化為0诵叁。
創(chuàng)建完后,可以以對象的方式或使用數(shù)組下標索引的方式引用數(shù)組中的元素钦椭。" -
Uint8ClampedArray
"Uint8ClampedArray(8位無符號整型固定數(shù)組) 類型化數(shù)組表示一個由值固定在0-255區(qū)間的8位無符號整型組成的數(shù)組拧额;
如果你指定一個在 [0,255] 區(qū)間外的值,它將被替換為0或255彪腔;如果你指定一個非整數(shù)势腮,那么它將被設置為最接近它的整數(shù)。
(數(shù)組)內容被初始化為0漫仆。一旦(數(shù)組)被創(chuàng)建捎拯,你可以使用對象的方法引用數(shù)組里的元素,
或使用標準的數(shù)組索引語法(即使用方括號標記)盲厌。") -
Int16Array
"The Int16Array typed array represents an array of twos-complement 16-bit signed
integers in the platform byte order. If control over byte order is needed,
use DataView instead. The contents are initialized to 0. Once established,
you can reference elements in the array using the object's methods,
or using standard array index syntax (that is, using bracket notation)." -
Uint16Array
"The Uint16Array typed array represents an array of 16-bit unsigned integers
in the platform byte order. If control over byte order is needed,
use DataView instead. The contents are initialized to 0. Once established,
you can reference elements in the array using the object's methods,
or using standard array index syntax (that is, using bracket notation)." -
Int32Array
"The Int32Array typed array represents an array of twos-complement 32-bit signed integers
in the platform byte order. If control over byte order is needed, use DataView instead.
The contents are initialized to 0. Once established, you can reference elements in
the array using the object's methods, or using standard array index syntax
(that is, using bracket notation)." -
Uint32Array
"Uint32Array表示一個由基于平臺字節(jié)序的32位無符號字節(jié)組成的數(shù)組.如果需要對字節(jié)順序進行控制
(譯者注:即 littleEndian 或 bigEndian),請使用DataView代替.數(shù)組中每個元素的初始值都是0.一旦創(chuàng)建署照,
你可以用對象的方法引用數(shù)組里的元素,或者使用標準的數(shù)組索引語法(即吗浩,使用中括號)建芙。") -
Float32Array
"Float32Array 類型數(shù)組代表的是平臺字節(jié)順序為32位的浮點數(shù)型數(shù)組(對應于 C 浮點數(shù)據(jù)類型) 。
如果需要控制字節(jié)順序懂扼, 使用 DataView 替代禁荸。其內容初始化為0。一旦建立起來阀湿,
你可以使用這個對象的方法對其元素進行操作赶熟,或者使用標準數(shù)組索引語法 (使用方括號)。" -
Float64Array
"Float64Array 類型數(shù)組代表的是平臺字節(jié)順序為64位的浮點數(shù)型數(shù)組(對應于 C 浮點數(shù)據(jù)類型) 陷嘴。
如果需要控制字節(jié)順序映砖, 使用 DataView 替代。其內容初始化為0灾挨。一旦建立起來邑退,
你可以使用這個對象的方法對其元素進行操作,或者使用標準數(shù)組索引語法 (使用方括號)劳澄。"
使用鍵的集合對象
這些集合對象在存儲數(shù)據(jù)時會使用到鍵地技,支持按照插入順序來迭代元素。
-
Map
"此頁面仍未被本地化, 期待您的翻譯!" -
Set
"Set 對象允許你存儲任何類型的唯一值秒拔,無論是原始值或者是對象引用莫矗。" -
WeakMap
"此頁面仍未被本地化, 期待您的翻譯!" -
WeakSet
"WeakSet 對象允許你將弱保持對象存儲在一個集合中。"
矢量集合
SIMD
"SIMD: SIMD (pronounced "seem-dee") is short for Single Instruction/Multiple Data which
is one classification of computer architectures. SIMD allows one same operation to
be performed on multiple data points resulting in data level parallelism and thus
performance gains, for example for 3D graphics and video processing,
physics simulations or cryptography, and other domains.")
矢量集合中的數(shù)據(jù)會被組織為一個數(shù)據(jù)序列。
SIMD
SIMD.Float32x4
SIMD.Float64x2
SIMD.Int8x16
SIMD.Int16x8
SIMD.Int32x4
SIMD.Uint8x16
SIMD.Uint16x8
SIMD.Uint32x4
SIMD.Bool8x16
SIMD.Bool16x8
SIMD.Bool32x4
SIMD.Bool64x2
結構化數(shù)據(jù)
這些對象用來表示和操作結構化的緩沖區(qū)數(shù)據(jù)趣苏,或使用 JSON (JavaScript Object Notation)編碼的數(shù)據(jù)。
-
ArrayBuffer
"The source for this interactive example is stored in a GitHub repository. If you'd like
to contribute to the interactive examples project, please clone
https://github.com/mdn/interactive-examples and send us a pull request." -
SharedArrayBuffer
"SharedArrayBuffer 對象用來表示一個通用的梯轻,固定長度的原始二進制數(shù)據(jù)緩沖區(qū)食磕,
類似于 ArrayBuffer 對象,它們都可以用來在共享內存(shared memory)上創(chuàng)建視圖喳挑。
與 ArrayBuffer 不同的是彬伦,SharedArrayBuffer 不能被分離。") -
Atomics
"Atomics 對象提供了一組靜態(tài)方法用來對 SharedArrayBuffer 對象進行原子操作伊诵。" -
DataView
"DataView 視圖是一個可以從 ArrayBuffer 對象中讀寫多種數(shù)值類型的底層接口单绑,在讀寫時不用考慮平臺字節(jié)序問題。" -
JSON
"JSON對象包含兩個方法: 用于解析 JavaScript Object Notation (JSON) 的 parse() 方法曹宴,
以及將對象/值轉換為 JSON字符串的 stringify() 方法搂橙。除了這兩個方法, JSON這個對象本身并沒有其他作用,
也不能被調用或者作為構造函數(shù)調用笛坦。"
控制抽象對象
-
Promise
"Promise 對象用于表示一個異步操作的最終狀態(tài)(完成或失斍),以及其返回的值版扩。" -
Generator
"生成器對象是由一個 generator function 返回的,并且它符合可迭代協(xié)議和迭代器協(xié)議废离。" -
GeneratorFunction
"GeneratorFunction構造器生成新的生成器函數(shù) 對象。在JavaScript中礁芦,生成器函數(shù)實際上都是GeneratorFunction的實例對象蜻韭。" -
AsyncFunction
"AsyncFunction 構造函數(shù)用來創(chuàng)建新的 異步函數(shù) 對象,JavaScript 中每個異步函數(shù)都是 AsyncFunction 的對象柿扣。"
反射
-
Reflect
"Reflect 是一個內置的對象肖方,它提供攔截 JavaScript 操作的方法。這些方法與處理器對象的方法相同未状。
Reflect不是一個函數(shù)對象窥妇,因此它是不可構造的。" -
Proxy
"Proxy 對象用于定義基本操作的自定義行為(如屬性查找娩践,賦值活翩,枚舉,函數(shù)調用等)翻伺。"
國際化
為了支持多語言處理而加入ECMAScript的對象材泄。
-
Intl
"國際化的構造函數(shù)和其他構造函數(shù)的幾個語言敏感的方法(可見See also)一樣,
使用同樣的模式來識別語言區(qū)域和確定使用哪一種語言格式:他們都接收 locales 和 options 參數(shù)吨岭,
使用 options.localeMatcher 屬性指定的一個算法來對比應用請求的和支持的語言區(qū)域拉宗,來確定使用哪一個語言區(qū)域。" -
Intl.Collator
"Intl.Collator 是用于語言敏感字符串比較的 collators構造函數(shù)。" -
Intl.DateTimeFormat
"交互示例的源代碼存儲在 GitHub 資源庫旦事。如果你愿意分布交互示例魁巩,
請復制https://github.com/mdn/interactive-examples,并向我們發(fā)送一個pull請求姐浮。" -
Intl.NumberFormat
"Intl.NumberFormat是對語言敏感的格式化數(shù)字類的構造器類"
WebAssembly
-
WebAssembly
"WebAssemblyJavaScript 對象是所有 WebAssembly 相關功能的命名空間谷遂。" -
WebAssembly.Module
"所有 Module 實例繼承自 Module() 構造函數(shù)的原型對象 —— 修改它會影響所有 Module 實例。" -
WebAssembly.Instance
"A WebAssembly.Instance object is a stateful, executable instance of a WebAssembly.Module.
Instance objects contain all the Exported WebAssembly functions that allow calling into
WebAssembly code from JavaScript." -
WebAssembly.Memory
"WebAssembly.Memory() 構造函數(shù)創(chuàng)建一個新的 Memory 對象卖鲤。它包含一個可調整大小的 ArrayBuffer 肾扰,
其內存儲的是 WebAssembly 實例 所訪問內存的原始字節(jié)碼。" WebAssembly.Table
WebAssembly.CompileError
WebAssembly.LinkError
WebAssembly.RuntimeError
其他
[arguments](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments)
Infinity
是全局對象(global object)的一個屬性蛋逾,即它是一個全局變量集晚。
Infinity 屬性的屬性特性:
writable false
enumerable false
configurable false
Infinity 的初始值是 Number.POSITIVE_INFINITY。Infinity(正無窮大)大于任何值区匣。
該值和數(shù)學意義上的無窮大很像偷拔,例如任何正值乘以 Infinity 為 Infinity,
任何數(shù)值(除了Infinity 和 -Infinity)除以 Infinity 為 0。
在 ECMAScript 5 的規(guī)范中亏钩, Infinity 是只讀的(實現(xiàn)于 JavaScript 1.8.5 / Firefox 4)条摸。
console.log(Infinity ); /* Infinity */
console.log(Infinity + 1 ); /* Infinity */
console.log(Math.pow(10, 1000)); /* Infinity */
console.log(Math.log(0) ); /* -Infinity */
console.log(1 / Infinity ); /* 0 */
NaN
全局屬性 NaN 的值表示不是一個數(shù)字(Not-A-Number)。
NaN 屬性的屬性特性:
writable false
enumerable false
configurable false
NaN 是一個全局對象的屬性铸屉。
NaN 屬性的初始值就是 NaN钉蒲,和 Number.NaN 的值一樣。在現(xiàn)代瀏覽器中(ES5中)彻坛,
NaN 屬性是一個不可配置(non-configurable)顷啼,不可寫(non-writable)的屬性。
但在ES3中昌屉,這個屬性的值是可以被更改的钙蒙,但是也應該避免覆蓋。
編碼中很少直接使用到 NaN间驮。通常都是在計算失敗時躬厌,作為 Math 的某個方法的返回值出現(xiàn)的
(例如:Math.sqrt(-1))或者嘗試將一個字符串解析成數(shù)字但失敗了的時候
(例如:parseInt("blabla"))。
等號運算符(== 和 ===) 不能被用來判斷一個值是否是 NaN竞帽。必須使用 Number.isNaN() 或 isNaN() 函數(shù)扛施。在執(zhí)行自比較之中:NaN,也只有NaN屹篓,比較之中不等于它自己疙渣。
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
undefined
全局屬性undefined表示原始值undefined。它是一個JavaScript的 原始數(shù)據(jù)類型 堆巧。
undefined 屬性的屬性特性:
writable false
enumerable false
configurable false
undefined是全局對象的一個屬性妄荔。也就是說泼菌,它是全局作用域的一個變量。
undefined的最初值就是原始數(shù)據(jù)類型undefined啦租。
在現(xiàn)代瀏覽器(JavaScript 1.8.5/Firefox 4+)哗伯,自ECMAscript5標準以來undefined是一個不能被配置
(non-configurable),不能被重寫(non-writable)的屬性篷角。即便事實并非如此焊刹,也要避免去重寫它。
一個沒有被賦值的變量的類型是undefined内地。如果方法或者是語句中操作的變量沒有被賦值,
則會返回undefined(對于這句話持疑惑態(tài)度赋除,請查看英文原文來理解)阱缓。
function test(a){
console.log(typeof a); // undefined
return a;
}
test(); // 返回"undefined"
一個函數(shù)如果沒有使用return語句指定返回值,就會返回一個undefined值举农。
嚴格相等和undefined
你可以使用undefined和嚴格相等或不相等操作符來決定一個變量是否擁有值荆针。
在下面的代碼中,變量x是未定義的颁糟,if 語句的求值結果將是true
var x;
if (x === undefined) {
// 執(zhí)行這些語句
} else {
// 這些語句不會被執(zhí)行
}
注意:這里是必須使用嚴格相等操作符(===)而不是標準相等操作符(==)航背,
因為 x == undefined 會檢查x是不是null,但是嚴格相等不會檢查棱貌。
null不等同于undefined玖媚。
Typeof 操作符和undefined
var x;
if(typeof x === 'undefined') {
// 執(zhí)行這些語句
}
使用 typeof的原因是它不會在一個變量沒有被聲明的時候拋出一個錯誤。
// 這里沒有聲明y
if(typeof y === 'undefined') { // 沒有錯誤婚脱,執(zhí)行結果為true
console.log("y is " + typeof y ) // y is undefined
}
if(y === undefined) { // ReferenceError: y is not defined
}
但是今魔,技術方面看來這樣的使用方法應該被避免。JavaScript是一個靜態(tài)作用域語言障贸,
所以错森,一個變量是否被聲明可以通過看它是否在一個封閉的上下文中被聲明。
唯一的例外是全局作用域篮洁,但是全局作用域是被綁定在全局對象上的涩维,
所以要檢查一個變量是否在全局上下文中存在可以通過檢查全局對象上是否存在這個屬性(比如使用in操作符)。
Void操作符和undefined
void 操作符是第三種可以替代的方法袁波。
var x;
if(x === void 0) {
// 執(zhí)行這些語句
}
// 沒有聲明y
if(y === void 0) {
// 拋出一個RenferenceError錯誤(與`typeof`相比)
}
null
值 null 特指對象的值未設置瓦阐。它是 JavaScript 基本類型 之一。
值 null 是一個字面量篷牌,它不像undefined 是全局對象的一個屬性垄分。
null 是表示缺少的標識,指示變量未指向任何對象娃磺。把 null 作為尚未創(chuàng)建的對象薄湿,
也許更好理解。在 APIs 中,null 常在返回類型是對象豺瘤,但沒關聯(lián)值的地方使用吆倦。
// foo不存在,它從來沒有被定義過或者是初始化過:
foo;
"ReferenceError: foo is not defined"
// foo現(xiàn)在已經是知存在的坐求,但是它沒有類型或者是值:
var foo = null;
foo;
null
null 與 undefined 的不同點:
當檢測 null 或 undefined 時蚕泽,注意相等(==)與全等(===)兩個操作符的區(qū)別 ,前者會執(zhí)行類型轉換:
typeof null // "object" (因為一些以前的原因而不是'null')
typeof undefined // "undefined"
null === undefined // false
null == undefined // true
null === null // true
null == null // true
!null //true
isNaN(1 + null) // false
isNaN(1 + undefined) // true