美文网首页
又看es6...

又看es6...

作者: shanshanfei | 来源:发表于2018-02-26 14:31 被阅读0次

1.for循环的循环变量区和内容区是2个作用域

for(let i=0;i<10;i++){
    let i = 'abc';
    console.log(i);//abc  此处的i与循环体中的i是2个作用域
}

2.let+const

  • 暂时性死区:只要定义了该变量,就不再受外部的影响
  • 不存在变量提升
  • 不能重复声明
  • const在声明的时候就要初始化,一经初始化就不能再改变
  • const实际是指向的内存地址不可变:如指向一个对象,对象的属性是可以修改的
  • let const声明的全局变量不再是顶层对象window的属性,之前的var function声明的全局变量仍是window的属性

3.块级作用域
4.Object.freeze({}) 冻结某个对象,该对象不能再添加、修改属性
5.解构赋值:比较有用的就是对象、数组+函数参数的结构赋值

  • 对象的解构赋值:

    let { foo: baz } = { foo: 'aaa', bar: 'bbb' };//重新起名
    baz // "aaa"
    
  • 解构赋值还是不要用圆括号了吧,那么难受:总之就是解构赋值里 声明语句里与模式不能加圆括号
    6.字符的扩展:有必要扩展一下,参见:字符、字节、编码
    最有用的当算 模板字符串了`aaaa${变量或者表达式}bbbb`
    str.length返回的是字符的字节编码的长度,非字符串的长度。
    for循环是以字符的字节长度遍历,for...of循环以字符的长度进行遍历。
    字符串补全功能 可以用于时间的显示上,比如2:00点,显示成02:00,可以用:'2'.padStart(2, '0');
    7.函数的扩展
    最重要:箭头函数

  • 箭头函数不能做构造函数和generator函数

  • 箭头函数没有自己的this,它的this其实是外层作用域的this

  • 箭头函数的this是定义时的this,而不是使用时的this

  • 箭头函数内部不能使用arguments对象,但可以使用rest对象
    8.数组的扩展
    扩展运算符...

  • ...应用于数组,相当于将数组转为逗号分隔的值
    9.proxy 对目标对象进行筛选拦截,改变默认行为。如get、set、getPrototypeOf等近13种行为。
    Reflect与proxy功能类似,只不过是以函数的形式进行调用
    Reflect.get(target, keyName)
    10.对象的扩展:

Object.is(a,b) 用来比较两个值严格相等(类似===)不会做类型转换,但是 :
-0 === +0;//true
Object.is(-0, +0);//false
NaN === NaN;//false
Object.is(NaN, NaN) // true


让某个对象成为另外一个对象的原型,方法有:
a. es5的方法 var obj = Object.create(prototypeObj);
b. es6的方法 Object.setPrototype(obj, prototypeObj);
c. obj.prototype = prototypeObj;

11.Iterator接口

调用Iterator接口的地方:

    数组、Set数据的结构赋值
    扩展运算符...
    for...of  Array.from()等
    yield * [2, 3, 4]
  1. Set & Map
const a = new Set([1, 2]);
a.size
a.add(2);
a.delete(2);
a.has(4);
a.clear();
// 去除数组的重复成员
[...new Set(array)]
[...new Set('ababbc')].join('')
// "abc"

// Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致
// WeakSet 与Set类似,但是成员只能是对象。

相关文章

网友评论

      本文标题:又看es6...

      本文链接:https://www.haomeiwen.com/subject/oviexftx.html