ES6-基础篇

198 阅读3分钟

let,var,const

  • let和var的区别:
    • let 同一作用域下不能重复声明,var 可以重复声明
    • let 作用域是全局作用域和块级作用域{},var 作用域是全局作用域和函数作用域
    • let 不会进行预解析(即无法变量提升),var 可以预解析
  • const
    • 不能重新赋值
    • 不能重复使用
    • 作用域是块级作用域
    • 不会被预解析(无法变量提升)

js的数据类型的转换

  • 转换为布尔值(调用Boolean()方法)
    • ±0,NaN,空字符串,undefined,null为false;其他均为true
  • 转换为数字(调用Number()、parseInt()和parseFloat()方法)
    • '1' ==> 1、'a' ==> NaN、'a1' ==> NaN 、'1a' ==> NaN(parseInt,parseFloat结果为1)
    • [] ==> 0、存在一个元素且为数字结果为数字,存在一个元素且非数字结果参考字符串转数字
    • null Number(null)==> 0 、parseInt(null)==> NaN 、parseFloat(null)==> NaN
    • 除了数组的引用类型结果为NaN
  • 转换为字符串(调用.toString()或者String()方法)

解构赋值

//对象的解构赋值:
let obj = {a: 1,b: 2,c: 4,d: 3};
let {a,b,c} = obj;
console.log(a,b,c);     //1 2 4

//数组的结构赋值:
let a = 0;
let b = 1;
// 怎么快速交互 a,b的值
[a,b] = [b,a];

//字符串的结构赋值:
let str = "abc";
let [e,f] = str;
console.log(e,f);       //a b

展开运算符

//数组展开:
let arr = [1,2,3,4];
let arr2 = ["a","b",...arr,"c","d"];
console.log(arr2);      //["a","b",1,2,3,4,"c","d"];

// 剩余参数
let [a,b,...c] = arr;
console.log(a,b,c);     //1 2 [3,4]

//对象展开(只能复制一层)
let obj = {a:1,b:2};
let obj2 = {...obj,c:3,d:4};
console.log(obj2);      //{a:1,b:2,c:3,d:4}
let {a,b,...c} = obj2;
console.log(a,b,c);     //1 2 {c:3,d:4}

Set 对象

将类数组,数组转化为无重复值的数组

  • 属性:size(类似于数组的length属性)
  • 方法:clear() , delete() , get() , has() , add()
let arr = [2,1,2,1,3,4,4,5,1]
let s = new Set(arr);
arr = [...s];
console.log(arr);   //[2,1,3,4,5]
clear()     //返回值:undefined
delete()    //返回值:true|| false 是否删除成功(没有这个值才会出现删除不成功)
get()       //返回值:true|| false 是否得到这个值
has()       //返回值:true|| false 是否包含这个值
s.add(5).add(6).add(7);
add()       //返回值:set 对象本身

Map 对象

  • 属性:size(类似于数组的length属性)
  • 方法:clear() , delete() , get() , has() , set()
let arr = [    ["a",1],
    ["b",2],
    ["c",3]
];
let m = new Map(arr);
console.log(m);   //{'a':1,'b':2,'c':3}
clear()     //返回值:undefined
delete()    //返回值:true|| false 是否删除成功(没有这个值才会出现删除不成功)
get()       //返回值:true|| false 是否得到这个值
has()       //返回值:true|| false 是否包含这个值
m.set('a',5).set('d',6);
set()       //返回值:map 对象本身

函数新增扩展

  • 箭头函数
    • 箭头函数没有 arguments
    • 箭头函数本身没有 this ,调用箭头函数的 this 时,指向是其声明时 所在的作用域的this;
//rest 参数设置:
let fn = (a,b,...arg)=>{
    console.log(a,b,arg);
}
//参数默认值设置
let f = (a=10,b=2)=>{
    return a*b;
}
//

新增数组扩展

新增字符串扩展

新增对象扩展

  • 属性简洁表示法
  • 属性名表达式
let name = "小明";    
let obj = {
    c(){
        console.log("a");
    },
    [name]: 111
};

Object.assign

Object Object.assign(target, ...sources)

  • 将所有可枚举属性的值从一个或多个源对象复制到目标对象

  • 参数:

    • target:目标对象
    • sources:源对象
  • 返回值:目标对象

Object.is

Boolean Object.is(value1, value2)

  • 判断两个值是否是相同的值。

  • 规则:

    • 两个值都是 undefined
    • 两个值都是 null
    • 两个值都是 true 或者都是 false
    • 两个值是由相同个数的字符按照相同的顺序组成的字符串
    • 两个值指向同一个对象
    • 两个值都是数字并且
      • 都是正零 +0
      • 都是负零 -0
      • 都是 NaN
  • 返回值:true、false