首页 > 代码库 > ECMAScript5

ECMAScript5

http://yanhaijing.com/es5/#1

1.一致性

2.语言概述

3.未来保留字

4.Object的内部属性和方法

5.引用

 

1.一致性

1.描述:所有类型、值、对象、属性、函数、程序语法和语义。

2.允许提供超出本规范描述的额外类型、值、对象、属性、函数。

 

2.语言概述

1.内置对象包括 全局对象 (global object) ,Object 对象 ,Function 对象 ,Array 对象 ,String 对象 ,Boolean 对象 ,Number 对象 ,Math 对象 ,Date 对象 ,RegExp 对象 ,JSON 对象,和 Error 对象: Error ,EvalError ,RangeError ,ReferenceError ,SyntaxError ,TypeError ,URIError 。

2. ECMAScript 中还定义一组内置运算符 (operators)。ECMAScript 运算符包括 一元运算符 ,乘法运算符 ,加法运算符 ,按位移位运算符 ,关系运算符 ,相等运算符 ,二进制位运算符 ,二进制逻辑运算符 ,赋值运算符 ,逗号运算符。

3.每个构造器是一个拥有名为“prototype”的属性的函数。此属性用于实现 基于原型的继承 和 共享属性 。

3.未来保留字

1.class enum extends super const export import implements let private public yield interface package protected static

 

4.Object的内部属性和方法

 

内部属性取值范围说明
[[Prototype]]Object 或 Null此对象的原型
[[Class]]String说明规范定义的对象分类的一个字符串值
[[Extensible]]Boolean如果是 true,可以向对象添加自身属性。
[[Get]]SpecOp(propertyName) → any返回命名属性的值
[[GetOwnProperty]]SpecOp (propertyName) → Undefined 或 Property Descriptor返回此对象的自身命名属性的属性描述,如果不存在返回 undefined
[[GetProperty]]SpecOp (propertyName) → Undefined 或 Property Descriptor返回此对象的完全填入的自身命名属性的属性描述,如果不存在返回 undefined
[[Put]]SpecOp (propertyName, any, Boolean)将指定命名属性设为第二个参数的值。flog 控制失败处理。
[[CanPut]]SpecOp (propertyName) → Boolean返回一个 Boolean 值,说明是否可以在 PropertyName 上执行 [[Put]] 操作。
[[HasProperty]]SpecOp (propertyName) → Boolean返回一个 Boolean 值,说明对象是否含有给定名称的属性。
[[Delete]]SpecOp (propertyName, Boolean) → Boolean从对象上删除指定的自身命名属性。flog 控制失败处理。
[[DefaultValue]]SpecOp (Hint) → primitiveHint 是一个字符串。返回对象的默认值
[[DefineOwnProperty]]SpecOp (propertyName, PropertyDescriptor, Boolean) → Boolean创建或修改自身命名属性为拥有属性描述里描述的状态。flog 控制失败处理。

 5.引用

6.

Arguments 对象

Arguments 对象通过调用抽象方法 CreateArgumentsObject 创建,调用时将以下参数传入:func, names, args, env, strict。将要执行的函数对象作为 func 参数,将该函数的所有形参名加入一个 List 列表,作为 names 参数,将所有传给内部方法 [[Call]] 的实际参数,作为 args 参数,将该函数代码的环境变量作为 env 参数,将该函数代码是否为严格代码作为strict 参数。

7.

数组原型对象的属性

7.1

Array.prototype.constructor

Array.prototype.constructor 的初始值是标准内置 Array 构造器。

7.2

