成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【譯】ECMAScript文檔---序言及1-6章(上)

wind3110991 / 745人閱讀

摘要:隨后,它出現(xiàn)在公司之后的瀏覽器,以及從微軟從起發(fā)布的所有瀏覽器上。標準的第版在年月的大會上被表決接受。第版在年月底大會上被采納。

前言

??本系列譯文的初衷旨在希望更多人能夠了解關(guān)于JS的一些基本概念,遇到原理性的問題時多去翻翻文檔,而不是在社區(qū)無休止的重復提出某些在文檔中能夠非常方便快捷就能找到的東西。

??精力和水平有限,所以暫時只打算嘗試翻譯前面幾章概括性的介紹,同時后面的章節(jié)大多都是步驟形式的偽代碼或者實現(xiàn)流程,按照這些步驟一步一步推敲即可。比如,要查xxx和xxx進行==比較時到底是怎么樣進行的,就可以直接看規(guī)范7.2節(jié),個人認為,比看文章,記憶總結(jié)出來的圖表,都更直觀且有說服力。

??由于筆者水平有限,知識的深度和廣度也不是很夠,僅僅是出于上面提到的初衷才想去做這件事。翻譯過程定會存在諸多疏漏與錯誤,還望批評指正~

由于單篇文章有長度限制(最后我才知道,因為之前在本地md編輯器里面寫。。),所以分為兩篇文章來發(fā)布。另外數(shù)學公式有些語法sf并不支持,比如行類公式,但是為了表達準確沒有刪除,大家盡量理解,抱歉抱歉。

下面開始正文。

簡介

??Ecma標準定義了ECMAScript 2018語言。它是ECMAScript語言規(guī)范的第9版。自從在1997年發(fā)布第1版以來,ECMAScript已經(jīng)成長為世界上最為廣泛使用的編程語言之一。因為被內(nèi)嵌入web瀏覽器而被廣泛熟知,但是同樣也廣泛地適用于服務(wù)端和嵌入式應(yīng)用程序。

??ECMAScript基于幾項原始的技術(shù),其中最為熟知是Netscape的JavaScript和Microsoft的JScript。ECMAScript是Brendan Eich在Netscape公司的時候被發(fā)明的,第一次出現(xiàn)則是在他們公司的Navigator 2.0瀏覽器上。隨后,它出現(xiàn)在Netscape公司之后的瀏覽器,以及從微軟從IE 3.0起發(fā)布的所有瀏覽器上。

??而ECMAScript語言規(guī)范的發(fā)展則要追溯到1996年的那個11月。Ecma標準的第1版在1997年7月的Ecma大會上被表決接受。

??Ecma標準在"快速通道"的幫助下被提交給ISO/IEC JTC 1,并在1998年的4月底ISO/IEC 16262會議上投票通過作為國際標準。1998年6月的Ecma大會投票通過了ECMA-262的第2版,使之與ISO/IEC 16262保持一致。第1版與第2版的區(qū)別是社論性質(zhì)的。

??標準的第3版介紹了強大的正則表達式,更好的字符串處理,新的控制語句,try/catch異常處理,更嚴格的錯誤定義,數(shù)字輸出格式化,以及一些其他的隨著語言的發(fā)展在未來可能出現(xiàn)的一些微小的變化。ECMAScript規(guī)范的第3版在1999年12月被Ecma委員會采用,并于2002年6月在ISO/IEC 16262:2002上發(fā)布。

??在發(fā)布了第3版之后,ECMAScript和萬維網(wǎng)得到了巨大的認可和結(jié)合,本質(zhì)上它已經(jīng)成為了被所有瀏覽器支持的編程語言。同時,開發(fā)ECMAScript第4版的工作也已完成。然而,那些工作的成果是不完整的,也沒有被作為ECMAScript的第4版發(fā)布。但是其中的一部分被合并進了第6版之中。

??ECMAScript的第5版(作為ECMA-262第5版發(fā)布)將那些在瀏覽器實現(xiàn)中已經(jīng)很常見的語言規(guī)范作為事實性的解釋寫進了規(guī)范。并且增加了對那些自從第3版發(fā)布以來的新特性的支持。這樣的新特性包括,訪問器屬性(即get,set,enumerable,configurable),reflective creation and inspection of objects,對數(shù)據(jù)屬性的控制(即value,writable,enumerable,configurable),更多的可以操作數(shù)組的函數(shù)(map,reduce等),支持JSON對象編碼格式,支持提供了加強了的錯誤檢查和程序安全檢查的嚴格模式等等。第5版被2009年12月的Ecma大會所采納。

??第5版被提交給ISO/IEC JTC 1,并且在2011年的ISO/IEC 16262:2011上被作為國際標準被通過。ECMAScript標準的5.1版進行了一些小的修正,并與ISO/IEC 16262:2011保持一致。第5.1版在2011年6月底Ecma大會上被采納。

??備受關(guān)注的第6版的開發(fā)于2009年開始,當時第5版正準備發(fā)布。然而,一些重大的實驗和那些可以追溯到1999年第3版的發(fā)布時的語言增強方面的設(shè)計工作卻使得第6版領(lǐng)先于第5版。

??從真正意義上來講,第6版的完成將這15年來的努力推向了頂峰。增加這些東西的初衷和目標有很多,包括對大型應(yīng)用提供更好的支持,庫(library)的創(chuàng)建,還有將ECMAScript作為其他語言的編譯結(jié)果的用法。同時,也包括一些重大的增強,如模塊系統(tǒng),類(class)聲明,詞法塊級作用域,迭代器(iterator)和產(chǎn)生器(generator),為異步編程而生的promise,解構(gòu),以及適當?shù)奈膊空{(diào)用。

??ECMAScript中內(nèi)置的庫得以擴充,目的是提供更多的數(shù)據(jù)抽象功能。如,map,set,數(shù)組二進制操作(TypedArray),字符串填充(`aa ${xx}`),正則表達式改進。內(nèi)置庫同樣也通過子類來擴充。第6版是增量式的語言和庫增強,于2015年6月在大會上被采納。

??ECMAScript規(guī)范是Ecam TC39的第一個發(fā)布版,新的發(fā)布策略將會每年發(fā)布一次新版本,并且公布進展過程。純文本的源文檔從ECMAScript 2015源文檔開始時在Github上建立,目的是為更進一步的發(fā)展提供一個基礎(chǔ)。

??在標準發(fā)展的這些年,提交了數(shù)以百計的pr和issue,它們?yōu)槲覀冃迯土撕芏郻ug,編輯錯誤以及其他方面的提升。除此之外,眾多的軟件工具被創(chuàng)造,幫助了我們。如Ecmarkup, Ecmarkdown, 以及Grammarkdown。規(guī)范同時也提供了對新的求冪運算符(**)的以及數(shù)組的includes方法的支持。

