百科狗-知识改变命运!
--

ECMAScript 2016(ES7)新特性 - Es6+ 版本特性

梵高1年前 (2023-11-21)阅读数 27#技术干货
文章标签函数

ECMAScript 2016(ES7)新特性

ECMAScript 2016(ES7)新特性:

  • 指数运算符:**
  • Array.prototype.includes()
  • 函数作用域中严格模式的变更。


指数(求幂)操作符

在之前的时候,可以通过Math.pow()方法来执行求幂运算,但这毕竟是一个方法,一些开发者更希望通过操作符就可以实现这个功能。所以在ES6中,使用了两个星号**,来作为求幂运算符。其中:左操作数是基数,右操作数是指数。

3 ** 2 //9

效果同
Math.pow(3, 2) //9

ECMAScript 2016(ES7)新特性 - Es6+ 版本特性

由于是运算符,也可以**=

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

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)