Array.prototype.toString ( )

 当调用 toString 方法,采用如下步骤:

  1. 令 array 为用 this 值调用 ToObject 的结果。
  2. 令 func 为以 "join" 作为参数调用 array 的 [[Get]] 内部方法的结果。
  3. 如果 IsCallable(func) 是 false, 则令 func 为标准内置方法 Object.prototype.toString (15.2.4.2)。
  4. 提供 array 作为 this 值并以空参数列表调用 func 的 [[Call]] 内部方法,返回结果。

 toString 函数被有意设计成通用的;它的 this 值并非必须是数组对象。因此,它可以作为方法转移到其他类型的对象中。一个宿主对象是否可以正确应用这个 toString 函数是依赖于实现的。

7.3

Array.prototype.toLocaleString ( )

7.4

Array.prototype.concat ( [ item1 [ , item2 [ , … ] ] ] )

 当以零或更多个参数 item1, item2, 等等,调用 concat 方法,返回一个数组,这个数组包含对象的数组元素和后面跟着的每个参数按照顺序组成的数组元素。

7.5

Array.prototype.join (separator)

 数组元素先被转换为字符串,再将这些字符串用 separator 分割连接在一起。如果没提供分隔符,将一个逗号用作分隔符。

7.6

Array.prototype.pop ( )

 删除并返回数组的最后一个元素。

7.7

Array.prototype.push ( [ item1 [ , item2 [ , … ] ] ] )

将参数以他们出现的顺序追加到数组末尾。数组的新 length 属性值会作为调用的结果返回。

7.8

Array.prototype.reverse ( )

 重新排列数组元素,以翻转它们的顺序。对象会被当做调用的结果返回。

7.9

Array.prototype.shift ( )

删除并返回数组的第一个元素。

7.10

Array.prototype.slice (start, end)

ice 方法需要 start 和 end 两个参数,返回一个数组,这个数组包含从第 start 个元素到 -- 但不包括 -- 第 end 个元素 ( 或如果 end 是 undefined 就到数组末尾 )。如果 start 为负,它会被当做是 length+start,这里的 length 是数组长度。如果 end 为负,它会被当做是 length+end,这里的 length 是数组长度。

7.11

Array.prototype.sort (comparefn)

给 this 数组的元素 排序。排序不一定是稳定的(相等的元素们不一定按照他们原来的顺序排列)。如果 comparefn 不是 undefined,它就必须是个函数,这个函数接受两个参数 x 和 y,如果 x < y 返回一个负值,如果 x = y 返回零,如果 x > y 返回一个正值。

7.12

Array.prototype.splice (start, deleteCount [ , item1 [ , item2 [ , … ] ] ] )

 当以两个或更多参数 start, deleteCount 和 ( 可选的 ) item1, item2, 等等,调用 splice 方法,从数组索引 start 开始的 deleteCount 个数组元素会被替换为参数 item1, item2, 等等。返回一个包含参数元素(如果有)的数组。

7.13

Array.prototype.unshift ( [ item1 [ , item2 [ , … ] ] ] )

将参数们插入到数组的开始位置,它们在数组中的顺序与它们出现在参数列表中的顺序相同。

7.14

Array.prototype.indexOf ( searchElement [ , fromIndex ] )

 indexOf 按照索引的升序比较 searchElement 和数组里的元素们,它使用内部的严格相等比较算法 (11.9.6),如果找到一个或更多这样的位置,返回这些位置中第一个索引;否则返回 -1。

 可选的第二个参数 fromIndex 默认是 0(即搜索整个数组)。如果它大于或等于数组长度,返回 -1,即不会搜索数组。如果它是负的,就把它当作从数组末尾到计算后的 fromIndex 的偏移量。如果计算后的索引小于 0,就搜索整个数组。

7.15

Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )

 lastIndexOf 按照索引的降序比较 searchElement 和数组里的元素们,它使用内部的严格相等比较算法 (11.9.6),如果找到一个或更多这样的位置,返回这些位置中最后一个索引;否则返回 -1。

 可选的第二个参数 fromIndex 默认是数组的长度减一(即搜索整个数组)。如果它大于或等于数组长度,将会搜索整个数组。如果它是负的,就把它当作从数组末尾到计算后的 fromIndex 的偏移量。如果计算后的索引小于 0,返回 -1。