??代表不同組織的眾多個人也為Ecma TC39現(xiàn)在及之前的發(fā)展做出來很多顯著的貢獻。除此之外,也出現(xiàn)了一個支持TC39并為ECMAScript努力的充滿活力的社區(qū)。這個社區(qū)review了大量的草案,報告了大量的bug,并對實現(xiàn)進行了實驗,貢獻了測試相關(guān)的工具,使全世界的ECMAScript的開發(fā)者從中受益。原諒我們,無法對這些做出努力的貢獻者們一一感謝。

Allen Wirfs-Brock
ECMA-262第6版編輯

Brian Terlson
ECMA-262第7版編輯

譯注:除了上面提到的兩個,其實tc39的成員真的個個都非常厲害,他們來講微軟,谷歌,mozilla,facebook等等等等,如果你經(jīng)常watch的話,就會發(fā)現(xiàn)這些人真的值得學習,你可能在whatwg,css,各種規(guī)范/協(xié)議的地方都能找到他們的身影,他們有的人gh上并沒有太多東西,但是卻絲毫掩蓋不了他們的智慧。所以,多找找差距,加油吧,不要再進行無意義的撕逼了~(最后一句其實是好幾個月前寫的。。)

1. 規(guī)范的范圍

??本規(guī)范定義了ECMAScript 2018通用程序語言。

2. 合法性

??一個合法的ECMAScript標準的實現(xiàn)必須提供和支持所有的類型,值,對象,屬性,函數(shù)以及本規(guī)范中描述的程序語法及語義。

??一個合法的ECMAScript標準的實現(xiàn)必須采用最新版本的Unicode標準和ISO/IEC 10646標準統(tǒng)一且一致的解釋輸入的源文本(代碼)。

??一個提供了應(yīng)用程序接口的合法的ECMAScript標準的實現(xiàn),需要在這些接口中,支持不同自然語言和國家的人們的語言和文化傳統(tǒng)。同時必須實現(xiàn)在ECMA-402最新版中定義的與本規(guī)范兼容的接口。

??一個合法的ECMAScript標準的實現(xiàn)也許會提供額外的類型,值,對象,屬性以及那些超過當期規(guī)范的函數(shù)(譯注:即未來版本)。特別要注意的是,這些實現(xiàn)也許會提供某些在規(guī)范中有描述的對象的在規(guī)范中描述的屬性以及這些屬性對應(yīng)的值。

??一個合法的ECMAScript標準的實現(xiàn)也許會支持一些沒有在規(guī)范中提及的程序或者正則表達式語法。特別的來說,一個合法的ECMAScript標準的實現(xiàn)也許會支持一些利用未來的保留字的語法。

??一個合法的ECMAScript標準的實現(xiàn)絕對不能實現(xiàn)任何在16.2節(jié)中列出的禁止的擴展。

3. 規(guī)范中的參考文獻

??下面的文檔鏈接對于本規(guī)范的應(yīng)用程序是必不可少的。對于標注了日期的引用,代表只適用于標注的那個版本。對于沒有標注日期的引用,則適用于最新的版本(包括修正案)。

??ISO/IEC 10646:2003:信息技術(shù) - 通用多八位(Multiple-Octet)編碼字符集,以及2005修正案1,2006修正案2,2008修正案3,2008修正案4,以及額外的修正案,勘誤,后續(xù)標準。

??ECMA-402,ECMAScript 2015國際化API規(guī)范

??ECMA-404,JSON數(shù)據(jù)交換格式

4. 概述

??這一節(jié)對ECMAScript語言進行一個不太規(guī)范的概述。

??ECMAScript是一門面向?qū)ο蟮某绦蛘Z言,目的是在宿主環(huán)境中計算和操作那些計算的東西。這里定義的ECMAScript的意圖并不是自己給自己定下計算規(guī)則,事實上,規(guī)范中并沒有規(guī)定輸入的外部數(shù)據(jù),以及該輸出怎樣的計算結(jié)果。

??事實上,我們期望ECMAScript的計算環(huán)境不僅能夠提供對象和其他我們描述的事物,而且能夠提供某些具體環(huán)境下的對象,關(guān)于這些對象的描述和行為已經(jīng)超出了本規(guī)范的職責范圍,除非它們能提供某些可以在ECMAScript語言中被訪問的屬性和函數(shù)(譯注:如全局對象,不同瀏覽器特有的某些對象)。

??ECMAScript最初被設(shè)計用來作為一門腳本語言,但是現(xiàn)在已經(jīng)被廣泛地作為一門通用語言使用。腳本語言是一門被用作計算,定制以及自動化處理現(xiàn)有系統(tǒng)中的各個元素的程序語言。在這樣的系統(tǒng)中,通過用戶接口我們已經(jīng)能獲得很多有用的功能,腳本語言就是為了將這些功能暴露給程序去控制的一種機制。通過這樣的方式,現(xiàn)有的系統(tǒng)能夠為這些對象和元素提供一個宿主環(huán)境,腳本語言才能發(fā)揮自己的功能。一門腳本語言是為專業(yè)的和非專業(yè)的程序員使用的。

??ECMAScript最初是被設(shè)計為一種Web腳本語言,目的是提供一種讓Web頁面更加富有生機的機制,并且能夠在基于Web的客戶端-服務(wù)端架構(gòu)(譯注:即BS架構(gòu))下做一些原本要在服務(wù)端進行的計算。ECMAScript現(xiàn)在被用作在各種各樣的宿主環(huán)境中提供核心腳本功能。因此,本文檔描述的是除了任何特定的宿主環(huán)境外的語言核心本身。

??ECMAScript的用法已經(jīng)遠遠超過了普通的腳本語言,現(xiàn)在它被用作許多不同環(huán)境下的編程任務(wù)的各個方面。隨著ECMAScript用法的擴充,它也擁有越來越多的特性?,F(xiàn)在,ECMAScript已經(jīng)是一門功能完備的通用語言。

??一些ECMAScript的功能與其他我們使用的程序語言是相似的,特別是下面描述到的C,$JAVA^{TM}$,Self以及Scheme:

??ISO/IEC 9899:1996, Programming Languages – C

??Gosling, James, Bill Joy and Guy Steele. The Java? Language Specification. Addison Wesley Publishing Co., 1996.

??Ungar, David, and Smith, Randall B. Self: The Power of Simplicity. OOPSLA "87 Conference Proceedings, pp. 227-241, Orlando, FL, October 1987.

??IEEE Standard for the Scheme Programming Language. IEEE Std 1178-1990.

4.1 Web腳本

