ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(1)

简介: ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(1)

前言:ES6大家已经在工作中用的炉火纯青了,那么ES6的知识点就不再详细介绍了,一起学习一下ES7 --- ES12 的知识点吧!为了年后的金三银四 冲、冲、冲!!!

一、ES6

       ① let const  : 点此了解详情


       ② 箭头函数  


       ③ 数组解构赋值


       ④ 模板字符串


       ⑤ Generator 和 Iterator  :点此了解详情


       ⑥ promise  :点此了解详情


       ⑦ for..in  和 for...of


       ES6 就不过多的详细介绍了,相比大家已经用的很熟练了!!!

二、ES2016(ES7)

1. Array.prototype.includes()  

 includes( )  方法用来判断一个数组是否包含一个指定的值,如果包含则返回 true,否则返回 false。

1.1  语法及示例 

const arr = ['Barry','Lishen','Jenny','Chany'];
arr.includes(value,index)

   value,需要查找的元素值。index可选 ,从 index 索引处开始查找 value。如果为负值,则按升序从 arr.length + index的索引开始搜索。默认为 0。

const arr = ['Barry', 'Lishen', 'Jenny', 'Chany'];
console.log(arr.includes('Barry')); // true
console.log(arr.includes('Barry',0)); // true
console.log(arr.includes('Barry',1)); // false
console.log(arr.includes('Barry',2)); // false
console.log(arr.includes('Barry',-1)); // false
console.log(arr.includes('Barry',-2)); // false
数组的长度是 4
index 是 -5
computed index 是 4 + (-5) = -1
如果计算出的索引小于 0,则整个数组都会被搜索。 所以下面为 true
console.log(arr.includes('Barry',-5)); // true

计算出的索引小于 0

如果 index 为负值,计算出的索引将作为开始搜索 value 的位置。如果计算出的索引小于 0,则整个数组都会被搜索。

1.2  注意点

       ① 使用 includes()查找字符串是区分大小写的。        

    const arr = ['Barry', 'Lishen', 'Jenny', 'Chany'];
    console.log(arr.includes("BARRY")); // fasle

 ② 使用 includes()只能判断简单类型的数据,对于复杂类型的数据,比如对象类型的数组,二维数组,这些是无法判断的.

    const arr = ['Barry', 'Chany', ['EricNg', 'Tiny'], { name: 'Barry' }];
    console.log(arr.includes(['EricNg', 'Tiny'])); // fasle
    console.log(arr.includes({ name: 'Barry' })); // fasle

  ③能识别NaN,indexOf是不能识别NaN的

    const arr = ['Barry', 'Lishen', 'Jenny', NaN, 'Chany'];
    console.log(arr.includes(NaN)); // true
    console.log(arr.indexOf(NaN)); // -1

最后,如果只想知道某个值是否在数组中存在,而并不关心它的索引位置,建议使用includes(),如果想获取一个值在数组中的位置,那么使用indexOf方法。

2. 幂运算符 **

2.1  语法及示例

Math.pow( )        

console.log(Math.pow(2, 10)); // 1024

幂运算符 **

console.log(2 ** 4); // 1024

 基本求幂

    console.log(2 ** 3); // 8
    console.log(3 ** 2); // 9
    console.log(3 ** 2.5); // 15.588457268119896
    console.log(10 ** -1); // 0.1
    console.log(NaN ** 4); // NaN

2.2  注意点

        幂运算符的两个*号之间不能出现空格,否则语法会报错。

三、ES2017(ES8)

3. Object.values()

       Object.values 方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。

    const obj = {
      name: "Barry",
      age: 18,
      height: 185,
      money: 1000000000
    }
    console.log(Object.values(obj)); // ['Barry', 18, 185, 1000000000]

4. Object.entries()

       Object.entries() 方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值对数组。        

    const obj = {
      name: "Barry",
      age: 18,
      height: 185,
      money: 1000000000
    }
    console.log(Object.entries(obj)); // [['name','Barry'], ['age',18], ['height',185], ['money',100000000]]
    console.log(Object.entries([1, 2, 3])); // [['0',1], ['1',2], ['2',3]]

