摘要:學(xué)習(xí)筆記頂層對(duì)象雖然是筆記但是基本是抄了一次大師的文章了頂層對(duì)象頂層對(duì)象,在瀏覽器環(huán)境指的是對(duì)象,在指的是對(duì)象。之中,頂層對(duì)象的屬性與全局變量是等價(jià)的。的寫法模塊的寫法上面代碼將頂層對(duì)象放入變量。參考引用頂層對(duì)象實(shí)戰(zhàn)
es6學(xué)習(xí)筆記-頂層對(duì)象_v1.0
(雖然是筆記,但是基本是抄了一次ruan大師的文章了)
頂層對(duì)象頂層對(duì)象,在瀏覽器環(huán)境指的是window對(duì)象,在Node指的是global對(duì)象。
ES5之中,頂層對(duì)象的屬性與全局變量是等價(jià)的。
ES6為了改變這一點(diǎn):
var命令和function命令聲明的全局變量,依舊是頂層對(duì)象的屬性;
let命令、const命令、class命令聲明的全局變量,不屬于頂層對(duì)象的屬性
global對(duì)象瀏覽器里面,頂層對(duì)象是window,
但 Node 和 Web Worker 沒有window。
瀏覽器和 Web Worker 里面,self也指向頂層對(duì)象
但是Node沒有self,Node 里面,頂層對(duì)象是global,但其他環(huán)境都不支持。
同一段代碼為了能夠在各種環(huán)境,都能取到頂層對(duì)象,現(xiàn)在一般是使用this變量,但是有局限性(如下):
全局環(huán)境中,this會(huì)返回頂層對(duì)象。但是,Node模塊和ES6模塊中,this返回的是當(dāng)前模塊。(所以在node命令行下解析es6代碼,this指向并不是全局對(duì)象)
函數(shù)里面的this,如果函數(shù)不是作為對(duì)象的方法運(yùn)行,而是單純作為函數(shù)運(yùn)行,this會(huì)指向頂層對(duì)象。但是,嚴(yán)格模式下,這時(shí)this會(huì)返回undefined。不管是嚴(yán)格模式,還是普通模式,new Function("return this")(),總是會(huì)返回全局對(duì)象。
如果瀏覽器用了CSP(Content Security Policy,內(nèi)容安全政策),那么eval、new Function這些方法都可能無法使用。
// 方法一 (typeof window !== "undefined" ? window : (typeof process === "object" && typeof require === "function" && typeof global === "object") ? global : this); // 方法二 var getGlobal = function () { if (typeof self !== "undefined") { return self; } if (typeof window !== "undefined") { return window; } if (typeof global !== "undefined") { return global; } throw new Error("unable to locate global object"); };
typeof process === "object" && typeof require === "function" && typeof global === "object"如果為true,且不存在window對(duì)象時(shí)可以認(rèn)為在node環(huán)境中,node的全局對(duì)象就是global等價(jià)于瀏覽器中的window對(duì)象。這個(gè)是node的定義,參考node官方
self(window.self) 返回window的只讀引用,即為一個(gè)頂層對(duì)象,所以typeof self !== "undefined"時(shí),可以認(rèn)為在瀏覽器環(huán)境下獲取到了頂層對(duì)象的一個(gè)只讀引用
typeof global !== "undefined"這個(gè)就是獲取的node環(huán)境下的頂層對(duì)象,觀察這兩個(gè)函數(shù),其作用都是獲取頂層對(duì)象,一般來說js較多用到的地方是瀏覽器端(前端)和node端(后臺(tái)),
參考segmentfault
加入墊片庫(kù)來實(shí)現(xiàn)global對(duì)象在語言標(biāo)準(zhǔn)的層面,引入global作為頂層對(duì)象。也就是說,在所有環(huán)境下,global都是存在的,都可以從它拿到頂層對(duì)象。
墊片庫(kù)system.global模擬了這個(gè)提案,可以在所有環(huán)境拿到global。
// CommonJS的寫法 require("system.global/shim")(); // ES6模塊的寫法 import shim from "system.global/shim"; shim(); 上面代碼可以保證各種環(huán)境里面,global對(duì)象都是存在的。 // CommonJS的寫法 var global = require("system.global")(); // ES6模塊的寫法 import getGlobal from "system.global"; const global = getGlobal(); 上面代碼將頂層對(duì)象放入變量global。
參考引用:
es6-頂層對(duì)象
es實(shí)戰(zhàn)2015
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/86802.html
摘要:考慮到環(huán)境導(dǎo)致的行為差異太大,應(yīng)該避免在塊級(jí)作用域內(nèi)聲明函數(shù)。函數(shù)聲明語句函數(shù)表達(dá)式循環(huán)循環(huán)還有一個(gè)特別之處,就是循環(huán)語句部分是一個(gè)父作用域,而循環(huán)體內(nèi)部是一個(gè)單獨(dú)的子作用域。聲明一個(gè)只讀的常量。 es6學(xué)習(xí)筆記-let,const和塊級(jí)作用域_v1.0 塊級(jí)作用域 javascript 原來是沒有塊級(jí)作用域的,只有全局作用域和函數(shù)作用域 例子1 因?yàn)闆]有塊級(jí)作用域,所以每次的i都是一...
摘要:因?yàn)榧^函數(shù)本身沒有所以不可以當(dāng)作構(gòu)造函數(shù),也就是說,不可以使用命令,否則會(huì)拋出一個(gè)錯(cuò)誤。箭頭函數(shù)不可以使用對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在。 es6學(xué)習(xí)筆記-箭頭函數(shù)_v1.0 箭頭函數(shù)使用方法 var f = v => v; //普通函數(shù)配合箭頭函數(shù)寫法,這里并且是傳參的 //相當(dāng)于 var f = function(v) { return v; }; /*-----------...
摘要:學(xué)習(xí)筆記數(shù)值的擴(kuò)展有一些不常用或者還不支持的就沒有記錄了總體來說本篇只是一個(gè)備忘而已用來檢查一個(gè)數(shù)值是否為有限的。兩個(gè)新方法只對(duì)數(shù)值有效,非數(shù)值一律返回。參考引用數(shù)值擴(kuò)展 es6學(xué)習(xí)筆記-數(shù)值的擴(kuò)展 有一些不常用或者還不支持的就沒有記錄了,總體來說本篇只是一個(gè)備忘而已 Number.isFinite(), Number.isNaN() Number.isFinite()用來檢查一個(gè)數(shù)值...
摘要:學(xué)習(xí)筆記函數(shù)擴(kuò)展函數(shù)參數(shù)的默認(rèn)值如果參數(shù)默認(rèn)值是變量,那么參數(shù)就不是傳值的,而是每次都重新計(jì)算默認(rèn)值表達(dá)式的值。屬性函數(shù)的屬性,返回該函數(shù)的函數(shù)名。箭頭函數(shù)詳細(xì)鏈接參考引用函數(shù)擴(kuò)展 es6學(xué)習(xí)筆記-函數(shù)擴(kuò)展_v1.0 函數(shù)參數(shù)的默認(rèn)值 function Point(x = 0, y = 0) { this.x = x; this.y = y; } var p = ne...
摘要:學(xué)習(xí)筆記字符串的擴(kuò)展字符的表示法允許使用的形式表示一個(gè)字符,但在之前,單個(gè)碼點(diǎn)僅支持到,超出該范圍的必須用雙字節(jié)形式表示,否則會(huì)解析錯(cuò)誤。返回布爾值,表示參數(shù)字符串是否在源字符串的頭部。,是引入了字符串補(bǔ)全長(zhǎng)度的功能。 es6學(xué)習(xí)筆記-字符串的擴(kuò)展_v1.0 字符的Unicode表示法 JavaScript 允許使用uxxxx的形式表示一個(gè)字符,但在 ES6 之前,單個(gè)碼點(diǎn)僅支持u00...
閱讀 3352·2023-04-25 16:50
閱讀 981·2021-11-25 09:43
閱讀 3638·2021-09-26 10:11
閱讀 2577·2019-08-26 13:28
閱讀 2589·2019-08-26 13:23
閱讀 2493·2019-08-26 11:53
閱讀 3635·2019-08-23 18:19
閱讀 3052·2019-08-23 16:27