??Web瀏覽器為客戶端計算提供了一個ECMAScript宿主環(huán)境,這些計算包括很多,例如,代表窗口(windows),菜單,彈出框,對話框,文本域,錨點,frame,history,cookies以及輸入輸出的對象。

??進一步來說,宿主環(huán)境提供了一種方式,能夠?qū)⒛_本代碼附加到諸如焦點改變,頁面和圖片加載、卸載、錯誤、中斷,選擇某個區(qū)域,表單提交,鼠標動作這樣的事件上。腳本代碼出現(xiàn)在HTML以及展示的頁面里,是一種與那些用戶接口元素,固定的或者計算后的文本,以及圖片的結(jié)合。腳本代碼對用戶交互進行響應(yīng),對主程序是沒有必要的。

??Web服務(wù)器則為服務(wù)端計算提供不同的宿主環(huán)境,例如,代表請求(requests),客戶端(clients),文件的對象。以及鎖住和共享數(shù)據(jù)的機制。通過瀏覽器端和服務(wù)端腳本的共同使用,我們能夠?qū)赪eb的應(yīng)用程序提供自定義的用戶接口,從而讓在客戶端和服務(wù)端上的計算達到一個平衡。

??每一個支持ECMAScript的Web瀏覽器和服務(wù)器提供了屬于它們自己的宿主環(huán)境,從而完善ECMAScript執(zhí)行環(huán)境。

4.2 ECMAScript概述

??以下是一個ECMAScript的非正式的概述-并不會描述語言的所有部分。這個概述不是標準的一部分。

??ECMAScript是基于對象的:語言的基礎(chǔ)和宿主功能都通過對象的方式提供,一個ECMAScript程序是一個互相有聯(lián)系的對象的集群。在ECMAScript中,一個對象是一個集合,這個集合包含0到多個屬性,每個屬性定義了這個屬性是用來做什么的。例如,當一個屬性的Writable屬性被設(shè)置為false的時候,任何嘗試去給這個屬性賦值為與之前不同值的ECMAScript代碼都不會成功。屬性是控制其它對象,原始值或者函數(shù)的容器。一個原始值是下列內(nèi)置類型之一:Undefined, Null, Boolean, Number, String, 以及Symbol。一個對象(object)屬于Object這種內(nèi)置類型。一個函數(shù)(function)是一個可調(diào)用的對象。一個函數(shù)通過一個叫做method的屬性與一個對象相關(guān)聯(lián)。

??ECMAScript定義了一系列的內(nèi)置對象,用于完成對ECMAScript實體的定義。這些內(nèi)置對象包括全局對象,以及語言的運行時語義基本對象,它們包括Object, Function, Boolean, Symbol,不同的Error對象(譯注:如Error,SyntaxError,TypeError等等),代表和操作數(shù)值的Math, Number,Date。處理文本的StringRegExp,建立索引來存儲對象的集合的Array,9種不同類型的Typed Arrays(譯注:Int8Array(),Uint8Array(),Uint8ClampedArray(),Int16Array()等等),有鍵值的集合MapSet,支持結(jié)構(gòu)化數(shù)據(jù)的JSONArrayBuffer, SharedArrayBuffer, DataView,支持控制抽象的generator函數(shù),Promise,最后是反射對象ProxyReflect。

??同時ECMAScript也定義了一系列的內(nèi)置操作符。ECMAScript操作符包括一元操作符,乘法操作符,加法操作符,位運算操作符(譯注:即<<,>>>>>),關(guān)系操作符(譯注:即>,>=,<<=,instanceof,in),相等操作符,二進制位操作符(譯注:即^&,|),二進制邏輯操作符(譯注:即&&||),賦值操作符,逗號操作符。

??大型的ECMAScript程序需要模塊的支持,它允許一個程序被劃分為多個語句和聲明的序列。每個模塊顯式地識別它用到的由其它模塊提供的聲明,同時它自己內(nèi)部的聲明也能被其他模塊所用。(譯注:這里的聲明是指importexport這種,而不是變量聲明)

??ECMAScript語法有意地模仿了Java語法(譯注:這一句和后面的應(yīng)該沒有聯(lián)系,是多帶帶的兩句話)。ECMAScript語法是寬松的,可以激活它作為一門易于使用的腳步語言。例如,一個變量不需要進行類型聲明,它的屬性也與類型不相關(guān)聯(lián)(譯注:應(yīng)該是指一個可以先后將不同類型的值賦值給同一個變量),函數(shù)聲明不必出現(xiàn)在函數(shù)調(diào)用之前。

4.2.1 對象(Objects)

??盡管ECMAScript包含了定義一個類的語法,但是ECMAScript對象從根本上來說并不是像C++,Smalltalk,Java那樣基于類的。對象可以通過多種方式創(chuàng)建,如通過字面量或者構(gòu)造函數(shù)創(chuàng)建,然后執(zhí)行初始化所有或者部分屬性的代碼。構(gòu)造函數(shù)是一個擁有"prototype"屬性的函數(shù),"prototype"被用作實現(xiàn)基于原型的繼承以及共享屬性。對象通過構(gòu)造函數(shù)在new表達式中創(chuàng)建,new Date(2009,11)創(chuàng)建一個Date對象。不通過new的方式調(diào)用一個構(gòu)造函數(shù)會產(chǎn)生一些后果,這些后果由那個構(gòu)造函數(shù)決定。例如,直接調(diào)用Date()會產(chǎn)生一個表示當前日期的字符串,而不是一個對象。

                           圖1 Object/Prototype 關(guān)系

??每個通過構(gòu)造函數(shù)創(chuàng)建的對象都有一個隱式的引用(被叫做對象的原型)指向構(gòu)造函數(shù)的"prototype"屬性。除此之外,一個原型也許有一個非null的隱式引用指向它自己的原型,這樣的層層傳遞,被稱作原型鏈。當一個引用指向一個對象中的某個屬性的時候,那個引用就指向在原型鏈中第一個含有這個引用名的對象。換句話說,首先會檢查這個對象本身是否含有那個屬性,如果有,那么這個引用就指向那個屬性,如果沒有,就去這個對象的原型中檢查,然后重復這些步驟。

??通常,在一個基于類的面向?qū)ο笳Z言中,狀態(tài)被實例所持有,方法被類所持有,繼承只是結(jié)構(gòu)和行為。在ECMAScript中,狀態(tài)和方法都被對象所持有,結(jié)構(gòu),行為,狀態(tài)都被繼承。

??所有非對象自身的屬性,都通過對象的原型來共享屬性以及屬性的值,圖1解釋了這一切:

