原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_api_extension.html
- 本文须要补充更多例子
- 本文存在讲明,但该网站的Markdown编辑器不支撑,所以没法平常展现,请到原文参考。
ES6特征概述
ES6比较ES5新特征更多。新到场的特征大抵气氛三类:
- 扩大已有的原生对象API
- Object上的新要领
- String上的新要领
- Math上的新要领
- …
- 全新的数据结构
- WeakMap
- Set
- …
- 语法特征:新表达式、语法糖等
- arrow function
- const
- let
- rest parameters, default parameters
- spread call, spread array
- class
- computed properties
- Modules
- for-of loop
- Array comprehensions
- Generator
- Iterator
- Block-level function
- Destructuring
因为新的语法特征非常庞杂,本篇只形貌部份ES6中新到场的API。以后后分篇形貌现在已比较成熟的语法特征(比方Generator和Iterator)。
String
String.fromCodePoint(n1,n2,n3,…)
从UTF16代码转换字符。这里笔者也不太清晰,应当和UTF编码有关1。
String.prototype.codePointAt
从字符串的字符上取CodePoint。
String.prototype.repeat
"abc".repeat(2) // "abcabc"
String.prototype.startsWith(a,p)2
推断字符串是不是以a
开首;检索的肇端位置p
是可选的。
String.prototype.endWith(a,p)3
推断字符串是不是以a
末端;检索的肇端位置p
是可选的。
String.prototype.contains(a,p)4
推断字符串是不是包括子串a
;检索的肇端位置p
是可选的。
Array
Array.from(arrayLike,map,thisArg)5
依据类数组对象arrayLike
建立数组;一个可选的map
要领和其上下文对象thisArg
。
Array.of(…items)6
从给定参数建立数组。
Array.prototype.find(cb,thisArg)7
寻觅经由历程指定函数cb
测试的第一个元素。
Array.prototype.findIndex(cb,thisArg)
同上,但返回该元素的索引号。
Array.prototype.fill(v,s,e)8
在数组索引s
和e
之间添入多个元素v
。
Object
Object.getOwnPropertyDescriptors(o,p)9
猎取对象o
上属性p
的特征形貌对象。在征采属性时,不在原型链上搜刮。
Object.getPropertyDescriptor(o,p)10
猎取对象o
上属性p
的特征形貌对象。
Object.getOwnPropertyNames(o)
猎取对象自身上可罗列和不可罗列的键名数组。注重,该要领会返回那些enumerable属性已设置为false的propety。
Object.is(a, b)11
检测两个给定对象的值是不是雷同。该要领不会举行犹如==
操作符那样去举行数值转换。与===
也有细微差别。仅当相符下面恣意前提才返回true
:
- 都是
undefined
- 都是
null
- 都是
true
或false
- 都是等长、内容雷同的字符串
- 都是同一个对象
- 都是
number
,而且满足以下任一前提:- 都是
+0
- 都是
-0
- 都是
NaN
- 都黑白零、非
NaN
,而且数值一样
- 都是
Object.setPrototypeOf(o, proto)
将对象o
的原型修正成proto
。和对象的__proto__
属性行动一致。修正单个对象的prototype
平常是不被引荐的。
Object.assign(target, source1, source2, …)
相似underscore和lodash的_.extend
。将多个对象的值合并到一个对象。
Number
数字和算数的API庞杂而且不经常运用,然则却必备。
Number.isFinite(v)
推断数字是不是为有穷。推断历程不尝试将参数转换为number
。
Number.isFinite(Infinity); // false
Number.isFinite(NaN); // false
Number.isFinite(-Infinity); // false
Number.isFinite(0); // true
Number.isFinite(2e64); // true
Number.isInteger(v)
推断是不是为正整数。
Number.isNaN(v)
不将参数强迫转行动number
。推断是不是确实为NaN
。
Number.isSafeInteger()12
推断是不是为在MAX_SAFE_INTEGER
范围内的正整数。这里申明一下,NUMBER.MAX_SAFE_INTEGER
是2^53-1
。NUMBER.MAX_VALUE
是1.7976931348623157 × 10308
,这是IEE754中定义的double的最大值[^13]。
Number.EPSILON13
一个常量,代表正整数1与大于1的最小值之差。大约为: 2.2204460492503130808472633361816 x 10^16
。
Math
Math.clz32(v)
CountLeadingZeroes32
。盘算一个数字在32位无标记位整形数字的二进制情势开首有多少个0
。
Math.imul(v)
以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(v)
推断一个数的标记位
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
Math.log10(x)
lg(x)
Math.log2(x)
log2(x)
Math.log1p(x)
ln(1+x)
Math.expm1(x)
e^x-1
Math.cosh(x)
Math.sinh(x)
Math.tanh(x)
Math.acosh(x)
Math.asinh(x)
Math.atanh(x)
Math.hypot(v1,v2,v3….)
盘算给定参数的平方平均数
Math.trunc(v)
function trunc(x) {
return x < 0 ? Math.ceil(x) : Math.floor(x);
}
Math.fround(v)
返回数值的最接近的单精度浮点。
Math.cbrt(x)
求x的立方根
关于ES及其他
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 ↩