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不满足以上两个条件,则返回trueObject.isFrozen(o)对每个自有属性,如果该属性的configurable或writable特性为true,则返回false如果对象为extensible的,那么返回false不满足以上两个条件,则返回trueObject.isExtensible(o)判断一个对象是否可扩展。Object.keys(o)返回对象o的所有可枚举(enumerable)属性的名称Object.prototype.isPrototypeOf(v)检查对象是否是位于给定对象v原型链上。Object.prototype.propertyIsEnumerable(p)检查一个对象上的属性p是否可枚举。
5、Array
Array.isArray(a)判断a是否为真正的ArrayArray.prototype.indexOf(e,i)使用严格等来判断元素e在数组中的素引号,一个可选的搜索起点iArray.prototype.lastIndex(e,i)获取元素e在数组中最后出现的位置,起始位置i为可选。Array.prototype.every(t,c)测试数组中的每个元素都必须满足测试t。一个可选的上下文对象c,t函数通常有如下签名,function t(item,index,array){}Array.prototype.some(t,c)测试数组中是否有元素满足测试tArray.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的毫秒数
#相关资料