??CF是一個構(gòu)造函數(shù)(同時也是一個對象)。這里通過new操作符已經(jīng)創(chuàng)建了5個對象(譯注:即new CF()):cf1,cf2,cf3,cf4,以及cf5。這5個對象中的每一個都包含了q1q2屬性(譯注:即執(zhí)行了cf1.q1=xxx,cf2.q1=xxx)。虛線展示了隱式的原型關(guān)系。所以,例如,cf3的隱式原型是CFp(譯注:即cf3.__proto__或者Object.getPrototypeOf(cf3)都等于CFp)。構(gòu)造函數(shù)CF有兩個它本身的屬性P1P2,對于CFp,cf1cf2,cf3,cf4,以及cf5來說都是不可見的(譯注:即無法通過CFP.p1,cf1.p2這樣的方式訪問,這里的P1和P2是指的CF.P1=xxxCF.P2=xxx,即靜態(tài)/static屬性,不要理解成在CF這個構(gòu)造函數(shù)里寫this.P1=xxxthis.P2=xxx,那樣叫做實例屬性)。原型(即CFp)上的CFP1屬性被cf1,cf2,cf3,cf4,以及cf5共享(但是不被CF共享,(譯注:即無法通過CF.CFP1訪問)),任何在CFp的隱式原型鏈中的屬性也遵循這樣的規(guī)則,注意在這里CFCFp之間沒有隱式的原型引用(譯注:正因為如此,所以CF.CFP1才為undefined,CF的隱式原型是Function.prototype)。

??不同于大多數(shù)基于類的語言,ECMAScript通過給對象的某個屬性賦值,可以動態(tài)的給對象添加屬性。也就是說,構(gòu)造函數(shù)并不是唯一的可以給構(gòu)造出來的對象添加屬性的方式。在上圖中,我們可以通過給CFP添加一個新的屬性,從而達到給cf1,cf2,cf3,cf4,以及cf5新增一個共享的屬性。

??盡管ECMAScript對象本質(zhì)上不是基于類的,我們還是可以基于一個常見的模式,即構(gòu)造函數(shù),原型對象以及類方法來很方便的定義"模擬類"(class-like,譯注:即類似于類這種結(jié)構(gòu),與類數(shù)組概念相仿,這里的"模擬類"是筆者自己想的,如果有更好的表述,歡迎指正)抽象。那些ECMAScript內(nèi)置對象也遵循這樣的"模擬類"模式(譯注:即也是通過構(gòu)造函數(shù),原型對象以及類方法來定義的)。從ECMAScript 2015開始,ECMAScript語言包含了類定義語法,允許程序員簡潔的定義符合"模擬類"抽象模式的對象,內(nèi)置對象也采取了這種方式來定義。

4.2.2 ECMAScript嚴格變體(The Strict Variant of ECMAScript)

??ECMAScript語言意識到也許有些ECMAScript語言的用戶會希望能夠在語言中約束某些特性的用法。他們這么做也許是出于安全考慮,避免讓他們考慮那些容易出錯的特性,從而加強錯誤檢查,或者是由于其它原因它們想這么做。為了支持這樣的選擇,ECMAScript定義了一個語言的嚴格變體。這個語言的嚴格變體除去了某些常規(guī)的ECMAScript語言擁有的特定的語法和語義特性,并且修改了某些特性的具體語義。嚴格變體也指定了額外的錯誤條件,它們必須通過拋出錯誤異常來報告,在語言的非嚴格模式下是沒有指定的這些錯誤的。

??ECMAScript的嚴格變體通常被稱為語言的嚴格模式。嚴格模式的選擇,以及嚴格模式語法和語義的使用,是以單個的ECMAScript源文本作為單位的。因為嚴格模式是在語法源文本單元這個層級上選擇,嚴格模式只會給在這樣的源文本單元內(nèi)有局部影響的文本加上限制。嚴格模式并不限制或者修改任何ECMAScript語義方面的東西,語義必須在多個源文本之間都是一致的。一個完整的ECMAScript程序也許即存在嚴格模式又存在非嚴格模式的ECMAScript源文本單元。在這樣的情況下,嚴格模式只適用于執(zhí)行定義在嚴格模式內(nèi)的源代碼文本單元。(譯注:如

function foo(){
  function bar1(){
    "use strict"
     console.log(this);
  }
  bar1();
  
  function bar2() {
    console.log(this);
  }
  bar2();
}

只有bar1才會輸出undefined)。

??為了遵循這個規(guī)范,一個ECMAScript實現(xiàn)必須即實現(xiàn)完整的非嚴格模式的ECMAScript語言,同時也實現(xiàn)本規(guī)范定義的ECMAScript語言的嚴格變體。除此之外,一個實現(xiàn)必須支持非嚴格模式和嚴格模式的源代碼文本單元的混合,把它們變成一個單一的復合程序。

4.3 術(shù)語及定義(Terms and Definitions)

??出于本文檔的需要,規(guī)定了以下術(shù)語和定義。

4.3.1 類型(type)

??指定義在本規(guī)范的條款6中的數(shù)據(jù)值的集合

4.3.2 原始值(primitive value)

??指定義在條款6中的Undefined, Null, Boolean, Number, Symbol,以及String的其中之一的成員

注:一個原始值是直接代表本語言實現(xiàn)的最低層級的基準

4.3.3 對象(object)

譯注:從這里開始,會出現(xiàn)“注”,這是規(guī)范里本身所含有的,并不是筆者添加的注,筆者添加到注會寫明“譯注”二字,請注意區(qū)分。原文為NOTE,這里翻譯為了“注”,

??指Object類型的成員

注:一個對象是一個屬性的集合,并且只有一個唯一原型對象。原型對象可能為null。

4.3.4 構(gòu)造函數(shù)/構(gòu)造器(constructor)

??指創(chuàng)建和初始化對象的函數(shù)對象

注:構(gòu)造函數(shù)的prototype屬性是一個被用來實現(xiàn)實現(xiàn)繼承和共享屬性的原型對象

4.3.5 原型(prototype)

??指一個為其它對象提供共享屬性的對象

注:當一個構(gòu)造函數(shù)創(chuàng)建一個對象時,出于解析屬性引用的目的(譯注:即讓obj.foo和obj["foo"]能夠工作),那個對象將隱式的引用構(gòu)造函數(shù)的prototype屬性。構(gòu)造函數(shù)的prototype屬性能夠通過表達式constructor.prototype被引用,并且添加到原型上的屬性能夠被共享,通過繼承,所有對象共享原型。再者,通過使用使用內(nèi)置的Object.create函數(shù),一個對象可以被顯式地指定某個原型來創(chuàng)建。

4.3.6 普通對象(ordinary object)

??指擁有必須被所有對象支持的至關(guān)重要的內(nèi)部方法的默認行為的對象。

