let和const
let和const定义变量会有块级作用域,不存在变量提升,必须先定义后调用否则报错;
暂时性死区:
let a="a";
if(1){
console.log(a);//报错,暂时性死区
let a="b";
}
注意解构赋值和代码块的区别,否则报错
//错误写法
let x="a";
{x}={x:1}//会被理解为代码块
在声明语句时解构尽量不用圆括号,赋值的时候可以
字符串的扩展
新增的几个有用的实例方法:
- includes(),startsWith(),endsWit() 都是判断一个字符串是否包含某些字符
- repeat(), trimStart(),trimEnd();
数值的扩展
新增的方法:
- Number.isFinite(),Number.isNaN();
与ES5的全局方法isFinite(),isNaN()区别是后者会先调用Number()把值转换为数值,而新方法只对数值有效
数组的扩展
- Array.from()将类数组对象转换为数组(Map,Set)
- Array.of()将一组值转换为数组;
- copyWithin(v1,v2,v3)将指定位置的成员复制到其他位置,会改变自身数组
- find(func),findIndex(func)查找出第一个符合条件的数组元素或索引
- keys(),values(),entries() 遍历数组,返回的时iterator对象,需for of 在遍历iterator取值
- includes() 判断是否包含值;
7.flat(),flatMap()用于拉平多维数组;
[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]
对象的扩展
- 每个对象属性都有一个描述对象,用来控制该属性的行为;
let obj={a:"123"}
Object.getOwnPropertyDescriptor(obj,"a")
Object.getOwnPropertyDescriptors(obj);
- es6对象属性遍历的几种方法:
- for...in :遍历自身和继承的可枚举属性
- Object.keys() :遍历自身可枚举属性
- Object.getOwnPropertyNames()返回一个数组,包含对象自身所有属性
- Object.getOwnProertySymbols()包含对象自身的所有 Symbol 属性的键名
- Reflect.ownKeys(obj)返回一个数组,包含对象自身的所有键名半酣symbol属性名
- super关键字:指向对象的原型对象;
4.Object.is();判断2个对象是否相等,基本与===一样,也有一下差异:
NaN===NaN // false
Object.is(NaN,NaN)// true;
+0===-0//true反之...
5.Object.assgin() 对象的合并属于浅拷贝
- Object.keys()/values()/entries()返回数组
symbol(独一无二的类字符串值)
es6的七种数据数据类型:undefined,null,boolean,string,number,object,symbol;
Symbol值通过Symbol函数生成:
let sym=Symbol("test");//描述值
typeof sym;//"symbol"
symbol的相同描述值不相等;
let s1=Symbol("test");
let s2=Symbol("test");
s1===s2// false;
symbol值不能与任何值运算,可转换为boolean和string;
使用symbol作为对象属性名时,不能用点运算符;
Symbol.for(str)搜索(创建)并返回一个该描述的symbol值
let t1=Symbol.for("test");
let t2=Symbol.for("test");
t1===t2 // true
Symbol.keyFor(s)返回该symbol值的描述值;
Set和Map数据结构
- Set数据结构是一种类数组,它的成员值都是唯一的。
const s=new Set();
s.add("x");
s.size;// 1
s.delete("x");
s.has("x");
s.clear();
//数组去重
[...new Set(arrs)];
遍历操作:
s.keys(),s.values(),s.entries(),for...of,forEach
2.Map(类对象数据结构,键名可以是任意值)
let o={a:1,b:2};
let m=new Map();
m.set(o,"this is test");
m.get(o)//"this is test"
m.has(o);
m.delete(o);
m.size;
m.clear();
[...m]
遍历同Set一样