7.16

Array.prototype.every ( callbackfn [ , thisArg ] )

 callbackfn 应该是个函数,它接受三个参数并返回一个可转换为布尔值 true 和 false 的值。every 按照索引的升序,对数组里存在的每个元素调用一次 callbackfn,直到他找到一个使 callbackfn 返回 false 的元素。如果找到这样的元素,every 马上返回 false,否则如果对所有元素 callbackfn 都返回 true,every 将返回 true。callbackfn 只被数组里实际存在的元素调用;它不会被缺少的元素调用。

 如果提供了一个 thisArg 参数,它会被当作 this 值传给每个 callbackfn 调用。如果没提供它,用 undefined 替代。

 调用 callbackfn 时将传入三个参数:元素的值,元素的索引,和遍历的对象。

 对 every 的调用不直接更改对象,但是对 callbackfn 的调用可能更改对象。

 every 处理的元素范围是在首次调用 callbackfn 之前设定的。在 every 调用开始后追加到数组里的元素们不会被 callbackfn 访问。如果更改以存在数组元素,every 访问这些元素时的值会传给 callbackfn;在 every 调用开始后删除的和之前被访问过的元素们是不访问的。every 的行为就像数学量词“所有(for all)”。特别的,对一个空数组,它返回 true。

7.17

Array.prototype.some ( callbackfn [ , thisArg ] )

 callbackfn 应该是个函数,它接受三个参数并返回一个可转换为布尔值 true 和 false 的值。some 按照索引的升序,对数组里存在的每个元素调用一次 callbackfn,直到他找到一个使 callbackfn 返回 true 的元素。如果找到这样的元素,some 马上返回 true,否则,some 返回 false。callbackfn 只被实际存在的数组元素调用;它不会被缺少的数组元素调用。

 如果提供了一个 thisArg 参数,它会被当作 this 值传给每个 callbackfn 调用。如果没提供它,用 undefined 替代。

 调用 callbackfn 时将传入三个参数:元素的值,元素的索引,和遍历的对象。

 对 some 的调用不直接更改对象,但是对 callbackfn 的调用可能更改对象。

 some 处理的元素范围是在首次调用 callbackfn 之前设定的。在 some 调用开始后追加到数组里的元素们不会被 callbackfn 访问。如果更改以存在数组元素,some 访问这些元素时的值会传给 callbackfn;在 some 调用开始后删除的和之前被访问过的元素们是不访问的。some 的行为就像数学量词“存在(exists)”。特别的,对一个空数组,它返回 false。

7.18

Array.prototype.forEach ( callbackfn [ , thisArg ] )

 callbackfn 应该是个函数,它接受三个参数。forEach 按照索引的升序,对数组里存在的每个元素调用一次 callbackfn。callbackfn 只被实际存在的数组元素调用;它不会被缺少的数组元素调用。

 如果提供了一个 thisArg 参数,它会被当作 this 值传给每个 callbackfn 调用。如果没提供它,用 undefined 替代。

 调用 callbackfn 时将传入三个参数:元素的值,元素的索引,和遍历的对象。

 对 forEach 的调用不直接更改对象,但是对 callbackfn 的调用可能更改对象。

 forEach 处理的元素范围是在首次调用 callbackfn 之前设定的。在 forEach 调用开始后追加到数组里的元素们不会被 callbackfn 访问。如果更改以存在数组元素,forEach 访问这些元素时的值会传给 callbackfn;在 forEach 调用开始后删除的和之前被访问过的元素们是不访问的。

7.19

