1.let命令
a. 块级声明命令,只在当前代码块有效
b. 不存在变量提升,只有在声明后才可调用
c. 暂时性死区,变量在没有声明完成前调用
d. 不允许重复声明相同的变量
// IIFE 写法
(function () {
var tmp = ...;
...
}());
// 块级作用域写法
{
let tmp = ...;
...
}
const命令
大部分同1,指向一个固定的内存地址,值是可变的,如果想保存数据的一致性,使用Object.freeze()将对象冻结。import命令
class命令
ES5 的继承,实质是先创造子类的实例对象this,然后再将父类的方法添加到this上面(Parent.apply(this))。ES6 的继承机制完全不同,实质是先将父类实例对象的属性和方法,加到this上面(所以必须先调用super方法),然后再用子类的构造函数修改this。变量的解构赋值 含有Iterator 接口的数据结构皆可
数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。模板字符串
let a = 'weil'
console.log(`我是${a}`) // 我是weil
- 标签模板
alert`hello` // 等同于 alert('hello')
新增字符串方法
includes() 判断字符串中是否包含 某个字符 返回 boolean
startsWith() 判断字符串开头是否为 某个字符 返回boolean
endsWith() 判断字符串是否以某个字符结尾 返回boolean字符串长度补全功能 es7
padStart(str, length) str填入的字符串,length字符串长度不足单位(前面补足)
padEnd(str, length) str填入的字符串,length字符串长度不足单位 (结尾补足)消除空格
trimStart() 消除字符串开头空格
trimEnd() 消除字符串结尾空格正则表达式
先行断言 /\x(?=y)/.exec(str)
后行断言 /\x(?!y)/.exec(str)二进制和八进制
二进制:0b(0B)
八进制:0o(0O)数值判断
Number.isFinite() 数值是否有限
Number.isNaN() 参数类型不是NaN,Number.isNaN一律返回false
Number.isInterger() 判断数值是否为整数允许为函数参数设置默认值
函数的length属性,将返回没有指定默认值的参数个数。也就是说,指定了默认值后,length属性将失真。
rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。
箭头函数 改变this指向
箭头函数有几个使用注意点。
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
如果所有函数都是尾调用,那么完全可以做到每次执行时,调用帧只有一项,这将大大节省内存。这就是“尾调用优化”的意义。
尾递归,同尾调用只存在一个调用帧,所以永远不会发生“栈溢出”错误,相对节省内存。
扩展运算符 ...
Symbol() 将变量或者函数私有化
WeakSet() 和 WeakMap() 使用场景 储存 DOM 节点,而不用担心这些节点从文档移除时,会引发内存泄漏
let、const、class声明的全局变量不与顶层属性挂钩(globalThis)