ECMAScript 2016(ES7)新特性 - Es6+ 版本特性
ECMAScript 2016(ES7)新特性
ECMAScript 2016(ES7)新特性:
- 指数运算符:
**
。 Array.prototype.includes()
。- 函数作用域中严格模式的变更。
指数(求幂)操作符
在之前的时候,可以通过Math.pow()
方法来执行求幂运算,但这毕竟是一个方法,一些开发者更希望通过操作符就可以实现这个功能。所以在ES6中,使用了两个星号**
,来作为求幂运算符。其中:左操作数是基数,右操作数是指数。
3 ** 2 //9 效果同 Math.pow(3, 2) //9
由于是运算符,也可以**=
var b = 3; b **= 2; console.log(b); //9
求幂运算符在 JavaScript 所有二进制运算符中具有最高的优先级(一元运算符的优先级高于**
)。
let result = 2 * 5 ** 2; console.log(result); // 50
Array.prototype.includes()
ES7 为 Array 添加了新的方法includes()
,查找一个值在不在数组里,若是存在则返回true
,不存在返回false
。
Array.prototype.includes(element, start = 0)
- element:要查找的元素。
- start:开始查找的位置。如果start参数小于 0,则重置为 0,如果start参数大于等于数组长度,则返回 false。
const arr=['a', 'b', 'c']; arr.includes('a') // true arr.includes('d') // false arr.includes('b') // true arr.includes('b',1) // true arr.includes('b',2) // false
该方法与indexOf()
的区别在于,indexOf()
不会识别NaN
和稀疏数组中的缺失元素。而includes()
方法可以。
var array = [1,2,3]; array.length = 5; array.push(NaN); array; // [1, 2, 3, empty × 2, NaN] array.includes(undefined); // true array.includes(NaN); // true array.indexOf(undefined); // -1 array.indexOf(NaN); // -1
函数作用域严格模式的一处改动
函数中存在use strict
时,实现运行在严格模式下的参数非常困难,因为参数默认值也可以是函数。这个难点导致大多数 JavaScript 引擎均不实现此功能,而是将其等同于全局对象。
由于实现困难,ES2016规定在参数被解构或有默认参数的函数中,禁止使用use strict
指令。只有参数为不包含解构或默认值的简单参数列表时,才可以在函数体中使用use strict
。
//此处使用简单参数列表,可以运行 function okay(first, second) { "use strict"; return first; } //抛出语法错误 function notOkay1(first, second=first) { "use strict"; return first; } //抛出语法错误 function notOkay2({ first, second }) { "use strict"; return first; } //函数执行,先执行函数参数,再函数体 //在函数体中定义 "use strict",只有在函数体中才能知道参数是否应该严格模式。但是参数却应该先于函数体的执行 //解决方案一 设定全局严格模式 //解决方案二,将函数包在一个无参数的立即执行函数内 const fun = ( function () { "use strict" return function (value = 100) { return value; } }() ) console.log(fun(50))
'use strict'; // 1. 变量名必须先声明再使用 // num = 10; // console.log(num); //严格模式下报错 var num = 10; console.log(num); // 2.不能随意删除已经声明好的变量,会报错 // delete num; // 3. 严格模式下全局作用域中函数中的 this 指向 undefined,不再是window function fn() { console.log(this); // undefined。 } fn(); // 4. 严格模式下,如果 构造函数不加 new 调用, this 指向的是 undefined 如果给他赋值则 会报错. function Star() { this.sex = '男'; } Star(); var ldh = new Star(); console.log(ldh.sex); // 5. 定时器 this 还是指向 window setTimeout(function() { console.log(this); }, 2000); a = 1; a = 2; 6. 严格模式下函数里面的参数不允许有重名 function fn(a, a) { console.log(a + a); }; fn(1, 2); function fn() {}
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!