4.3.7 外來對象(exotic object)

??指那些沒有一個或多個至關(guān)重要的內(nèi)部方法的默認行為的對象。

注:任何對象不是普通對象就是外來對象

4.3.8 標準對象(standard object)

??指那些語義是由本規(guī)范定義的對象。

4.3.9 內(nèi)置對象(built-in object)

??指那些由ECMAScript的實現(xiàn)指定和提供的對象。

注:標準的內(nèi)置對象被定義在本規(guī)范中。一個ECMAScript實現(xiàn)也許會指定和提供額外的某些內(nèi)置對象。一個內(nèi)置構(gòu)造函數(shù)是一個內(nèi)置對象,同時也是一個構(gòu)造函數(shù)。

4.3.10 undefined值(undefined value)

??是一個原始值(primitive value),代表當一個變量還未被賦值。

4.3.11 Undefined類型(Undefined type)

??是一個類型,它的唯一值是undefined

4.3.12 null值(null value)

??是一個原始值,代表任何對象值的有意缺省。

4.3.13 Null類型(Null type)

??是一個類型,它的唯一值是null。

4.3.14 Boolean值(Boolean value)

??指Boolean類型的成員之一

注:Boolean類型只有兩種值,truefalse。

4.3.15 Boolean類型(Boolean type)

??指包含原始值truefalse的類型。

4.3.16 Boolean對象(Boolean object)

??是Object類型的成員之一,是標準的內(nèi)置Boolean構(gòu)造函數(shù)的實例。

一個Boolean對象通過使用Boolean構(gòu)造函數(shù)在new表達式中創(chuàng)建,接收一個Boolean值作為參數(shù)。返回的結(jié)果對象有一個內(nèi)部的slot(slot在第六章會解釋),它的值是一個Boolean值。一個Boolean對象能夠被轉(zhuǎn)換為一個Boolean值。(譯注:即拆箱)

4.3.17 String值(String value)

??是一個原始值,是一個由0至多個16bit的無符號數(shù)字值組成的有限的有序序列。(譯注:即每個字符都由2個字節(jié)組成,當然,存在由4個字節(jié)組成的字符,這里說的只是js內(nèi)部的字符串的表示)

一個String值是一個String類型的成員。在上面提到的序列中的每個整數(shù)(0-65535)通常代表UTF-16文本中一個單一的16bit單元。

4.3.18 String類型(String type)

??所有可能的String值的集合。

4.3.19 String對象(String object)

??是Object類型的成員之一,是標準的內(nèi)置String構(gòu)造函數(shù)的實例。

一個String對象通過使用String構(gòu)造函數(shù)在new表達式中創(chuàng)建,接收一個String值作為參數(shù)。返回的結(jié)果對象有一個內(nèi)部的slot,它的值是一個String值。一個String對象能夠通過調(diào)用String構(gòu)造函數(shù)(String(xxx)而不是new String(xxx))轉(zhuǎn)換為一個String值。

4.3.20 Number值(Number value)

??是一個原始值,與IEEE-754-2008規(guī)范的雙精度64bit二進制格式相對應(yīng)。

一個Number值是一個Number類型的成員,是一個數(shù)字的直接表示。

4.3.21 Number類型(Number type)

??是一個所有可能的Number值的集合,包括NaN,正的Infinity以及負的Infinity。

4.3.22 Number對象(Number object)

??是Object類型的成員之一,是標準的內(nèi)置Number構(gòu)造函數(shù)的實例。

一個Number對象通過使用Number構(gòu)造函數(shù)在new表達式中創(chuàng)建,接收一個Number值作為參數(shù)。返回的結(jié)果對象有一個內(nèi)部的slot,它的值是一個Number值。一個Number對象能夠通過調(diào)用Number構(gòu)造函數(shù)(Number(xxx)而不是new Number(xxx))轉(zhuǎn)換為一個Number值。

4.3.23 Infinity

??是一個Number值,指正的Infinity。

4.3.24 NaN

??是一個Number值,指IEEE 754-2008中的“Not-a-Number”值。

4.3.25 Symbol值(Symbol value)

??是一個原始值,代表一個唯一的,非字符串的對象的屬性的鍵(key)。

4.3.26 Symbol類型(Symbol type)

??所有可能的Symbol值的集合

4.3.27 Symbol對象(Symbol object)

??是Object類型的成員之一,是標準的內(nèi)置Symbol構(gòu)造函數(shù)的實例。

4.3.28 函數(shù)(function)

??是Object類型的成員之一,也許會作為一個子例程被調(diào)用。

除了它的屬性外,一個函數(shù)包含可執(zhí)行的代碼和決定當被調(diào)用時的行為的狀態(tài)。一個函數(shù)的代碼可能會也可能不會是ECMAScript書寫的。

4.3.29 內(nèi)置函數(shù)(built-in function)

??指那些是函數(shù)的內(nèi)置對象。

這樣的例子包括parseInt,Math.exp。一個ECMAScript的實現(xiàn)也許會提供沒有在本規(guī)范中描述的依賴于實現(xiàn)的內(nèi)置函數(shù)。

4.3.30 屬性(property)

??是對象的一部分,關(guān)聯(lián)鍵(要么是一個字符串,要么是一個Symbol值)和值

取決于屬性的格式,屬性的值可能作為一個數(shù)據(jù)值(一個原始值,一個對象,或者一個函數(shù)是對象)直接被展示,或者間接地通過一對訪問器函數(shù)展示。

4.3.31 方法(method)

??是一個函數(shù),指某個屬性的值。(譯注:即method是function的真子集)

當一個函數(shù)被作為一個對象的方法調(diào)用時,這個對象將作為這個函數(shù)里的this值被傳遞到這個函數(shù)中。

4.3.32 內(nèi)置方法(built-in method)

??是一個內(nèi)置函數(shù)的方法

標準的內(nèi)置方法被定義在本規(guī)范中,并且ECMAScript實現(xiàn)也許會指定和提供其它的額外的內(nèi)置方法。

4.3.33 屬性(attribute)

??指定義某些屬性(property)的特征的內(nèi)部值

4.3.34 自有屬性(own property)

??指被對象直接所有的屬性(property)

4.3.35 繼承屬性(inherited property)

??指對象的屬性但非自有屬性,是對象的原型的屬性(即原型上的自有屬性或者繼承屬性)。

4.4 本規(guī)范的章節(jié)組織(Organization of This Specification)

??本規(guī)范剩余部分的組織如下:

??第5章定義了在本規(guī)范中使用的一些符號或者語法的約定。

??第6-9章定義了ECMAScript程序操作包含的執(zhí)行環(huán)境。

