ES5
ECMAScript5.0正式版规范发布于2009年,(es4由于各大浏览器厂商没有达成共识,所以草案难产,随后es3.1被改名为ES5发布)ES5纸面化了很多事实上已经在浏览器形成共识的语言规范解析并且增加了对自第三版发布以来的新功能的支持。
ES5多半是扩展原生对象的功能,让Object、Array、Function更加强大,ES5的大部分特性都在主流浏览器(IE9+)中被支持。
下面收集了一些新特性
-
关键字和保留字
es5中新增了一些关键字和保留字,这些关键字不可以用来当作变量名,负责会报错
-
属性特性
ES5允许使用用户定义的属性描述来覆盖给定属性的enumerable、configurable、writable、get、set等属性了。具体方法是使用定义在Object对象上的静态函数。
-
value:值,默认是undefined
-
writable:是否是只读property,默认是false,有点像C#中的const
-
enumerable:是否可以被枚举(for in),默认false
-
configurable:是否可以被删除,默认false
-
get:返回property值的方法,默认是undefined
-
set:为property设置值的方法,默认是undefined
同样可以像C#、Java一样些get/set,不过这两个不能和value、writable同时使用
-
-
严格模式
在代码顶部添加
use strict
来开启严格模式,严格模式下变量必须先申明再使用,
不使用八进制数据,
不使用with语句,
外部不能访问在eval()函数中定义的变量,
不能修改函数内部对象arguments对象,
不能使用delete删除显示声明(var 显示声明)的变量和函数,
修改一个特性[[writable]]为false的属性时,会抛出异常,而不是静默失败,同样的使用delete删除特性[[configurable]]为false的属性时也会抛出异常
4、Object
所有对象操作中,如果o不是Object类型,将会抛出TypeError异常
Object.getPrototypeOf(o)
获取给定对象的prototype对象。等价于以前的o.__proto__
Object.getOwnPropertyDescriptor(o,p)
获取对象描述,和Object.defineProperty的相关方法
Object.getOwnPropertyNames(o)
获取自有属性名列表,结果列表将不包含原型链上的属性。
Object.create(o,p)
以给定对象o为prototype创建新的对象并返回。如果对象描述p存在,就使用其定义刚创建的对象(类似调用Object.defineProperties(obj,p) )。
Object.defineProperty(o,p,attrs)
根据规则attrs定义对象o上,属性名为p的属性
Object.defineProperties(o,props)
根据对象描述props来定义对象o,通常props包含多个属性的定义。
Object.seal(o)
一个对象在默认状态下,
extensible 可以添加新的属性
configurable 可以修改已有属性的特性
Object.freeze(o)
讲对象的每个自有属性做如下操作
属性的writable特性置为false
属性的configurable特性置为false
同时该对象将不可扩展,可见,该方法比Object.seal更加严格的限制了对一个对象的未来改动。
Object.isSealed(o)
判断一个对象是否sealed:
对象的每个自有属性;如果属性的configurable特性为true,则返回false
如果对象为extensible的,那么返回false
不满足以上两个条件,则返回true
Object.isFrozen(o)
对每个自有属性,如果该属性的configurable或writable特性为true,则返回false
如果对象为extensible的,那么返回false
不满足以上两个条件,则返回true
Object.isExtensible(o)
判断一个对象是否可扩展。
Object.keys(o)
返回对象o的所有可枚举(enumerable)属性的名称
Object.prototype.isPrototypeOf(v)
检查对象是否是位于给定对象v原型链上。
Object.prototype.propertyIsEnumerable(p)
检查一个对象上的属性p是否可枚举。
5、Array
Array.isArray(a)
判断a是否为真正的Array
Array.prototype.indexOf(e,i)
使用严格等来判断元素e在数组中的素引号,一个可选的搜索起点i
Array.prototype.lastIndex(e,i)
获取元素e在数组中最后出现的位置,起始位置i为可选。
Array.prototype.every(t,c)
测试数组中的每个元素都必须满足测试t。一个可选的上下文对象c,t函数通常有如下签名,function t(item,index,array){}
Array.prototype.some(t,c)
测试数组中是否有元素满足测试t
Array.prototype.forEach(f,c)
使用函数f遍历每个数组的元素
Array.prototype.map(f,c)
使用函数f修改每个数组的每个元素,按照序收集f的每个返回值,并返回这个新组成的数组
Array.prototype.forEach(f,c)
使用函数f遍历每个数组的元素。
Array.prototype.map(f,c)
使用函数f修改每个数组的每个元素,按顺序收集f的每个返回值,并返回这个新组成的数组。
Array.prototype.filter(f,c)
收集通过函数测试f的数组元素
Array.prototype.reduce(r,v)
从左向右,使用函数r聚集数组的每个元素,可以可选的指定一个初始值v。
Array.prototype.reduceRight(r,v)
Array.prototype.reduce的从右向左的版本。
6、String
String.prototype.trim
去掉字符串两头的空白符和换行符
字符订阅
"abc"[2] === "c"
7、Function
Function.prototype.bind(thisTarget,arg1,...argn)
为了指定当前函数的上下文对象和运行参数,该函数创建一个新的函数,保留给定的this对象和运行参数。
8、JSON
JSON.Parse(text)
解析JSON文本为对象
JSON.stringify(obj)
讲指定对象obj序列化为JSON文本
9、Date
Date.now()
获取当前时间距1970.1.1 00:00:00的毫秒数
#相关资料