原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_api_extension.htmljavascript
ES6比較ES5新特性更多。新加入的特性大體氛圍三類:html
因爲新的語法特性很是複雜,本篇只描述部分ES6中新加入的API。以後後分篇描述目前已經比較成熟的語法特性(例如Generator和Iterator)。java
從UTF16代碼轉換字符。這裏筆者也不太清楚,應該和UTF編碼有關1。node
從字符串的字符上取CodePoint。git
"abc".repeat(2) // "abcabc"
判斷字符串是否以a
開頭;檢索的起始位置p
是可選的。es6
判斷字符串是否以a
結尾;檢索的起始位置p
是可選的。github
判斷字符串是否包含子串a
;檢索的起始位置p
是可選的。api
根據類數組對象arrayLike
建立數組;一個可選的map
方法和其上下文對象thisArg
。數組
從給定參數建立數組。
尋找經過指定函數cb
測試的第一個元素。
同上,但返回該元素的索引號。
在數組索引s
和e
之間添入多個元素v
。
獲取對象o
上屬性p
的特性描述對象。在搜尋屬性時,不在原型鏈上搜索。
獲取對象o
上屬性p
的特性描述對象。
獲取對象自身上可枚舉和不可枚舉的鍵名數組。注意,該方法會返回那些enumerable屬性已經設置爲false的propety。
檢測兩個給定對象的值是否相同。該方法不會進行如同==
操做符那樣去進行數值轉換。與===
也有細微差異。僅當符合下面任意條件才返回true
:
undefined
null
true
或false
number
,而且知足如下任一條件:+0
-0
NaN
NaN
,而且數值同樣將對象o
的原型修改成proto
。和對象的__proto__
屬性行爲一致。修改單個對象的prototype
通常是不被推薦的。
相似underscore和lodash的_.extend
。將多個對象的值合併到一個對象。
數字和算數的API複雜並且不經常使用,可是卻必備。
判斷數字是否爲有窮。判斷過程不嘗試將參數轉換爲number
。
Number.isFinite(Infinity); // false Number.isFinite(NaN); // false Number.isFinite(-Infinity); // false Number.isFinite(0); // true Number.isFinite(2e64); // true
判斷是否爲正整數。
不將參數強制轉行爲number
。判斷是否確實爲NaN
。
判斷是否爲在MAX_SAFE_INTEGER
範圍內的正整數。這裏說明一下,NUMBER.MAX_SAFE_INTEGER
是2^53-1
。NUMBER.MAX_VALUE
是1.7976931348623157 × 10308
,這是IEE754中定義的double的最大值[^13]。
一個常量,表明正整數1與大於1的最小值之差。大約爲: 2.2204460492503130808472633361816 x 10^16
。
CountLeadingZeroes32
。計算一個數字在32位無符號位整形數字的二進制形式開頭有多少個0
。
以32位正數的乘法方式來計算給定參數。該方法的一種可能的Javascript實現:
function imul(a, b) { var ah = (a >>> 16) & 0xffff; var al = a & 0xffff; var bh = (b >>> 16) & 0xffff; var bl = b & 0xffff; // the shift by 0 fixes the sign on the high part // the final |0 converts the unsigned value into a signed value return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0); }
判斷一個數的符號位
Math.sign(3) // 1 Math.sign(-3) // -1 Math.sign("-3") // -1 Math.sign(0) // 0 Math.sign(-0) // -0 Math.sign(NaN) // NaN Math.sign("foo") // NaN Math.sign() // NaN
lg(x)
log2(x)
ln(1+x)
e^x-1
計算給定參數的平方平均數
function trunc(x) { return x < 0 ? Math.ceil(x) : Math.floor(x); }
返回數值的最接近的單精度浮點。
求x的立方根
ES標準13在快速發展之中,部分討論14都已經擴展到ES8的規劃以內。就像W3C的新版標準同樣,他們的出現每每被開發者輕視。前段開發者以兼容性、實用性爲藉口選擇性忽略,可是不知不覺中,這些開發者已經成爲了守舊者,那些曾經被視爲華而不實的Canvas、ApplicationStorage、Websocket等技術,現在已經是大量在線應用的基礎設施。
ES6標準中部分已經被普遍應用到node應用的開發之中,也許不久的將來,nodejs的開發者所寫的Javascript已經和瀏覽器端開發者使用的Javascript是兩種不一樣的語言了。
ES6很多API層面的特性能夠經過shim15進行兼容性支持。部分語法特性,經過二次編譯16,能夠支持。因此,已經不是找理由不瞭解ECMAScript的時候了。
http://stackoverflow.com/questions/3744721/javascript-strings-outside-of-the-bmp ↩
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith ↩
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith ↩
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/contains ↩
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-22.1.2.1 ↩
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-22.1.2.1 ↩
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find ↩
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-22.1.3.6 ↩
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor ↩
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor ↩
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is ↩
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.issafeinteger ↩
http://esdiscuss.org/topic/es6-es7-es8-and-beyond-a-proposed-roadmap ↩