5. Object.getOwnPropertyDescriptors()

       Object.getOwnPropertyDescriptors()  方法用来获取一个对象的所有自身属性的描述符。

    const obj = {
      name: "Barry",
      age: 18,
    }
    const description = Object.getOwnPropertyDescriptors(obj);
    console.log(description)
    打印结果
    {
      age: {
        configurable: true
        enumerable: true
        value: 18
        writable: true
      }
      name: {
        configurable: true
        enumerable: true
        value: "Barry"
        writable: true
      }
    }

  上面打印结果中的


value表示当前对象的默认值


writable表示对象属性是否可以修改


enumerable表示当前这个属性是否可以出现在对象的枚举属性中


configurable表示当前对象的属性能否用delete删除


       那这些对象的属性我们怎么设置和修改他们呢,我们可以使用 es5 的 Object.defineProperty()  

    const obj = {
    }
    Object.defineProperty(obj, 'name', {
      value: "Barry",
      writable: true,
      enumerable: true,
      configurable: true
    });
    Object.defineProperty(obj, 'age', {
      value: 18,
      writable: true,
      enumerable: true,
      configurable: true
    })
    console.log(obj) // {name: 'Barry', age: 18}

   接下来我们演示下,一些属性设置为false的情况 :

               我们可以看到设置 writable: falseconfigurable: false,为false时,对象的name对象的值不能改变和不能被删除,打印出来还是原来的对象。

    const obj = {
    }
    Object.defineProperty(obj, 'name', {
      value: "Barry",
      writable: false,
      enumerable: false,
      configurable: true
    });
    console.log(obj) // {name: 'Barry'}
    obj.name = 'lishen';
    console.log(obj); // {name: 'Barry'}
    delete obj.name
    console.log(obj); // {name: 'Barry'}

20210527153548522.png

设置enumerable为false时:

               当设置enumerable: false时,表示对象的属性不可被枚举,这时打印对象为空,遍历对象的键也为空。

    const obj = {
    }
    Object.defineProperty(obj, 'name', {
      value: "Barry",
      writable: true,
      enumerable: true,
      configurable: false
    });
    console.log(obj) // {}
    for (let key in obj) {
      console.log(key); // ""
    }

6. String.prototype.padStart

6.1  语法      

str.padStart(targetLength , padString)


targetLength


       当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。


padString 可选


       填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断。此参数的默认值为 " "

6.2  示例

    const str = "ABC";
    console.log(str.padStart(10))  // "       ABC"
    console.log(str.padStart(10, 'foo')) // "foofoofABC"
    console.log(str.padStart(6, '123456')) // "123ABC"
    console.log(str.padStart(8, '0')) // "00000ABC"
    console.log(str.padStart(1)) // "ABC"

6.3  应用场景

日期格式化:yyyy-mm-dd的格式:

    const now = new Date();
    const year = now.getFullYear();
    const mounth = (now.getMonth() + 1).toString().padStart(2, '0')
    const day = (now.getDate()).toString().padStart(2, '0')
    console.log(`${year}-${mounth}-${day}`); // 今天的日期 : 2021-01-27

              数字替换(手机号,银行卡号等)

    const tel = '18737740333';
    function formatTel (tel) {
      return tel.slice(-4).padStart(tel.length, '*')
    }
    console.log(formatTel(tel));  // *******0333

7. String.prototype.padEnd

把指定字符串填充到字符串尾部,返回新字符串。语法同 String.prototype.padStart

    const str = "ABC";
    console.log(str.padEnd(10)) // "ABC       "
    console.log(str.padEnd(10, 'foo')) // "ABCfoofoof"
    console.log(str.padEnd(6, '123456')) // "ABC123"
    console.log(str.padEnd(1))  // "ABC"
相关文章
|
前端开发 JavaScript
ES6(三)
es6补充知识
64 1
|
4月前
ES6常用知识小结
ES6常用知识小结
27 0
ES6(二)
es6相关知识
61 0
|
前端开发 JavaScript API
ES6-day03
ES6-day03
50 0
|
前端开发 容器
ES6 Day04
ES6 Day04
73 0
|
JavaScript 前端开发
ES5、ES6和ES2015有什么区别?
ES5、ES6和ES2015有什么区别?
287 0
|
JSON 前端开发 对象存储
ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(2)
ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(2)
ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(2)
|
前端开发 JavaScript
ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(3)
ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(3)
ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(3)
|
JavaScript 前端开发 Java
ES6+
ES6+
157 0