六月更文挑战第6天,ES6(一)

155 阅读2分钟

这是我参与更文挑战的第6天,活动详情查看:更文挑战

ES6(一)

let\const

  • let\const 命名变量和常量 let 与 var区别在于let有块级作用域,var申明的变量会有变量提升效果,const与let区别 是 const定义的是常量,不可修改

解构赋值

变量、数组、对象都可以进行 结构赋值,解构赋值的拷贝是浅拷贝,即如果一个键的值是复合类型的值(数组、对象、函数)、那么解构赋值拷贝的是这个值的引用,而不是这个值的副本。

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x // 1
y // 2
z // { a: 3, b: 4 }

// 解构赋值必须是最后一个参数,否则会报错。
let { ...x, y, z } = someObject; // 句法错误
let { x, ...y, ...z } = someObject; // 句法错误

模板字符串的使用


let word = 'world'
let str = `hello ${word}`

字符串新增方法

传统上,JavaScript 只有`indexOf`方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。

+ **includes()**:返回布尔值,表示是否找到了参数字符串。
+ **startsWith()**:返回布尔值,表示参数字符串是否在原字符串的头部。
+ **endsWith()**:返回布尔值,表示参数字符串是否在原字符串的尾部。

[ES2019](https://github.com/tc39/proposal-string-left-right-trim) 对字符串实例新增了`trimStart()`和`trimEnd()`这两个方法。它们的行为与`trim()`一致,`trimStart()`消除字符串头部的空格,`trimEnd()`消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。

等....一系列不常用的方法

数组的扩展

	ES6Number对象上,新提供了`Number.isFinite()``Number.isNaN()`两个方法。`Number.isFinite()`用来检查一个数值是否为有限的(finite);`Number.isNaN()`用来检查一个值是否为`NaN`

对象的扩展

  • 对象内属性和方法都提供了简洁的写法

  • 属性的可枚举性和遍历

    Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。

    let obj = { foo: 123 };
    Object.getOwnPropertyDescriptor(obj, 'foo')
    //  {
    //    value: 123,
    //    writable: true,
    //    enumerable: true,
    //    configurable: true
    //  }
    

    描述对象的enumerable属性,称为“可枚举性”,如果该属性为false,就表示某些操作会忽略当前属性。

    目前,有四个操作会忽略enumerablefalse的属性。

    • for...in循环:只遍历对象自身的和继承的可枚举的属性。
    • Object.keys():返回对象自身的所有可枚举的属性的键名。
    • JSON.stringify():只串行化对象自身的可枚举的属性。
    • Object.assign(): 忽略enumerablefalse的属性,只拷贝对象自身的可枚举的属性。

    这四个操作之中,前三个是 ES5 就有的,最后一个Object.assign()是 ES6 新增