Array.prototype.map ( callbackfn [ , thisArg ] )

 callbackfn 应该是个函数,它接受三个参数。map 按照索引的升序,对数组里存在的每个元素调用一次 callbackfn,并用结果构造一个新数组。callbackfn 只被实际存在的数组元素调用;它不会被缺少的数组元素调用。

 如果提供了一个 thisArg 参数,它会被当作 this 值传给每个 callbackfn 调用。如果没提供它,用 undefined 替代。

 调用 callbackfn 时将传入三个参数:元素的值,元素的索引,和遍历的对象。

 对 map 的调用不直接更改对象,但是对 callbackfn 的调用可能更改对象。

 map 处理的元素范围是在首次调用 callbackfn 之前设定的。在 map 调用开始后追加到数组里的元素们不会被 callbackfn 访问。如果更改以存在数组元素,map 访问这些元素时的值会传给 callbackfn;在 map 调用开始后删除的和之前被访问过的元素们是不访问的。

7.20

Array.prototype.filter ( callbackfn [ , thisArg ] )

 callbackfn 应该是个函数,它接受三个参数并返回一个可转换为布尔值 true 和 false 的值。filter 按照索引的升序,对数组里存在的每个元素调用一次 callbackfn,并用使 callbackfn 返回 true 的所有值构造一个新数组。callbackfn 只被实际存在的数组元素调用;它不会被缺少的数组元素调用。

 如果提供了一个 thisArg 参数,它会被当作 this 值传给每个 callbackfn 调用。如果没提供它,用 undefined 替代。

 调用 callbackfn 时将传入三个参数:元素的值,元素的索引,和遍历的对象。

 对 filter 的调用不直接更改对象,但是对 callbackfn 的调用可能更改对象。

 filter 处理的元素范围是在首次调用 callbackfn 之前设定的。在 filter 调用开始后追加到数组里的元素们不会被 callbackfn 访问。如果更改以存在数组元素,filter 访问这些元素时的值会传给 callbackfn;在 filter 调用开始后删除的和之前被访问过的元素们是不访问的。

7.21

Array.prototype.reduce ( callbackfn [ , initialValue ] )

Array.prototype.reduceRight ( callbackfn [ , initialValue ] )

8

String 对象

8.1

String.prototype

String.prototype 的初始值是标准内置的字符串原型对象 (15.5.4)。

 这个属性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

8.2

String.fromCharCode ( [ char0 [ , char1 [ , … ] ] ] )

 返回一个字符串值,包含的字符数与参数数目相同。每个参数指定返回字符串中的一个字符,也就是说第一个参数第一个字符,以此类推(从左到右)。一个参数转换为一个字符,通过先应用 ToUint16 (9.7) 操作,再将返回的 16 位整数看作字符的代码单元值。如果没提供参数,返回空字符串。

 fromCharCode 函数的 length 属性是 1。

8.3

String.prototype.constructor

String.prototype.constructor 的初始值是内置 String 构造器。

8.4

String.prototype.toString ( )

返回 this 字符串值。(注,对于一个 String 对象,toString 方法和 valueOf 方法返回相同值。)

 toString 函数是非通用的 ; 如果它的 this 值不是一个字符串或字符串对象,则抛出一个 TypeError 异常。因此它不能作为方法转移到其他类型对象上。

8.5

String.prototype.valueOf ( )

 返回 this 字符串值。

 valueOf 函数是非通用的 ; 如果它的 this 值不是一个字符串或字符串对象,则抛出一个 TypeError 异常。因此它不能作为方法转移到其他类型对象上。

8.6

String.prototype.charAt (pos)

将 this 对象转换为一个字符串,返回包含了这个字符串 pos 位置的字符的字符串。如果那个位置没有字符,返回空字符串。返回结果是个字符串值,不是字符串对象。

 如果 pos 是一个数字类型的整数值,则 x.charAt( pos) 与 x.substring( pos, pos+1) 的结果相等。

8.7

String.prototype.charCodeAt (pos)

 将 this 对象转换为一个字符串,返回一个代表这个字符串 pos 位置字符的代码单元值的数字(小于 216 的非负整数)。如果那个位置没有字符,返回 NaN。

