ES6学习1

let和const

let和const定义变量会有块级作用域,不存在变量提升,必须先定义后调用否则报错;
暂时性死区:

let a="a";
if(1){
console.log(a);//报错,暂时性死区
let a="b";
}

注意解构赋值和代码块的区别,否则报错

//错误写法
let x="a";
{x}={x:1}//会被理解为代码块

在声明语句时解构尽量不用圆括号,赋值的时候可以

字符串的扩展

新增的几个有用的实例方法:

  1. includes(),startsWith(),endsWit() 都是判断一个字符串是否包含某些字符
  2. repeat(), trimStart(),trimEnd();

数值的扩展

新增的方法:

  1. Number.isFinite(),Number.isNaN();
    与ES5的全局方法isFinite(),isNaN()区别是后者会先调用Number()把值转换为数值,而新方法只对数值有效

数组的扩展

  1. Array.from()将类数组对象转换为数组(Map,Set)
  2. Array.of()将一组值转换为数组;
  3. copyWithin(v1,v2,v3)将指定位置的成员复制到其他位置,会改变自身数组
  4. find(func),findIndex(func)查找出第一个符合条件的数组元素或索引
  5. keys(),values(),entries() 遍历数组,返回的时iterator对象,需for of 在遍历iterator取值
  6. includes() 判断是否包含值;
    7.flat(),flatMap()用于拉平多维数组;
[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]

对象的扩展

  1. 每个对象属性都有一个描述对象,用来控制该属性的行为;
let obj={a:"123"}
Object.getOwnPropertyDescriptor(obj,"a")
Object.getOwnPropertyDescriptors(obj);
  1. es6对象属性遍历的几种方法:
  • for...in :遍历自身和继承的可枚举属性
  • Object.keys() :遍历自身可枚举属性
  • Object.getOwnPropertyNames()返回一个数组,包含对象自身所有属性
  • Object.getOwnProertySymbols()包含对象自身的所有 Symbol 属性的键名
  • Reflect.ownKeys(obj)返回一个数组,包含对象自身的所有键名半酣symbol属性名
  1. super关键字:指向对象的原型对象;
    4.Object.is();判断2个对象是否相等,基本与===一样,也有一下差异:
NaN===NaN  // false
Object.is(NaN,NaN)// true;
+0===-0//true反之...

5.Object.assgin() 对象的合并属于浅拷贝

  1. 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数据结构

  1. 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一样

你可能感兴趣的:(ES6学习1)