原文: 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 ↩