8.8

String.prototype.concat ( [ string1 [ , string2 [ , … ] ] ] )

当用一个或更多参数 string1, string2, 等等 , 调用 concat 方法 , 它返回一个包含了 --this 对象(转换为一个字符串)中的字符们和后面跟着的每个 string1, string2, 等等,(每个参数都转换为字符串)里的字符们 -- 的字符串。返回结果是一个字符串值,不是一个字符串对象。

8.9

String.prototype.indexOf (searchString, position)

 将 this 对象转换为一个字符串,如果 searchString 在这个字符串里大于或等于 position 的位置中的一个或多个位置使它呈现为字符串的子串,那么返回这些位置中最小的索引;否则返回 -1。如果 position 是 undefined,就认为它是 0,以搜索整个字符串。

 8.10

String.prototype.lastIndexOf (searchString, position)

 将 this 对象转换为一个字符串,如果 searchString 在这个字符串里小于或等于 position 的位置中的一个或多个位置使它呈现为字符串的子串,那么返回这些位置中最大的索引;否则返回 -1。如果 position 是 undefined,就认为它是字符串值的长度,以搜索整个字符串。

8.11

String.prototype.localeCompare (that)

当以一个参数 that 来调用 localeCompare 方法,它返回一个非 NaN 数字值,这个数字值反应了对 this 值(转换为字符串)和 that 值(转换为字符串)进行语言环境敏感的字符串比较的结果。两个字符串 S 和 That 用实现定义的一种方式进行比较。比较结果是为了按照系统默认语言环境指定的排列顺序来排列字符串,根据按照排列顺序 S 是在 That 前面,相同,还是 S 在 That 后面,结果分别是负数,零,正数。

8.12

String.prototype.match (regexp)

8.13

String.prototype.replace (searchValue, replaceValue)

8.14

String.prototype.search (regexp)

8.15

String.prototype.slice (start, end)

slice 方法需要两个参数 start 和 end,将 this 对象转换为一个字符串,返回这个字符串中从 start 位置的字符到(但不包含)end 位置的字符的一个子字符串(或如果 end 是 undefined,就直接到字符串尾部)。用 sourceLength 表示字符串长度,如果 start 是负数,就把它看做是 sourceLength+start;如果 end 是负数,就把它看做是 sourceLength+end。返回结果是一个字符串值,不是字符串对象。

8.16

String.prototype.split (separator, limit)

8.17

String.prototype.substring (start, end)

 substring 方法需要两个参数 start 和 end,将 this 对象转换为一个字符串,返回包含 -- 在转换结果字符串中从 start 位置字符一直到(但不包括)end 位置的字符(或如果 end 是 undefined,就到字符串末尾)-- 的一个子串。返回结果是字符串值,不是字符串对象。

8.18

String.prototype.toLowerCase ( )

8.19

String.prototype.toLocaleLowerCase ( )

8.20

String.prototype.toUpperCase ( )

8.21

String.prototype.toLocaleUpperCase ( )

8.22

String.prototype.trim ( )

9.

Math 对象

9.1

Math 对象的值属性

9.1.1

E

自然对数的底数 e 的数字值,约为 2.7182818284590452354。

 此属性有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 。

9.1.2

LN10

 10 的自然对数的数字值,约为 2.302585092994046。

9.1.3

LOG2E

LOG10E

PI

SQRT1_2

 ½ 的平方根的数字值,约为 0.707106781186547

SQRT2

 2 的平方根的数字值,约为 1.4142135623730951。

9.2

Math 对象的函数属性

9.2.1

abs (x)

返回 x 的绝对值。

9.2.2

acos (x)

返回 x 的反余弦的依赖实现的近似值。结果以弧度形式表示,范围是 +0 到 +π。

9.2.3

asin (x)

返回 x 的反正弦的依赖实现的近似值。结果以弧度形式表示,范围是−π/2 到 +π/2。

