解构赋值 、圆括号、字符串扩展、字符串的新增方法、数值扩展、数组的扩展、对象的新增方法

95 阅读5分钟

asd.png

解构赋值
    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值
    解构赋值允许指定默认值。
    
数组的解构赋值:可以从数组中提取值,按照对应位置,对变量赋值。
    let [a, b, c] = [1, 2, 3];
    需注意:嵌套关系、默认值的使用
    
对象结构赋值:
    对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有
次序,变量必须与属性同名,才能取到正确的值。
    let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
    foo // "aaa"
    bar // "bbb"
    
    注意点:
        如果要将一个已经声明的变量用于解构赋值,必须非常小心。
        解构赋值允许等号左边的模式之中,不放置任何变量名。因此,可以写出非常古怪的赋值表达式
        由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构。

字符串解构:
    字符串也可以解构赋值。但是字符串被转换成了一个类似数组的对象。
        const [a, b, c, d, e] = 'hello';
        a // "h"
        b // "e"
        c // "l"
        d // "l"
        e // "o"

数值和布尔值的解构赋值
    解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。
        let {toString: s} = 123;
        s === Number.prototype.toString // true
        let {toString: s} = true;
        s === Boolean.prototype.toString // true
        
字符串、数值、布尔都会先转换成对象在进行解构

函数参数的解构赋值:函数的参数也可以使用解构赋值。
    通常情况下会变成数组或对象
    
圆括号:
    解构赋值虽然很方便,但是解析起来并不容易。对于编译器来说,一个式子到底是模式,还是表达式,没有办法从
一开始就知道,必须解析到(或解析不到)等号才能知道。
    
不能使用圆括号的情况:
    变量声明语句
    函数参数
    赋值语句的模式
字符串中的Unicode表示法
    允许采用`\uxxxx`形式表示一个字符,其中`xxxx`表示字符的 Unicode 码点。
    
字符串的遍历器接口
    `for...of`循环遍历。
    
JSON.stringify() 的改造
    支持Unicode
    
模板字符串:在js中写的HTML标记
    模板字符串(template string)是增强版的字符串,用反引号(``)标识。它可以当作普通字符串使用,也可以
用来定义多行字符串,或者在字符串中嵌入变量。
    用法:``(反引号)、${}
字符串的新增方法:重点为includes()、repeat()
    `String.fromCharCode()`方法,用于从 Unicode 码点返回对应字符,但是这个方法不能识别码点大于`0xFFFF`的字符。
    includes():返回布尔值,表示是否找到了参数字符串。'必须记住'
    startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
    endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
    `repeat`方法返回一个新字符串,表示将原字符串重复`n`次。'截取字符串时使用'
    ES9新增:`trimStart()``trimEnd()`这两个方法。它们的行为与`trim()`一致,`trimStart()`消除字符串头部
的空格,`trimEnd()`消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。
    `at()`方法接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置)。
数值扩展
    二进制和八进制表示法
        二进制和八进制数值的新的写法,分别用前缀`0b`(或`0B`)和`0o`(或`0O`)表示。
        `Number.isFinite()`用来检查一个数值是否为有限的(finite),不是即`Infinity`。如果参数类型不是数值,
`Number.isFinite`一律返回`false``Number.isNaN()`用来检查一个值是否为`NaN``Number.isInteger()`用来判断一个数值是否为整数。
数组扩展:...、from()、of()
    扩展运算符(spread)是三个点(`...`)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
(展开后面的数组)'用于函数参数'
使用:
    数组使用:复制、合并、解构赋值、函数参数
    该运算符主要用于函数调用。
    function push(array, ...items) {
      array.push(...items);
    }
    function add(x, y) {
      return x + y;
    }
    const numbers = [4, 38];
    add(...numbers) // 42
    //参数示例
    function showmsg(...n){}
    showmsg(1,2,3)
    //复制数组
    const a1 = [1, 2];
    // 写法一
    const a2 = [...a1];
    // 写法二
    const [...a2] = a1;

方法:
    `.from()`方法用于将两类对象转为真正的数组
    `.of()`方法用于将一组值,转换为数组
    `copyWithin()`方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组
    `find()`方法,用于找出第一个符合条件的数组成员(括号中是一个函数)
    `fill()`方法使用给定值,填充一个数组。
    `.includes()`方法返回一个布尔值,表示某个数组是否包含给定的值

数组的空位:
    数组的某一个位置没有任何值,比如`Array()`构造函数返回的数组都是空位。
    ES5 对空位的处理,已经很不一致了,大多数情况下会忽略空位。
    ES6 则是明确将空位转为`undefined`
对象的新增方法:
    is():比较两个对象是否相等:严格比较(类型和值)
    `.assign()`方法用于对象的合并(操作的是json对象)