??第10-16章定義了實際的ECMAScript語言,包括它的語法編碼以及語言特性的執(zhí)行語義。

??第17-26章定義了ECMAScript標準庫。它們包括所有當ECMAScript程序執(zhí)行時可用的標準對象的定義。

5 符號約定(Notational Conventions) 5.1 語法和詞法的文法(Syntactic and Lexical Grammars) 5.1.1 上下文無關(guān)文法(Context-Free Grammars)

??一個上下文無關(guān)文法由一系列的產(chǎn)生式(productions)組成。每個產(chǎn)生式包含一個稱作非終結(jié)符的抽象的符號作為它的左值,以及一系列的0個或多個非終結(jié)符和終結(jié)符作為它的右值。對于每一個文法,終結(jié)符都來自一個具體的字符表(譯注:即符號表)。

??一個文法鏈是一個只含有一個非終結(jié)符以及0個或多個終結(jié)符作為它的右值的文法。

??從一個包含一個單一的被稱作目標符號的非終結(jié)符開始,給出一個指定語言的上下文無關(guān)文法。換句話說,所有可能的能由重復地用非終結(jié)符在左值的產(chǎn)生式的右值替換這個序列中的任意非終結(jié)符推導出的終結(jié)符序列。

5.1.2 詞法和正則文法(The Lexical and RegExp Grammars)

??一個ECMAScript的詞法文法在條款11中給出。這個文法有它的符號定義在10.1節(jié)中的SourceCharacter規(guī)則的終結(jié)符的Unicode碼點。它定義了一系列的終結(jié)符,從目標符號InputElementDiv,InputElementTemplateTail,或者InputElementRegExp,InputElementRegExpOrTemplateTail,它們描述了像這樣的碼點的序列是如何被翻譯成一系列的輸入元素的。

??除了空白符和注釋之外的輸入元素構(gòu)成了ECMAScript語法文法的終結(jié)符,它們被稱作ECMAScript tokens。這些token是ECMAScript語言的保留字,標識符,字面量以及標點符號。此外,盡管行終結(jié)符不被當作是token,但是它也是輸入元素流中的一部分,并且引導著自動分號插入機制。簡單的空白符以及單行注釋都被丟棄并且不會出現(xiàn)在語法文法的輸入元素流中。一個多行注釋(也就是說,形如/*…*/,不管占據(jù)一行還是多行)也同樣地被丟棄,如果它沒有包含行總結(jié)符的話。但是如果一個多行注釋包含了一個或者多個行終結(jié)符,那么它就會被替換成一個單一的行終結(jié)符,從而成為語法文法輸入元素流中的一部分。

??一個ECMAScript的正則文法在21.2.1中給出。這個文法也包含它的定義在SourceCharacter的碼點的終結(jié)符。它定義了一系列的產(chǎn)生式,從目標符號的Pattern開始,描述了這樣的碼點的序列是如何被翻譯成正則表達式的pattern的。

??詞法和正則文法的產(chǎn)生式被用兩個冒號作為分割符(即::)來區(qū)分。詞法和正則文法共享一些產(chǎn)生式。

5.1.3 數(shù)字字符串文法(The Numeric String Grammar)

??這是另一個被用作翻譯字符串為數(shù)字值的文法(譯注:即將字符串轉(zhuǎn)換為數(shù)字)。這個文法與詞法文法中的一些部分是相似的,都需要與數(shù)字字面量相協(xié)作,并且有它的終結(jié)符SourceCharacter。這個文法出現(xiàn)在7.1.3.1中。

5.1.4 語法文法(Syntactic Grammar)

??ECMAScript的語法詞法在條款11,12,13,14以及15中給出。這個文法包含在詞法文法中定義的ECMAScript tokens作為它的終結(jié)符。它定義了一系列的產(chǎn)生式,從兩個可選的目標符號Script以及Module開始,描述了形成ECMAScript程序語法上正常的獨立的組件的token是怎樣的序列。

??當一個碼點流將要被解析成一個ECMAScript的Script或者Module時,它首先通過重復的與詞法文法有關(guān)的應(yīng)用程序被轉(zhuǎn)換成一個輸入元素流。然后這個輸入元素流被解析成一個單一的語法文法的應(yīng)用程序。如果在這個輸入元素流中的token不能被解析成一個單一的目標非終結(jié)符(Script或者Module)的話,這個輸入流在語法上就是錯誤,將不會留下任何的token。

??當一個解析成功的時候,它會構(gòu)造一顆解析樹(parse tree),一顆有根的樹的結(jié)構(gòu)是它的每個節(jié)點(Node)都是一個Parse節(jié)點。每個Parse節(jié)點是一個文法中的符號的實例。它代表了一個對于那些能從這樣的符號中派生出來的源代碼文本的跨度。解析樹的根節(jié)點代表著整個的源代碼文本,是一個解析的目標符號的實例。當一個Parse節(jié)點是一個非終結(jié)符的實例的時候,它也是一個某些將這個非終結(jié)符作為左值的產(chǎn)生式的實例。此外,它有0個或多個children,產(chǎn)生式右值中的每個符號:每個child都是一個是相應(yīng)符號的實例的Parse節(jié)點。

??語法文法的產(chǎn)生式被用一個冒號作為分割符(即:)來區(qū)分

??語法文法在條款12,13,14以及15中提出。但是對于哪些token序列是正確的被ECMAScript Script或者Module接受的解釋得并不完整。一些額外的token序列也能被接受,換句話說,那些序列將會被文法描述,只要分號被加入到序列中的某些地方(比如在行終結(jié)符之前)。此外,某些通過文法描述的token序列不會被接受,如果一個行終結(jié)符出現(xiàn)在某些“尷尬”的地方。

??在某些案例中,為了避免歧義,語法文法使用廣義的產(chǎn)生式,允許token序列不形成一個合法的ECMAScript Script或者Module。例如,這項技術(shù)
被用作對象字面量和對象解構(gòu)模式中。在這樣的場景中,更多的限制性的補充的文法被提供,進一步限制了可接受的token序列。在某些上下文中,當顯式地指定時,輸入元素類似于一個用補充的語法的目標符號進行再次解析的產(chǎn)生式。如果被解析的輸入元素流中的token通過一個覆蓋的不能被作為一個多帶帶的與之對應(yīng)的補充的目標符號的實例去解析,輸入流就是語法上錯誤的,將不再保留token。

5.1.5 文法符號(Grammar Notation)

??詞法,正則以及數(shù)字字符串文法的終結(jié)符用固定寬度的字體展示,不管是在文法的產(chǎn)生式,還是在本規(guī)范中,無論何時,只要文本直接地指向了這樣的終結(jié)符。這些都會出現(xiàn)在我們的寫的腳本中。所有通過這種方式指定的終結(jié)符碼點都被當作合適的Unicode碼點理解,從基本的Latin范圍,與之相對的是任意類似的Unicode范圍的碼點。

