首页 > 编程知识 正文

fm2023新特性,css3新特性

时间:2023-05-04 10:24:51 阅读:279209 作者:1355

原文链接: es7 新特性

上一篇: Pythonic之道

下一篇: es8 新特性

ES7新特性

ES7在ES6的基础上添加了三项内容: 求幂运算符(**) Array.prototype.includes() 方法、函数作用域中严格模式的变更。

Array.prototype.includes()方法

includes() 的作用,是查找一个值在不在数组里,若在,则返回 true ,反之返回 false 。 基本用法:

['a', 'b', 'c'].includes('a') // true['a', 'b', 'c'].includes('d') // false

Array.prototype.includes() 方法接收两个参数: 要搜索的值和搜索的开始索引 。当第二个参数被传入时,该方法会从索引处开始往后搜索(默认索引值为0)。若搜索值在数组中存在则返回 true ,否则返回 false 。 且看下面示例:

['a', 'b', 'c', 'd'].includes('b') // true['a', 'b', 'c', 'd'].includes('b', 1) // true['a', 'b', 'c', 'd'].includes('b', 2) // false

那么,我们会联想到ES6里数组的另一个方法indexOf,下面的示例代码是等效的:

['a', 'b', 'c'].includes('a') //true['a', 'b', 'c'].indexOf('a') > -1 //true

此时,就有必要来比较下两者的优缺点和使用场景了。

简便性

从这一点上来说,includes略胜一筹。熟悉indexOf的同学都知道,indexOf返回的是某个元素在数组中的下标值,若想判断某个元素是否在数组里,我们还需要做额外的处理,即判断该返回值是否>-1。而includes则不用,它直接返回的便是Boolean型的结果。

精确性

两者使用的都是 === 操作符来做值的比较。但是includes()方法有一点不同,两个NaN被认为是相等的,即使在 NaN === NaN 结果是 false 的情况下。这一点和 indexOf() 的行为不同, indexOf() 严格使用 === 判断。请看下面示例代码:

let demo = [1, NaN, 2, 3]demo.indexOf(NaN) //-1demo.includes(NaN) //true

上述代码中, indexOf() 方法返回-1,即使NaN存在于数组中,而 includes() 则返回了true。

提示: 由于它对NaN的处理方式与indexOf不同,假如你只想知道某个值是否在数组中而并不关心它的索引位置,建议使用includes()。如果你想获取一个值在数组中的位置,那么你只能使用indexOf方法。

includes() 还有一个怪异的点需要指出,在判断 +0 与 -0 时,被认为是相同的。

[1, +0, 3, 4].includes(-0) //true[1, +0, 3, 4].indexOf(-0) //1

在这一点上, indexOf() 与 includes() 的处理结果是一样的,前者同样会返回 +0 的索引值。

注意: 在这里,需要注意一点, includes() 只能判断简单类型的数据,对于复杂类型的数据,比如对象类型的数组,二维数组,这些,是无法判断的。
求幂运算符(**) 基本用法 3 ** 2 // 99 ** 0.5 // 3

效果同:

Math.pow(3, 2) // 9

** 是一个用于求幂的中缀算子,比较可知,中缀符号比函数符号更简洁,这也使得它更为可取。 下面让我们扩展下思路,既然说**是一个运算符,那么它就应该能满足类似加等的操作,我们姑且称之为幂等,例如下面的例子,a的值依然是9:

let a = 3a **= 2// 9

对比下其他语言的指数运算符:

Python: x ** y CoffeeScript: x ** y F#: x ** y Ruby: x ** y Perl: x ** y Lua, Basic, MATLAB: x ^ y

不难发现,ES的这个新特性是从其他语言(Python,Ruby等)模仿而来的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。