ES6学习

作者: 搬个菠萝晒太阳 | 来源:发表于2019-05-23 11:40 被阅读0次

    1、Array.prototype.includes()方法

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

    var array = [1, 2, 3];
    
    console.log(array.includes(2));
    // expected output: true
    
    var pets = ['cat', 'dog', 'bat'];
    
    console.log(pets.includes('cat'));
    // expected output: true
    
    console.log(pets.includes('at'));
    // expected output: 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
    

    乍一看,includes的作用跟数组的indexOf重叠,为什么要特意增加这么一个api呢?主要区别有以下几点:

    1、返回值。看一个函数,先看他们的返回值。indexOf的返回数是值型的,includes的返回值是布尔型,所以在if条件判断的时候includes要简单得多,而indexOf 需要多写一个条件进行判断。

    var ary = [1];
    if (ary.indexOf(1) !== -1) {
        console.log("数组存在1")
    }
    if (ary.includes(1)) {
        console.log("数组存在1")
    }
    

    2、NaN的判断。如果数组中有NaN,你又正好需要判断数组是否有存在NaN,这时你使用indexOf是无法判断的,你必须使用includes这个方法。

    var ary1 = [NaN];
    console.log(ary1.indexOf(NaN))//-1
    console.log(ary1.includes(NaN))//true
    

    3、当数组的有空的值的时候,includes会认为空的值是undefined,而indexOf不会。

    var ary1 = new Array(3);
    console.log(ary1.indexOf(undefined));//-1
    console.log(ary1.includes(undefined))//true
    

    2、求幂运算符(**)

    加/减法我们通常都是用其中缀形式,直观易懂。在ECMAScript2016中,我们可以使用**来替代Math.pow。

    4 ** 3           // 64
    

    效果等同于

    Math.pow(4,3)
    

    值得一提的是,作为中缀运算符,**还支持以下操作

    let n = 4;
    n **= 3;
    // 64
    

    3、Object.values and Object.entries

    Object.values() 方法返回一个给定对象自己的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于for-in循环枚举原型链中的属性 )。
    obj参数是需要待操作的对象。可以是一个对象,或者一个数组(是一个带有数字下标的对象,[10,20,30] -> {0: 10,1: 20,2: 30})。

    const obj = { x: 'xxx', y: 1 };
    Object.values(obj); // ['xxx', 1]
    
    const obj = ['e', 's', '8']; // 相当于 { 0: 'e', 1: 's', 2: '8' };
    Object.values(obj); // ['e', 's', '8']
    

    // 当我们使用数字键值时,返回的是数字排序
    // 根据键值排序

    const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
    Object.values(obj); // ['yyy', 'zzz', 'xxx']
    
    Object.values('es8'); // ['e', 's', '8']
    

    Object.entries 方法返回一个给定对象自身可遍历属性 [key, value] 的数组, 排序规则和 Object.values 一样。这个方法的声明比较琐碎:

    const obj = { x: 'xxx', y: 1 };
    Object.entries(obj); // [['x', 'xxx'], ['y', 1]]
    
    const obj = ['e', 's', '8'];
    Object.entries(obj); // [['0', 'e'], ['1', 's'], ['2', '8']]
    
    const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
    Object.entries(obj); // [['1', 'yyy'], ['3', 'zzz'], ['10': 'xxx']]
    
    Object.entries('es8'); // [['0', 'e'], ['1', 's'], ['2', '8']]
    

    4、String padding

    为 String 对象增加了 2 个函数:padStart 和 padEnd。
    像它们名字那样,这几个函数的主要目的就是填补字符串的首部和尾部,为了使得到的结果字符串的长度能达到给定的长度。你可以通过特定的字符,或者字符串,或者默认的空格填充它。下面是函数的声明:

    str.padStart(targetLength [, padString])
    str.padEnd(targetLength [, padString])
    

    这些函数的第一个参数是 targetLength(目标长度),这个是结果字符串的长度。第二个参数是可选的 padString(填充字符),一个用于填充到源字符串的字符串。默认值是空格。

    'es8'.padStart(2);          // 'es8'
    'es8'.padStart(5);          // '  es8'
    'es8'.padStart(6, 'woof');  // 'wooes8'
    'es8'.padStart(14, 'wow');  // 'wowwowwowwoes8'
    'es8'.padStart(7, '0');     // '0000es8'
    
    'es8'.padEnd(2);            // 'es8'
    'es8'.padEnd(5);            // 'es8  '
    'es8'.padEnd(6, 'woof');    // 'es8woo'
    'es8'.padEnd(14, 'wow');    // 'es8wowwowwowwo'
    'es8'.padEnd(7, '6');       // 'es86666'
    

    相关文章

      网友评论

          本文标题:ES6学习

          本文链接:https://www.haomeiwen.com/subject/jwqnpqtx.html