??非終結(jié)符用斜體展示。一個非終結(jié)符的定義(也叫做產(chǎn)生式)通過下面定義的一個或多個冒號的非終結(jié)符的名稱的方式來介紹。(冒號的數(shù)量暗示了這個產(chǎn)生式屬于哪種文法)。一個或者多個可選的非終結(jié)符的右值跟在succeeding線后面。例如,語法定義如下:

WhileStatement:
    while(Expression)Statement

??非終結(jié)符WhileStatement的狀態(tài)表示了while這個token,隨后是一個左括號token,然后是一個表達式(Expression),然后是一個右括號token,然后是一個語句(Statement)。這些表達式和語句的出現(xiàn)也是非終結(jié)符。另一個例子,語法定義如下:

ArgumentList:
    AssignmentExpression
    ArgumentList,AssignmentExpression

??一個ArgumentList也許代表了一個單一的AssignmentExpression或者一個ArgumentList,然后是一個逗號,然后是一個AssignmentExpression。這個ArgumentList的定義是遞歸的,也就是說,它是根據(jù)它本身來定義的。這樣的結(jié)果就是,一個ArgumentList也許會包含任意數(shù)量逗號分隔的arguments,其中的每個argument表達式是一個AssignmentExpression。這樣的非終結(jié)符的遞歸定義是非常常見的。

??下面的下標后綴“opt”(譯注:由于在代碼塊中無法使用標簽,所以opt沒有展示成下標的形式,但是實際上它是下標),也許會出現(xiàn)在一個終結(jié)符或者非終結(jié)符后,作為一個可選的標志。這個可供選擇的包含一個可選符號的符號,實際上指定2個右值,一個省略了這個可選元素,一個包含了這個可選元素。這意外著:

VariableDeclaration:
    BindingIdentifier Initializer opt

??是下面的縮寫:

VariableDeclaration:
    BindingIdentifier
    BindingIdentifier Initializer

??還有比如:

IterationStatement:
    for(LexicalDeclaration Expression opt ; Expression opt)Statement

??是下面的縮寫:

IterationStatement:
    for(LexicalDeclaration ; Expression opt)Statement
    for(LexicalDeclaration Expression ; Expression opt)Statement

??它們依次是下面的縮寫:

IterationStatement:
    for(LexicalDeclaration ;)Statement
    for(LexicalDeclaration ; Expression)Statement
    for(LexicalDeclaration Expression ;)Statement
    for(LexicalDeclaration Expression ; Expression)Statement

??所以,在這個例子中,非終結(jié)符IterationStatement實際上有4個可選的右值。

??一個產(chǎn)生式也許會通過形如“[parameters]”這樣的下標注釋被參數(shù)化,它們也許會作為后綴出現(xiàn)在產(chǎn)生式定義的非終結(jié)符中。“parameters”也許是多帶帶的名稱,或者一個逗號分隔的名稱列表。一個被參數(shù)化的產(chǎn)生式是一系列定義參數(shù)名稱的所有組合的產(chǎn)生式的縮寫,以下劃線開頭,被追加到參數(shù)化的非終結(jié)符后面。這就意味著:

StatementList[Return]: (注意這里的[Return]是下標)
    ReturnStatement
    ExpressionStatement

??是下面的縮寫:

StatementList:
    ReturnStatement
    ExpressionStatement
    
StatementList_Return:
    ReturnStatement
    ExpressionStatement

??再比如:

StatementList[Return, In]:
    ReturnStatement
    ExpressionStatement

??是下面的縮寫:

StatementList:
    ReturnStatement
    ExpressionStatement
    
StatementList_Return:
    ReturnStatement
    ExpressionStatement

StatementList_In:
    ReturnStatement
    ExpressionStatement

StatementList_Return_In:
    ReturnStatement
    ExpressionStatement

??多個參數(shù)產(chǎn)生一個組合后的產(chǎn)生式,但是在一個復雜的語法中,并不一定需要引用它們中的全部內(nèi)容。

??在一個產(chǎn)生式的右值中引用非終結(jié)符也能被參數(shù)化,例如:

StatementList:
    ReturnStatement
    ExpressionStatement[+In]

??是下面的縮寫:

StatementList:
    ReturnStatement
    ExpressionStatement_In

??再比如:

StatementList:
    ReturnStatement
    ExpressionStatement[~In]

??是下面的縮寫:

StatementList:
    ReturnStatement
    ExpressionStatement

??一個非終結(jié)符引用也許既有一個參數(shù)列表,又有一個“opt”后綴,例如:

VariableDeclaration:
    BindingIdentifier Initializer[+In]opt  (注意[+In]和opt都是下標)

??是下面的縮寫:

VariableDeclaration:
    BindingIdentifier
    BindingIdentifier Initializer_In

??給一個參數(shù)在右值的非終結(jié)符引用加上前綴“?”使得那個參數(shù)依賴于引用當前產(chǎn)生式左值符合的參數(shù)名,例如:

VariableDeclaration[In]:
    BindingIdentifier Initializer[?In]

??是下面的縮寫:

VariableDeclaration:
    BindingIdentifier Initializer

VariableDeclaration_In:
    BindingIdentifier Initializer_In

??如果一個右值以“[+parameter]”作為前綴,那么那個可選的只有在命名的參數(shù)在引用產(chǎn)生式的非終結(jié)符時被使用時才可用。如果一個可選的右值以“[~parameter]”作為前綴,那么那個可選的只有在命名的參數(shù)在引用產(chǎn)生式的非終結(jié)符時沒有被使用時才可用。(譯注:即+表示上下的[]必須同時出現(xiàn),表示不能同時出現(xiàn))這意味著:

StatementList[Return]:
    [+Return]ReturnStatement
    ExpressionStatement

是下面的縮寫:

StatementList:
    ExpressionStatement
    
StatementList_Return:
    ReturnStatement
    ExpressionStatement

再比如:

StatementList[Return]:
    [~Return]ReturnStatement
    ExpressionStatement

是下面的縮寫:

StatementList:
    ReturnStatement
    ExpressionStatement
    
StatementList_Return:
    ExpressionStatement

??在一個文法定義中,當單詞“one of”跟隨在一個或多個分號后的時候,表示隨后的一行或多行的終結(jié)符是一個可選的定義。例如,ECMAScript的詞法文法包含下列的產(chǎn)生式:

NonZeroDigit :: one of
    123456789

??它僅僅是下面的縮寫:

NonZeroDigit::
    1
    2
    3
    4
    5
    6
    7
    8
    9

