1. 解构let [a, b, c] = [1, 2, 3];console.log(a);console.log(b);console.log(c);let arr = [1, 2, 3];let brr = […arr];console.log(brr)let a = [1, 2, 3];let [b, …c] = a;console.log(b)console.log(c)let [x = 1] = undefined;console.log(x)// 默认值只有在解构的值严格等于undefined时才能赋值let [y = 1] = [undefined];console.log(y) // 1let [c = 1] = [null];console.log(c) // nullfunction fn() { console.log(“aaaaa”)}let [x = fn()] = [1];console.log(x) // 1 官方说默认值是惰性求值的 也可以理解为 先执行右边的值是否等于undefined 相等才会执行fn()方法// 默认值也是可以引用变量的 但是那个变量必须已经声明let [a = 1, b = a] = [10];console.log(a) // 10console.log(b) //10 先算右边let [a = b, b = 1] = [, 10]console.log(a) //报错 b is not defined 因为在计算a时b还没有声明console.log(b)let x;({ x} = { x: 1});console.log(x)// 数字和布尔值的结构 只要是解构赋值都会先把右边转换成对象来解析let { s} = 123; //Number.prototype.s 转成对象let { a} = true; //Boolean.prototype.a 转成对象 console.log(s) // undefined console.log(a) // undefined2. 函数参数的解构 function add([x,y]){ console.log(x+y); } add([1,2]) //3 function move({x=0,y=0}={}){ console.log([x,y]) } move({x: 3, y: 8}); // [3, 8] move({x: 3}); // [3, 0] move({}); // [0, 0] move(); // [0, 0]3. 字符串扩展let h = “hello world!“String.includes(str) //判断字符串是否含有该字符 返回布尔值console.log(h.includes(“e”)); //直接返回bolean类型String.startsWidth(str) //判断是否以str开头的字符串 返回布尔值console.log(h.startsWith(“e”)); //判断是不是以该字符串开头String.endsWidth(str) //判断是否以str开头的字符串 返回布尔值console.log(h.endsWith(’ld!’)) //判断是不是以该字符串结尾let a = “x”;String.padStart(num, str) //自动补全 num为在开头补全到num位字符串console.log(a.padStart(2, “abcd”)) // axconsole.log(a.padStart(3, “abcd”)) // abxlet date1 = ‘12’.padStart(10, ‘YYYY-MM-DD’) // “YYYY-MM-12"let date2 = ‘09-12’.padStart(10, ‘YYYY-MM-DD’) // “YYYY-09-12"console.log(date1)console.log(date2)String.padEnd(num, str) //自动补全 num为在结尾补全到num位字符串console.log(a.padEnd(2, “abcd”)) //xaconsole.log(a.padEnd(3, “abcd”)) //xabString.trim() //去除字符串前后空白let a = hello world !;console.log(a)console.log(a.trim()) //去除字符串前后空格4. 数值扩展Number.isNaN(num) //判断是否是非数字 返回布尔值console.log(Number.isNaN(1)) //falseconsole.log(Number.isNaN(“weqewqlalala”-0)) //trueconsole.log(Number.isNaN(true)) //trueNumber.isFinite(num) //判断是否为有限数字 返回布尔值console.log(Number.isFinite(10)) //trueconsole.log(Number.isFinite(NaN)) //false console.log(Number.isFinite(“a”)) //false Number.parseInt(num) //以前挂载在window上现在挂载在Number对象上(不是四舍五入 而是去掉小数点后面所有小数)console.log(Number.parseInt(1.22222)) // 1console.log(Number.parseInt(1.9999)) // 1 console.log(Number.parseInt(“aaaa”)) // NaNNumber.parseFloat(num) //以前挂载在window上现在挂载在Number对象上console.log(Number.parseFloat(“1.22a”)) // 1.22console.log(Number.parseFloat(“aaaaa”)) //NaNNumber.isInteger(num) //判断数字是否为整数 返回布尔值console.log(Number.isInteger(10)) //trueconsole.log(Number.isInteger(10.1)) //falseconsole.log(Number.isInteger(NaN)) //falseMath.trunc(num) //去掉小数 返回整数 (个人感觉与Number.parseInt()差不多,没什么卵用)console.log(Math.trunc(10.333)) // 10console.log(Math.trunc(10)) // 10console.log(Math.trunc(NaN)) // NaNconsole.log(Math.trunc(“a”)) // NaNconsole.log(Number.parseInt(10.333)) // 10console.log(Number.parseInt(10)) // 10console.log(Number.parseInt(NaN)) // NaNconsole.log(Number.parseInt(“a”)) // NaNMath.sign(num) //判断数字是正数,负数,0 正数返回 1 负数 返回 -1 0返回 0 -0返回 -0 console.log(Math.sign(10)) // 1console.log(Math.sign(-10)) // -1console.log(Math.sign(0)) //0console.log(Math.sign(-0)) // -0