ES6特征概述 - ES6 - ECMAScript特征 - Javascript中心

原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_api_extension.html

源代码: https://github.com/RobinQu/Programing-In-JavaScript/blob/master/chapters/Javascript_Core/ECMAScript/es6/es6_api_extension.md

  • 本文须要补充更多例子
  • 本文存在讲明,但该网站的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

在数组索引se之间添入多个元素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

  1. 都是undefined
  2. 都是null
  3. 都是truefalse
  4. 都是等长、内容雷同的字符串
  5. 都是同一个对象
  6. 都是number,而且满足以下任一前提:
    1. 都是+0
    2. 都是-0
    3. 都是NaN
    4. 都黑白零、非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_INTEGER2^53-1NUMBER.MAX_VALUE1.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的时刻了。

  1. http://stackoverflow.com/questions/3744721/javascript-strings-outside-of-the-bmp 

  2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith 

  3. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith 

  4. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/contains 

  5. http://people.mozilla.org/~jorendorff/es6-draft.html#sec-22.1.2.1 

  6. http://people.mozilla.org/~jorendorff/es6-draft.html#sec-22.1.2.1 

  7. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find 

  8. http://people.mozilla.org/~jorendorff/es6-draft.html#sec-22.1.3.6 

  9. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor 

  10. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor 

  11. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is 

  12. https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.issafeinteger 

  13. http://esdiscuss.org/topic/es6-es7-es8-and-beyond-a-proposed-roadmap 

  14. https://github.com/paulmillr/es6-shim/ 

  15. https://github.com/addyosmani/es6-tools 

    原文作者:RobinQu
    原文地址: https://segmentfault.com/a/1190000000515160
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