重要版本
- es5 : 09年发布 - es6 : 15年发布, ECMA2015 - es7 : 16年发布, ECMA2016 (微变)
ES5部分新增内容
严格模式 - use strict声明 - 必须用var定义变量 - 禁止自定义函数this指向window - eval创建自己的作用域,避免函数不安全 - 对象不允许有重名的属性
JSON对象 - JSON.stringify(obj/arr) //对象(数组)变字符 - JSON.parse(json) //字符变对象(数组)
Object扩展
Object常用的两个静态方法: - Object.create(prototype,[descriptors]) - 以对象为原型对象创建新对象,并扩展可以描述的属性 - value: 指定值 - writable: false //是否可修改 - configurable: false //是否可删 - enumerable: false //是否可列举 - Object.defineProperties(Object,descriptors) - 指定对象扩展多个属性 - get //获取这个属性时惰性建立属性值 - set //修改这个属性时触发的函数(外部修改无效) 对象本身的两个方法: - get propertyName(){} //获取propertyName时惰性建立属性值 - set propertyName(data){} //修改时触发的函数(外部修改无效)
Array扩展
Array.prototype.indexOf(value) Array.prototype.lastIndexOf(value) Array.prototype.forEach(function(item,index){}) //同步遍历 Array.prototype.map(function(item,index){}) Array.prototype.filter(function(item,index){})
Function扩展
-bind //改变返回 -call apply//改变执行(js)
ES6部分新增内容
let和const - let - 块级作用域有效 - 不可重复定义 - 不会变量提升 - 特别地,循环定义时let仅第一次有效,不同于var为全局变量 - const - 定义常量 - 其余同let