资讯专栏INFORMATION COLUMN

ES6特性概述 - ES6 - ECMAScript特性 - Javascript核心

Ali_ / 1655人阅读

摘要:特性概述比较新特性更多。之后后分篇描述目前已经比较成熟的语法特性例如和。同上,但返回该元素的索引号。和对象的属性行为一致。不将参数强制转行为。判断是否为在范围内的正整数。不少层面的特性可以通过进行兼容性支持。

  

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

都是undefined

都是null

都是truefalse

都是等长、内容相同的字符串

都是同一个对象

都是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_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的时候了。

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://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts

↩ ↩

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78137.html

相关文章

  • ES6语法特性 - ES6 - ECMAScript特性 - Javascript核心

    摘要:前三个是为了解决变量声明定义的问题,而最后一个则影响最大。下文只介绍前三个特性。这是因为的的不支持块级作用域,变量仅仅被限制到函数作用域内。 原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.html 源代码: https://github.com/RobinQu/P...

    Joyven 评论0 收藏0
  • ES6语法特性 - ES6 - ECMAScript特性 - Javascript核心

    摘要:前三个是为了解决变量声明定义的问题,而最后一个则影响最大。下文只介绍前三个特性。这是因为的的不支持块级作用域,变量仅仅被限制到函数作用域内。 原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.html 源代码: https://github.com/RobinQu/P...

    StonePanda 评论0 收藏0
  • ES6语法特性 - ES6 - ECMAScript特性 - Javascript核心

    摘要:前三个是为了解决变量声明定义的问题,而最后一个则影响最大。下文只介绍前三个特性。这是因为的的不支持块级作用域,变量仅仅被限制到函数作用域内。 原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.html 源代码: https://github.com/RobinQu/P...

    jas0n 评论0 收藏0
  • ES6引入的数据结构 - ES6 - ECMAScript特性 - Javascript核心

    摘要:引入的数据结构新加入的数据类型有这些数据结构的支持并不广泛,在写这篇文章的时候。是或其他可枚举的对象,其每个元素是的元数组。开头的和不对持有引用,不影响。因此,他们没有办法对自身的进行直接的枚举。目前新版的和支持。 原文:http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_data_types.html 源代...

    fobnn 评论0 收藏0
  • [译] ES6 学习笔记:关于 ES2015 特性的详细概述

    摘要:将转换成常见的使用实现的基于迭代器的迭代。处停止迭代器基于鸭子模型接口这里使用语法仅仅为了说明问题使用支持为了使用迭代器属性需要引入。生成器是迭代器的子类,包含了附加的与。 原文地址:http://babeljs.io/docs/learn-...本文基于Luke Hoban精妙的文章《es6features》,请把star献给他,你可以在此尝试这些特性REPL。 概述 ECMAScr...

    leoperfect 评论0 收藏0

发表评论

0条评论

Ali_

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<