ES7 只有两个新功能,这是它们的工作原理

让我们来聊一聊 JavaScript 新版本:ECMAScript 2016 (通常被称为 ES7)。

ES7 带来了两个新功能:Array.prototype.includes() 和 新的指数运算符:**

Array.prototype.includes()

使用 .indexOf() 来确定一个元素是否在数组中存在的方式已经成为历史。

重点其实是“存在”

.indexOf() 的“本职工作”应该是用来确定某个值在数组中的索引。

而如果我们的目的是确定一个元素是否在数组中存在,那么使用 .indexOf() 并不是最好的选择。理由很简单:当查询某个东西的存在性时我们希望得到一个布尔值,而不是数值

Array.prototype.includes() 做的恰恰就是这件事。它能确定数组中是否包含给定元素,有就返回 true,否则返回 false

深入标准

Array.prototype.includes ( searchElement [ , fromIndex ] )

  • searchElement —— 要查找的元素。
  • fromIndex (可选的) — 开始查询的起始索引。

深入了解 规范,就像一次寻找力量之旅。

规范中的内容如下:

让我们循序渐进,用一些例子来理解规范。

  1. 这里的区别是元素 4 的位置。在第一个例子中 4 位于数组末尾,所以 includes 方法会搜索整个数组。按规范,.includes() 方法会在找到 searchElement 后立即返回,所以第二个例子执行地更快。
  2. SameValueZero 算法与严格相等比较.indexOf()采用)的最大区别就是它允许检测 NaN 元素。
  3. 元素被找到就返回 true,否则返回 false。不再使用索引作为结果了
  4. .indexOf() 相反,.includes() 并不会跳过缺失的数组元素,而会将其视为 undefined

你已经开始感受到力量了么?我们还没说 fromIndex 呢。

规范中是这样写的:

可选的第二参数 fromIndex 默认值为 0(这意味整个数组都会被搜索)。如果这个参数的值大于或等于数组长度,则会直接返回 false ,数组将不会被搜索。如果值为是负数,则代表相对于数组末尾的偏移量。如果偏移量超过数组长度,则整个数组都会被搜索。

  1. 如果不提供 fromIndex 参数则默认其为 0 ,这时整个数组都将被搜索。
  2. fromIndex 大于数组长度时,.includes() 立即返回 false
  3. 如果 fromIndex 是负值, 那么起始索引计算方式为 array.length — fromIndex 。这在搜索数组末尾元素时很有用。例如 fromIndex = -5 意味着只搜索最后 5 个元素。
  4. 为了避免 .includes() 执行中断,当计算得到的起始索引小于 0 时,整个数组会被搜索。我个人更希望中断 💥

好了——最后一个新功能……

指数运算符(**)

我们一直期待着指数计算也能像进行加减乘除一样方便。

是的,这一天已经到来。

操作符 **Math.pow() 的行为一致。它返回第一个操作数的第二个操作数次的乘方值 (例如 x ** y)。

就这么多!

现在你已经掌握 ES7 !好好用吧!

1 1 收藏 评论

关于作者:唐耶尔

stay curious, stay funny. 兴趣广泛的前端新手~ 个人主页 · 我的文章 · 10 ·  

可能感兴趣的话题



直接登录
跳到底部
返回顶部