9.2.4

atan (x)

返回 x 的反正切的依赖实现的近似值。结果以弧度形式表示,范围是−π/2 到 +π/2。

9.2.5

atan2 (y, x)

返回 -- 参数 y 和 x 的商 y/x-- 的反正切的依赖实现的近似值,y 和 x 的符号用于确定返回值的象限。注:命名为 y 的参数为第一个,命名为 x 的参数为第二个,这是有意,是反正切函数俩参数的惯例。结果以弧度形式表示,范围是−π到 +π。

9.2.6

ceil (x)

返回不小于 x 的且为数学整数的最小 ( 接近−∞) 数字值。如果 x 已是整数,则返回 x。

9.2.7

cos (x)

返回 x 的余弦的依赖实现的近似值。参数被当做是弧度值。

9.2.8

exp (x)

返回 x 的指数的依赖实现的近似值(e 为 x 次方,e 为自然对数的底)。

9.2.9

floor (x)

返回不大于 x 的且为数学整数的最大 ( 接近 +∞) 数字值。如果 x 已是整数,则返回 x。

9.2.10

log (x)

 返回 x 的自然对数的依赖于实现的近似值 .

9.2.11

max ( [ value1 [ , value2 [ , … ] ] ] )

给定零或多个参数,对每个参数调用 ToNumber 并返回调用结果里的最大值。

9.2.12

min ( [ value1 [ , value2 [ , … ] ] ] )

给定零或多个参数,对每个参数调用 ToNumber 并返回调用结果里的最小值。

9.2.13

pow (x, y)

返回 x 的 y 次方的依赖于实现的近似值 .

9.2.14

random ( )

回一个大于或等于 0 但小于 1 的符号为正的数字值,选择随机或在该范围内近似均匀分布的伪随机,用一个依赖与实现的算法或策略。此函数不需要参数。

9.2.15

round (x)

 返回最接近 x 且为数学整数的数字值。如果两个整数同等接近 x,则结果是接近 +∞的数字值 。如果 x 已是整数,则返回 x。

9.2.16

sin (x)

 返回 x 的正弦的依赖实现的近似值。参数被当做是弧度值。

9.2.17

sqrt (x)

返回 x 的平方根的依赖实现的近似值。

9.2.18

tan (x)

返回 x 的正切的依赖实现的近似值。参数被当做是弧度值。

10

RegExp ( 正则表达式 ) 对象

11

JSON 语法

11.1

parse ( text [ , reviver ] )

parse函数解析一段JSON文本(JSON格式字符串),生成一个ECMAScript值。JSON格式是ECMAScript直接量 的受限模式。JSON对象可以被理解为ECMAScript对象。JSON数组可以被理解为ECMAScript数组。JSON字符串、数字、布尔值以及null可以被认为是ECMAScript字符串、数字、布尔值以及null。JSON使用受限更多的空白字符集合,并且允许Unicode码点U+2028和U+2029直接出现在JSONString直接量当中而无需使用转义序列。

可选参数reviver是一个接受两个参数的函数(key和value)。它可以过滤和转换结果。它在每个key/value对产生时被调用,它的返回值可以用于替代原本的值。如果它原样返回接收到的,那么结构不会被改变。如果它返回undefined,那么属性会被从结果中删除。

11.2

stringify ( value [ , replacer [ , space ] ] )

 stringify函数返回一个JSON格式的字符串,用以表示一个ECMAScript值。它可以接受三个参数。第一个参数是必选的。value参数是一个ECMAScript值,它通常是对象或者数组,尽管它也可以是String, Boolean, Number 或者是 null。可选的replacer参数要么是个可以修改对象和数组字符串化的方式的函数,要么是个扮演选择对象字符串化的属性的白名单这样的角色的String和Number组成的数组。可选的space参数是一个String或者Number,可以允许结果中插入空白符以改善人类可读性。

11.3

ECMAScript5