åºå¼åè¿æ¶çç¹æ§
æ¬éå½ååºäºé£äºå·²ç»åºå¼ï¼ä»ç¶å¯ç¨ï¼ä½æ¯å·²è®¡åå é¤ï¼æè è¿æ¶ï¼å·²è¢«å é¤ï¼æ æ³ä½¿ç¨ï¼ç JavaScript ç¹æ§ã
åºå¼çç¹æ§
è¿äºåºå¼çç¹æ§ä»ç¶å¯ä»¥ä½¿ç¨ï¼ä½æ¯ä½¿ç¨æ¶ä¸å®è¦ä¿æè°¨æ ï¼å 为å®ä»¬å¾å¯è½ä¼å¨æªæ¥çæä¸ªæ¶é´ç¹è¢«ç§»é¤ãåºå½å°å ¶ä»éè¦ä½¿ç¨ç代ç ä¸ç§»é¤ã
ECMAScript è§èç Annex B é¨åååºäºå ¶ä¸çä¸äºåºå¼åè½ãè¿ä¸é¨å被æè¿°ä¸ºè§èæ§çå¯éåè½ï¼ä¹å°±æ¯è¯´ï¼web æµè§å¨ä¸»æºå¿ é¡»å®ç°è¿äºåè½ï¼èé web 主æºå¯ä»¥ä¸å®ç°ãè¿äºåè½å¾å¯è½æ¯ç¨³å®çï¼å 为å é¤å®ä»¬ä¼å¯¼è´åä¸å ¼å®¹çé®é¢ï¼å¹¶ç ´åä¼ ç»çç½ç«ï¼JavaScript çè®¾è®¡ç®æ æ¯âä¸è¦ç ´å webâï¼ãå°½ç®¡å¦æ¤ï¼å®ä»¬è¿æ¯ä¸è½è·¨å¹³å°ç§»æ¤ï¼èä¸å¯è½ä¸è¢«ææçåæå·¥å ·ææ¯æï¼æä»¥å»ºè®®ä½ ä¸è¦ä½¿ç¨å®ä»¬ï¼æ£å¦ Annex B çä»ç»æè¯´ï¼
⦠All of the language features and behaviors specified in this annex have one or more undesirable characteristics and in the absence of legacy usage would be removed from this specification.ï¼æ¬éå½ä¸è§å®çææè¯è¨ç¹æ§åè¡ä¸ºé½æä¸ä¸ªæå¤ä¸ªä¸çæ³çç¹æ§ï¼å¨æ²¡æéç使ç¨çæ åµä¸ï¼å°ä»æ¬è§èä¸å é¤ãï¼ â¦
⦠Programmers should not use or assume the existence of these features and behaviors when writing new ECMAScript code.ï¼ç¨åºåå¨ç¼åæ°ç ECMAScript ä»£ç æ¶ï¼ä¸åºè¯¥ä½¿ç¨æå设è¿äºç¹æ§åè¡ä¸ºçåå¨ãï¼ â¦
å ¶ä»ä¸äºï¼å°½ç®¡å¨è§è主ä½ä¸ï¼ä¹è¢«æ 记为è§èæ§å¯éï¼ä¸åºè¯¥ä¾èµå®ä»¬ã
HTML 注é
妿 JavaScript æºç 被ä½ä¸ºèæ¬ä»£ç è§£æï¼å®å
许 HTML 注éï¼å°±åè¿äºèæ¬æ¯ <script> çæ ç¾ä¸é¨å飿 ·ã
以䏿¯å¨ web æµè§å¨ï¼æä½¿ç¨æ¯æ Chrome ç V8 弿ç Node.jsï¼ä¸è¿è¡çææ JavaScript 代ç ï¼
<!-- 注é
console.log("a"); <!-- å¦å¤ä¸æ®µæ³¨é
console.log("b");
--> æ´å¤æ³¨é
// è¾åº "a" å "b"
<!-- å --> çä½ç¨é½ä¸ // 类似ï¼å³èµ·å§è¡æ³¨éã--> åªå¨è¡é¦ææï¼ä»¥é¿å
ä¸ç´§è·å¤§äºè¿ç®ç¬¦çåç¼å¼èªåç¸æ··æ·ï¼ï¼è <!-- å¯ä»¥åºç°å¨è¡çä»»ä½å°æ¹ã
RegExp
ä¸é¢çè¿äºå±æ§å·²ç»è¢«åºå¼ãè¿å¹¶ä¸å½±åå®ä»¬å¨æ¿æ¢å符串ä¸ç使ç¨ã
$1â$9-
æ¬å·å çå串å¹é ç»æã
input, $_-
ç¨äºå¹é æ£å表达å¼çå符串ã
lastMatch, $&-
æåå¹é çå串ã
lastParen, $+-
æåä¸ä¸ªæ¬å·å çå串å¹é ã
leftContext, $`-
æè¿ä¸æ¬¡å¹é åçå串ã
rightContext, $'-
æè¿ä¸æ¬¡å¹é åçå串ã
è¦åï¼é¿å 使ç¨è¿äºéæå±æ§ï¼å 为å®ä»¬å¯è½å¯¼è´ä¸å¤é¨ä»£ç äº¤äºæ¶çé®é¢ï¼
compile() æ¹æ³å·²è¢«åºå¼ï¼è¯·æé ä¸ä¸ªæ°ç RegExp å®ä¾ã
Function
- 彿°ç
calleråarguments.callee屿§å¨ä¸¥æ ¼æ¨¡å¼ä¸åºå¼ä¸ä¸å¯ç¨ã - åºè¯¥å¨å½æ°éå
ä¸ä½¿ç¨
arguments对象ï¼è䏿¯å°argumentsä½ä¸ºå½æ°çä¸ä¸ªå±æ§æ¥è®¿é®ã
caller å arguments 屿§å·²ç»åºå¼ï¼å 为å®ä»¬ä¼æ³æ¼è°ç¨å½æ°ç对象ãåºå½å¨å½æ°å
é¨ä½¿ç¨ arguments 对象æ¥ä»£æ¿å½æ°ç arguments 屿§ã
Object
Object.prototype.__proto__访é®å¨å·²è¢«åºå¼ã使ç¨Object.getPrototypeOfåObject.setPrototypeOf代æ¿ãè¿ä¸éç¨äºå¯¹è±¡åé¢éä¸ç__proto__åé¢é®ãObject.prototype.__defineGetter__ãObject.prototype.__defineSetter__ãObject.prototype.__lookupGetter__åObject.prototype.__lookupSetter__æ¹æ³å·²è¢«åºå¼ã使ç¨Object.getOwnPropertyDescriptoråObject.defineProperty代æ¿ã
String
- HTML å
è£
æ¹æ³ï¼å¦
String.prototype.fontsizeåString.prototype.bigã String.prototype.substrå¯è½ä¸ä¼å¾å¿«è¢«å é¤ï¼ä½å®è¢«å®ä¹å¨ Annex B ä¸ï¼å æ¤æ¯è§èæ§çå¯é项ãString.prototype.trimLeftåString.prototype.trimRightåºæ¿æ¢ä¸ºString.prototype.trimStartåString.prototype.trimEndã
Date
getYear()åsetYear()æ¹æ³ååå¹´è«é®é¢å½±åï¼å·²å¹¶å ¥getFullYearåsetFullYearä¸ãtoGMTString()æ¹æ³å·²è¢«å¼ç¨ï¼è¯·ä½¿ç¨toUTCString()æ¹æ³ã
转ä¹åºå
- å¨åç¬¦ä¸²åæ£å表达å¼åé¢ä¸ï¼å «è¿å¶è½¬ä¹åºåï¼\ åè·ä¸ä¸ªã两个æä¸ä¸ªå «è¿å¶æ°åï¼è¢«å¼ç¨ã
escapeåunescape彿°å·²è¢«å¼ç¨ã使ç¨encodeURIãencodeURIComponentãdecodeURIædecodeURIComponentæ¥å¯¹ç¹æ®å符ç转ä¹åºåè¿è¡ç¼ç åè§£ç ã
è¯å¥
with è¯å¥å¨ä¸¥æ ¼æ¨¡å¼ä¸å·²è¢«å¼ç¨ä¸ä¸å¯ç¨ã
å¨ä¸¥æ ¼æ¨¡å¼ä¸ï¼for...in 循ç¯å¤´ç var 声æä¸çåå§åå¨è¢«å¼ç¨å¹¶äº§çè¯æ³é误ãå¨éä¸¥æ ¼æ¨¡å¼ä¸ï¼å®ä»¬ä¼è¢«éé»å°å¿½ç¥ã
è¿æ¶çç¹æ§
è¿äºè¿æ¶çåè½å·²ç»ä» JavaScript ä¸å®å ¨å é¤ï¼ä»æå®ç JavaScript çæ¬å¼å§å°±ä¸è½å使ç¨äºã
RegExp
以䏿¯ RegExp å®ä¾ç屿§ï¼ä¸åæ¯ RegExp æé 彿°ç屿§ï¼
| 屿§ | æè¿° |
|---|---|
global |
æ¯å¦é对åç¬¦ä¸²ä¸ææå¯è½çå¹é è¿è¡æ£åè¡¨è¾¾å¼æµè¯ï¼æè åªé对第ä¸ä¸ªå¹é è¿è¡æµè¯ã |
ignoreCase |
å¨å°è¯å¹é ä¸ä¸ªåç¬¦ä¸²æ¶æ¯å¦å¿½ç¥å¤§å°åã |
lastIndex |
å¼å§ä¸ä¸æ¬¡å¹é çç´¢å¼ã |
multilineï¼ä¹å¯éè¿ RegExp.$*ï¼ |
æ¯å¦å¨å¤è¡çåç¬¦ä¸²ä¸æç´¢ã |
source |
模å¼çææ¬ã |
valueOf() æ¹æ³ä¸åä¸é¨ç¨äº RegExpãå®ä½¿ç¨ Object.prototype.valueOf()ï¼å¹¶è¿å宿¬èº«ã
Function
- Function ç
arity屿§å·²ç»è¿æ¶ï¼è¯·ä½¿ç¨length代æ¿ã
Object
| 屿§ | æè¿° | æ¿ä»£æ¹æ³ |
|---|---|---|
__count__ |
è¿åç´æ¥å¨ç¨æ·å®ä¹ç对象ä¸ç坿䏾屿§çæ°éã | Object.keys() |
__parent__ |
æå对象çä¸ä¸æ | 没æç´æ¥çæ¿æ¢æ¹æ³ |
__iterator__ |
åéçççæå¨åè¿ä»£å¨ä¸èµ·ä½¿ç¨ã | Symbol.iterator åæ°çè¿ä»£åè®® |
__noSuchMethod__ |
å½ä¸ä¸ªä¸åå¨ç屿§è¢«ä½ä¸ºæ¹æ³è°ç¨æ¶ï¼è¿ä¸ªæ¹æ³è¢«è°ç¨ã | Proxy |
Object.prototype.eval() |
卿å®å¯¹è±¡çä¸ä¸æä¸è¯ä¼° JavaScript 代ç å符串ã | 没æç´æ¥çæ¿æ¢æ¹æ³ |
Object.observe() |
弿¥å°è§å¯ä¸ä¸ªå¯¹è±¡çååã | Proxy |
Object.unobserve() |
ç§»é¤è§å¯å¨ã | Proxy |
Object.getNotifier() |
å建ä¸ä¸ªéç¥è
对象ï¼å
è®¸ç¨ Object.observe() æ¥ç»¼å触åä¸ä¸ªååçè§å¯è
ã |
没æç´æ¥çæ¿æ¢æ¹æ³ |
Object.prototype.watch() |
å¨ä¸ä¸ªå±æ§ä¸éå ä¸ä¸ªå¤çå¨åè°ï¼å½å±æ§è¢«åé æ¶è¢«è°ç¨ã | Proxy |
Object.prototype.unwatch() |
ç§»é¤ä¸ä¸ªå±æ§ä¸çè§å¯å¤çå¨ã | Proxy |
String
- éæ åçå符串éç¨æ¹æ³ï¼å¦
String.slice(myStr, 0, 12)ãString.replace(myStr, /\./g, "!")çï¼å¨ Firefox 1.5ï¼JavaScript 1.6ï¼ä¸å¼å ¥ï¼å¨ Firefox 53 ä¸è¢«åºå¼ï¼å¹¶å¨ Firefox 68 ä¸å é¤ãä½ å¯ä»¥ä½¿ç¨String.prototypeåFunction.callæ¥ä»£æ¿ã String.prototype.quoteå·²å¨ Firefox 37 ä¸ç§»é¤ãString.prototype.searchãString.prototype.matchåString.prototype.replaceä¸éæ åçflagsåæ°å·²è¢«æ·æ±°ã
WeakMap
WeakMap.prototype.clear()å¨ Firefox 20 䏿·»å ï¼å¨ Firefox 46 ä¸ç§»é¤ãä¸å¯è½éåä¸ä¸ªWeakMapä¸çææé®ã
Date
Date.prototype.toLocaleFormat()使ç¨ä¸ C è¯è¨ä¸strftime()彿°æææçæ ¼å¼ç¸åçæ ¼å¼å符串ï¼å·²ç»è¿æ¶äºã使ç¨toLocaleString()æIntl.DateTimeFormat代æ¿ã
Array
éæ åç Array éç¨æ¹æ³ï¼å¦ Array.slice(myArr, 0, 12)ãArray.forEach(myArr, myFn) çï¼å¨ Firefox 1.5ï¼JavaScript 1.6ï¼ä¸å¼å
¥ï¼å¨ Firefox 68 ä¸è¢«åºå¼ï¼å¹¶å¨ Firefox 71 ä¸å é¤ãä½ å¯ä»¥ä½¿ç¨ Array.prototype å Function.call æ¥ä»£æ¿ã
Number
Number.toInteger()å·²ç»è¿æ¶äºã使ç¨Math.floorãMath.roundæå ¶ä»æ¹æ³ä»£æ¿ã
Proxy
Proxy.createåProxy.createFunctionå·²ç»è¿æ¶äºï¼è¯·ä½¿ç¨Proxy()æé 彿°ã- ä¸åé·å
¥å·²ç»è¿æ¶ï¼
hasOwnï¼bug 980565ï¼Firefox 33ï¼getEnumerablePropertyKeysï¼bug 783829ï¼Firefox 37ï¼getOwnPropertyNamesï¼bug 1007334ï¼Firefox 33ï¼keysï¼bug 1007334ï¼Firefox 33ï¼
ParallelArray
ParallelArrayå·²è¿æ¶ã
è¯å¥
for each...inå·²ç»è¿æ¶äºï¼ä½¿ç¨for...of代æ¿ã- let åå let 表达å¼å·²ç»è¿æ¶äºã
- 表达å¼éå
ï¼
function () 1ä½ä¸ºfunction () { return 1; }ç缩åï¼å·²ç»è¿æ¶ã使ç¨å¸¸è§çfunctionæç®å¤´å½æ°ä»£æ¿ã
è·åæºææ¬
æ°ç»ãæ°åãå符串çç toSource() æ¹æ³å uneval() å
¨å±å½æ°å·²ç»è¿æ¶ãä½¿ç¨ toString()ï¼æè
ç¼åä½ èªå·±çåºååæ¹æ³æ¥ä»£æ¿ã
éçççæå¨åè¿ä»£å¨
éçççæå¨å½æ°è¯å¥åéçççæå¨å½æ°è¡¨è¾¾å¼è¢«ç§»é¤ãä¼ ç»ççæå¨å½æ°è¯æ³éç¨äº function å
³é®åï¼å½ä¸»ä½ä¸æä¸ä¸ªæå¤ä¸ª yield è¡¨è¾¾å¼æ¶ï¼å®èªå¨æä¸ºçæå¨å½æ°ââç°å¨è¿æ¯ä¸ä¸ªè¯æ³é误ãä½¿ç¨ function* è¯å¥å function* 表达å¼ä»£æ¿ã
æ°ç»æ¨å¯¼å¼åçæå¨æ¨å¯¼å¼å·²è¢«ç§»é¤ã
// éççæ°ç»æ¨å¯¼å¼
[for (x of iterable) x]
[for (x of iterable) if (condition) x]
[for (x of iterable) for (y of iterable) x + y]
// éçççæå¨æ¨å¯¼å¼
(for (x of iterable) x)
(for (x of iterable) if (condition) x)
(for (x of iterable) for (y of iterable) x + y)
Firefox 26 çæ¬ä¹åå®ç°äºå¦ä¸ä¸ªè¿ä»£å¨åè®®ï¼ä¸æ åçè¿ä»£å¨å议类似ãå½ä¸ä¸ªå¯¹è±¡å®ç°äº next() æ¹æ³æ¶ï¼å®å°±æ¯ä¸ä¸ªéççè¿ä»£å¨ï¼è¯¥æ¹æ³å¨æ¯æ¬¡è°ç¨æ¶äº§çä¸ä¸ªå¼ï¼å¹¶å¨è¿ä»£ç»ææ¶æåºä¸ä¸ª StopIteration 对象ãè¿ç§éçè¿ä»£å¨åè®®ä¸æ åè¿ä»£å¨åè®®ä¸åï¼
- å¼ç´æ¥ä½ä¸ºè°ç¨
next()çè¿åå¼ï¼è䏿¯IteratorResult对象çvalue屿§ã - è¿ä»£ç»æ¢æ¯éè¿æåºä¸ä¸ª
StopIteration对象ï¼è䏿¯éè¿IteratorResult对象çdone屿§æ¥è¡¨è¾¾ã
è¿ä¸ªåè½ï¼è¿å StopIteration å
¨å±æé 彿°ï¼å¨ Firefox 58+ ä¸è¢«ç§»é¤ãæªæ¥å¯ä»¥ä½¿ç¨ for...of 循ç¯åè¿ä»£å¨åè®®ã
åéå¼ç¨è¯æ³ï¼Sharp variableï¼
åéå¼ç¨è¯æ³å·²ç»è¿æ¶ãè¦å建循ç¯ç»æï¼è¯·ä½¿ç¨ä¸´æ¶åé代æ¿ã