??如果短語“[empty]” 出現(xiàn)在一個產(chǎn)生式的右值,它暗示著這個產(chǎn)生式的右值不包含終結(jié)符或者非終結(jié)符。

??如果短語“[lookahead ? set]” 出現(xiàn)在一個產(chǎn)生式的右值,它暗示著如果隨后立即的輸入的token序列是給出的集合中的成員,那么這個產(chǎn)生式也許不會被使用。這個集合可以用一個逗號分割的由一到兩個被花括號包裹的元素終結(jié)序列的列表表示。為了方便,這個集合也可以用非終結(jié)符表示,在這種情況下,它代表所有能由非終結(jié)符展開得到的終結(jié)符的集合。如果這個集合包含一個多帶帶的終結(jié)符,那么短語“[lookahead ≠ terminal]” 也許會被使用。

??如果短語“[no LineTerminator here]” 出現(xiàn)在一個語義文法的產(chǎn)生式的右值中,意味著這個產(chǎn)生式是一個受限的/嚴格的(restricted)產(chǎn)生式:如果一個行終結(jié)符(LineTerminator)在輸入流中出現(xiàn)在指定的位置,它也許不會被使用。例如,產(chǎn)生式:

ThrowStatement:
    throw [no LineTerminator here] Expression;

??如果一個行終結(jié)符出現(xiàn)在腳本的throw token和表達式(Expression)之間的時候,暗示著這個產(chǎn)生式也許不會被使用。(譯注:通過測試,如果之間插入一個行終結(jié)符,會拋出Illegal newline after throw異常)

??除非通過一個受限的產(chǎn)生式禁止一個行終結(jié)符的出現(xiàn),否則任意數(shù)量行終結(jié)符的出現(xiàn)也許會發(fā)生在輸入元素流中任意兩個連續(xù)的token之間,并且不影響腳本的語義可接受性。

??當一個詞法文法或者數(shù)字字符串文法的產(chǎn)生式中可選部分出現(xiàn)多碼點的token時,意味著碼點序列將會組成一個token。

??一個產(chǎn)生式的右值也許會通過短語“but not”指定某些不被允許的擴展,然后暗示這個擴展將是被排除在外的。例如,產(chǎn)生式:

Identifier ::
    IdentifierName but not ReservedWord

??

??意味著非終結(jié)符Identifier也許會被任意的碼點序列替換,這些碼點能夠替換提供的IdentifierName,但是相同序列的碼點不能替換ReservedWord。(譯注:即Identifier可以是除了ReservedWord(保留字)之外的其它任意的IdentifierName)

??最后,一些非終結(jié)符通過sans-serif字體書寫的描述性的短語來描述,在這樣的案例中,列出所有的可選部分是不切實際的。(譯注:例如下方的SourceCharacter是一個統(tǒng)稱,實際來說指的太多了,所以不可能一一列出)

SourceCharacter :: (譯注:這里的SourceCharacter就是sans-serif字體)
    any Unicode code point

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/84661.html

相關(guān)文章

  • 2017-08-06 前端日報

    摘要:前端日報精選前端實現(xiàn)文件的斷點續(xù)傳精讀最佳前端面試題及面試官技巧渲染機制解析十日談第一日繪制隨機不規(guī)則三角彩條小談個人主頁的實現(xiàn)發(fā)布中文譯使用被認為是有害的了解的命令掘金譯文檔序言及章上北歐小鎮(zhèn)的前端小船譯文檔 2017-08-06 前端日報 精選 前端實現(xiàn)文件的斷點續(xù)傳精讀《最佳前端面試題》及面試官技巧React 渲染機制解析【React Native十日談】第一日繪制隨機不規(guī)則三角...

    z2xy 評論0 收藏0
  • ECMAScript文檔---言及1-6(下)

    摘要:除非在本規(guī)范中其它指定的文法產(chǎn)生式可選部分隱式地包含一個叫做的接收一個值為包含相關(guān)產(chǎn)生式的文法的終結(jié)符或者非終結(jié)符的參數(shù)靜態(tài)語義規(guī)則的定義。 5.2 算法約定(Algorithm Conventions) ??規(guī)范常常使用一個帶編號的列表來顯示算法中的步驟。這個小算法被用作準確地表達ECMAScript語言構(gòu)造需要的語義。這些算法并不是打算暗示任何具體實現(xiàn)的使用。事實上,這里也許有更高...

    xiaokai 評論0 收藏0
  • Taro 簡介

    摘要:讓人又愛又恨的微信小程序自微信小程序以下簡稱小程序誕生以來,就伴隨著贊譽與爭議不斷。同時于開發(fā)者來說,小程序的生態(tài)不斷在完善,許多的坑已被踩平,雖然還是存在一些令人詬病的問題,但已經(jīng)足見微信的誠意了。 Taro 介紹 在互聯(lián)網(wǎng)不斷發(fā)展的今天,前端程序員們也不斷面臨著新的挑戰(zhàn),在這個變化多端、不斷革新自己的領(lǐng)域,每一年都有新的美好事物在發(fā)生。從去年微信小程序的誕生,到今年的逐漸火熱,以及...

    sixgo 評論0 收藏0
  • Tasks, microtasks, queues and schedules(

    摘要:事件循環(huán)持續(xù)運行,直到清空列隊的任務(wù)。在執(zhí)行期間,瀏覽器可能更新渲染。線索可能會發(fā)生多次。由于冒泡,函數(shù)再一次執(zhí)行。這意味著隊列不會在事件回調(diào)之間處理,而是在它們之后處理。當觸發(fā)成功事件時,相關(guān)的對象在事件之后轉(zhuǎn)為非激活狀態(tài)第四步。 一 前言 一直想對異步處理做一個研究,在查閱資料時發(fā)現(xiàn)了這篇文章,非常深入的解釋了事件循環(huán)中重的任務(wù)隊列。原文中有代碼執(zhí)行工具,強烈建議自己執(zhí)行一下查看結(jié)...

    tianyu 評論0 收藏0
  • 】JavaScript 核心(第二版)

    摘要:技術(shù)上來說這個機制被稱為動態(tài)分配或代理。定義類一個類是一個正式的抽象集,它規(guī)定了對象的初始狀態(tài)和行為。技術(shù)上來說一個類表示構(gòu)造函數(shù)原型的組合。因此構(gòu)造函數(shù)創(chuàng)建對象并自動設(shè)置新創(chuàng)建實例的原型。第二次調(diào)用時,相同的上下文再次被壓入棧并恢復。 原文:JavaScript. The Core: 2nd Edition作者:Dmitry Soshnikov 文章其他語言版本:俄語 這篇文章是 ...

    dingding199389 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<