2

原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es5.html

源代码: https://github.com/RobinQu/Programing-In-Javascript/blob/master/chapters/JavaScript_Core/ECMAScript/es5.md

  • 本文需要补充更多例子
  • 本文存在批注,但该网站的Markdown编辑器不支持,所以无法正常展示,请到原文参考。

ES5特性

本文将简单列举ES5的核心特性。ES5多半是扩展原生对象的功能,让ObjectArrayFunction更加强大。其他的特性包括strict mode和一下期待已久的工具方法(例如JSON.parse等)。

ES5的大部分特性1都在主流浏览器(IE9+)中支持了。而且大部分特性,都可以通过Javascript垫片(pollyfill)在运行时环境实现2

Object

所有对象操作中,如果o不是Object类型,将会抛出TypeError异常。

Object.getPrototypeOf(o)3

获取给丁对象的prototype对象。等价于以前的o.__proto__

Object.getOwnPropertyDescriptor(o,p)4

获取对象描述。和Object.defineProperty的相关方法。

Object.getOwnPropertyNames(o)5

获取自有属性名列表。结果列表将不包含原型链上的属性。

Object.create(o,p)6

以给丁对象oprototype创建新的对象并返回。如果对象描述p存在,就使用其定义刚创建的对象(类似调用Object.defineProperties(obj,p))。

Object.defineProperty(o,p,attrs)7

根据规则attrs定义对象o上,属性名为p的属性

Object.defineProperties(o,props)8

根据对象描述props来定义对象o,通常props包含多个属性的定义。

Object.seal(o)9

一个对象在默认状态下,

  1. extensible: 可以添加新的属性
  2. configurable: 可以修改已有属性的特性

Object.seal会改变这两个特性,既不能扩展新属性,也不能修改已有属性的特性。

Object.freeze(o)10

将对象的每个自有自有属性(own property)做如下操作:

  • 属性的writable特性置为false
  • 属性的configurable特性置为false

同时,该对象将不可扩展。可见,该方法比Object.seal更加严格的限制了对一个对象的未来改动。

Object.preventExtensions(o)11

将对象置为不可扩展。

Object.isSealed(o)12

判断一个对象是否sealed

  • 对象的每个自有属性:如果属性的configurable特性为true,则返回false
  • 如果对象为extensible的,那么返回false
  • 不满足以上两个条件,则返回true

Object.isFrozen(o)13

  • 对每个自有属性,如果该属性的configurablewritable特性为true,则返回false
  • 如果对象为extensible的,那么返回false
  • 不满足以上两个条件,则返回true

Object.isExtensible(o)14

判对一个对象是否可扩展。

Object.keys(o)15

返回对象o的所有可枚举(enumerable)属性的名称。

Object.prototype.isPrototypeOf(v)16

检查对象是否是位于给定对象v的原型链上。

Object.prototype.propertyIsEnumerable(p)

检查一个对象上的属性p是否可枚举。

Array

Array.isArray(a)

判断a是否为为真正的Array

Array.prototype.indexOf(e,i)17

使用“严格等”来判断元素e在数组中的索引号。一个可选的搜索起点i

Array.prototype.lastIndexOf(e,i)18

获取元素e在数组中最后出现的位置。起始位置i为可选。

Array.prototype.every(t,c)

测试数组中的每个元素都满足测试t。之后介绍的所有数组遍历方法,都支持一个可选的上下文对象c,可以灵活设置回调函数的执行上下文。传递给数组的测试函数、遍历函数通常有如下签名:

function(item, index, array) {}

Array.prototype.some(t,c)

测试数组中是否有元素满足测试t

Array.prototype.forEach(f,c)

使用函数f遍历每个数组的元素。

Array.prototype.map(f,c)

使用函数f修改每个数组的每个元素。按顺序收集f的每个返回值,并返回这个新组成的数组。

Array.prototype.filter(f,c)

收集通过函数测试f的书组元素。

Array.prototype.reduce(r,v)19

从左向右,使用函数r聚集数组的每个元素。可以可选的制定一个初始值v

Array.prototype.reduceRight(r,v)20

Array.prototype.reduce的从右向左的版本。

String

String.prototpye.trim

去掉字符串两头的空白符和换行符。

字符订阅

//property access on strings
"abc"[2] === "b"

Function

Function.prototype.bind(thisTarget, arg1,...argn)21

为了指定当前函数的上下文对象和运行参数,该函数创建一个新的函数,保留给定的this对象和运行参数。

JSON

JSON.parse(text)

根据rfc462722标准解析JSON文本。

JSON.stringify(obj)

将指定的对象obj序列化为JSON文本。

Date

Date.now

获取当前时间距1970.1.1 00:00:00的毫秒数。

Date.prototype.toISOString

根据ISO860123生成时间字符串。

(new Date).toISOString()
'2014-04-02T08:31:53.049Z'

其他特性

  • 放开了关键字不允许作为属性名的限制24
  • getter和setter函数25

  1. http://kangax.github.io/es5-compat-table/ 

  2. https://github.com/es-shims/es5-shim 

  3. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf 

  4. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor 

  5. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames 

  6. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create 

  7. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty 

  8. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperties 

  9. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/seal 

  10. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/freeze 

  11. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/preventExtensions 

  12. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isSealed 

  13. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isFrozen 

  14. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isExtensible 

  15. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys 

  16. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isPrototypeOf 

  17. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf 

  18. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf 

  19. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce 

  20. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduceRight 

  21. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind 

  22. http://www.ietf.org/rfc/rfc4627.txt 

  23. http://en.wikipedia.org/wiki/ISO_8601 

  24. http://stackoverflow.com/questions/8099270/use-of-reserved-words-in-javascript 

  25. http://ejohn.org/blog/javascript-getters-and-setters/ 


RobinQu
599 声望38 粉丝