ECMAScriptECMAScript5新特征总结

虽ECMAScript5早便成标准推出来了,但之前因直接为此之凡ECMAScript3,并且工作着老是要求兼容IE的不比版本,所以用的比较少。如今市场上大部分浏览器都能够兼容ECMAScript5(IE8除了),逐渐的虽因故的可比多矣。今天关键是把ECMAScript5遭受初增奶的特征以及方式总结一下,已都需要经常便于查询。

ECMAScript5之兼容性可参见http://kangax.github.io/compat-table/es5/

从严模式(Strict Mode)是ECMAScript
5的新特征,它同意你将一切程序,或者有函数,放置在“严格”的操作语境中。这种严峻的语境会防止少数特定的操作并弃来双重多之怪。严格模式下要变化出:

  1. 勿利用var创建的变量会报错
  2. 函数顶层的this不在指向window,而是undefined
  3. 强制为eval创建新作用域
  4. 取缔用delete删除变量
  5. 禁行使arguments,callee,caller属性
  6. 禁用width语句
  7. 禁绝函数参数重名
  8. 禁绝对象属性重名
  9. 不准以八进制数字
  10. 勿容许以非函数的代码块内声明函数。
  11. 增产保留字:implements, interface, let, package, private, protected,
    public, static, yield。

Object新长方法:

Object.create()

创一个备指定原型且可选择性地蕴藏指定属性的对象

Object.create(proto, [ propertiesObject ])

proto:一个目标,作为新创造目标的原型。或者也 null。
propertiesObject:可选。该参数对象是同一组属性与价值,该对象的特性名称将是初创办的对象的性能名称,值是性质描述称。注意:该参数对象不能够是
undefined,另外就发生该目标被本身有的可枚举的特性才行,也就是说该目标的原型链上属性是无用的。
示例:

//Shape - superclass
function Shape() {
  this.x = 0;
  this.y = 0;
}

Shape.prototype.move = function(x, y) {
    this.x += x;
    this.y += y;
    console.info("Shape moved.");
};

// Rectangle - subclass
function Rectangle() {
  Shape.call(this); //call super constructor.
}

Rectangle.prototype = Object.create(Shape.prototype);

var rect = new Rectangle();
rect instanceof Rectangle //true.
rect instanceof Shape //true.
rect.move(1, 1); //Outputs, "Shape moved."

Object.getPrototypeOf()

回到该目标的原型(也就算是欠对象中属性[[prototype]]的值)

Object.getPrototypeOf(object)

当 ES5 中,如果参数不是一个对象类型,将废弃来一个 TypeError
异常。在ES6饱受,参数为强制转换为Object。
示例:

var proto = {};
var obj = Object.create(proto);
Object.getPrototypeOf(obj) === proto; // true

Object.getOwnPropertyNames()

归来一个出于指定对象的持有自性质的属于性名(包括不可枚举属性)组成的数组。

Object.getOwnPropertyNames(obj)

obj:一个目标,其自身之可枚举和不可枚举属性的号为归。
示例:

var arr = ["a", "b", "c"];
console.log(Object.getOwnPropertyNames(arr).sort()); // ["0", "1", "2", "length"]

Object.defineProperty()

直当一个目标上定义一个新属性,或者涂改一个已是的性质,
并返回这个目标。

Object.defineProperty(obj, prop, descriptor)

obj:需要定义属性之靶子。
prop:需定义或涂改的属性之名字。
descriptor:将让定义或改动的性之讲述吻合。
示例:

Object.defineProperty(obj, "key", {
  enumerable: false,
  configurable: false,
  writable: false,
  value: "static"
});

Object.defineProperties()

在一个目标及丰富或修改一个或多单从生性能,并回该对象。

Object.defineProperties(obj, props)

obj:将要被上加属性或涂改属性的对象
props:该目标的一个还是多独键值对定义了即将为目标上加要修改的性能的现实配置
示例:

var obj = {};
Object.defineProperties(obj, {
  "property1": {
    value: true,
    writable: true
  },
  "property2": {
    value: "Hello",
    writable: false
  }
});
console.log(obj) //{property1:true,property2:"Hello"}

Object.getOwnPropertyDescriptor()

指定对象及一个自有属性对应的特性描述吻合(自生属性指的是直接给予该对象的性能,不待打原型链上进行搜寻的性质)。如果指定的性质是叫对象及,则回其性描述吻合(property
descriptor),否则回 undefined。

Object.getOwnPropertyDescriptor(obj, prop)

obj:在该对象上查看属性
prop:一个性能名称,该属性之习性描述符将被归
示例:

var o, d;
o = { bar: 42 };
d = Object.getOwnPropertyDescriptor(o, "bar");
console.log(d);//{ configurable: true, enumerable: true, value: 42, writable: true }

Object.seal()

好为一个目标秘密封,并赶回给封后的对象。密封对象是借助那些无克互补加新的特性,不可知去除已发出性能,以及未能够修改都生性的可枚举性、可配置性、可写性,但或许好改都出性能的价值的对象。

Object.seal(obj)

Object.freeze()

足冻结一个目标,冻结指的是无可知望者目标上加新的性质,不克改该就来性的值,不可知去除已发性能,以及未能够修改该对象就发生性的但是枚举性、可配置性、可写性。也就是说,这个目标永远是不可变的。该法返回给冰冻的目标。

Object.freeze(obj)

Object.preventExtensions()

于一个对象变的不得扩展,也便是永恒不克重复上加新的性。

Object.preventExtensions(obj)

Object.isExtrensible()

判断一个目标是否是不过扩大的(是否好当其上面添加新的属性)。

Object.isExtensible(obj)

示例:

// 新对象默认是可扩展的.
var empty = {};
Object.isExtensible(empty); // === true
// ...可以变的不可扩展.
Object.preventExtensions(empty);
Object.isExtensible(empty); // === false

Object.isSealed()

判断一个目标是不是是封的(sealed)。

Object.isSealed(obj)

示例:

// 新建的对象默认不是密封的.
var empty = {};
Object.isSealed(empty); // === false

// 如果你把一个空对象变的不可扩展,则它同时也会变成个密封对象.
Object.preventExtensions(empty);
Object.isSealed(empty); // === true

Object.isFrozen()

认清一个对象是不是受冻结(frozen)。

Object.isFrozen(obj)

Object.keys()

回去一个由给定对象的自身可枚举属性组成的高频组,数组中属性名的排列顺序和运用
for…in 循环遍历该目标时回来的一一一致 (两者的基本点区别是 一个 for-in
循环还见面枚举其原型链上的性能)。

Object.keys(obj)

示例:

var arr = ["a", "b", "c"];
console.log(Object.keys(arr));// [ '0', '1', '2' ]

Object.prototype新增方法

Object.prototype.isPrototypeOf()

用于测试一个对象是不是在叫任何一个目标的原型链上。

Obj.prototype.isPrototypeOf(object)

object:在该对象的原型链上搜寻
示例:

var arr = [];
console.log(arr instanceof Array);//true
console.log(Array.prototype.isPrototypeOf(arr));//true

isPrototypeOf 和 instanceof operator 是未均等的。在表达式 object
instanceof AFunction 中,检测的凡 AFunction.prototype 是否当object
的原型链中,而未是检测 AFunction 自身。

Object.prototype.propertyIsEnumerable()

返回一个布尔值,表明指定的属于性名是否是当下目标可是枚举的本人性质。

obj.propertyIsEnumerable(prop)

示例:

var o = {};
o.prop = 'is enumerable';
o.propertyIsEnumerable('prop');   //  返回 true

Function.prototype新增方法

Function.prototype.bind()

bind()方法会创建一个初函数。当这新函数被调用时,bind()的第一个参数将用作它们运行时的
this, 之后的同一行参数将会见于传递的实参前流传作为它们的参数。

fun.bind(thisArg[, arg1[, arg2[, ...]]])

thisArg:当绑定函数被调用时,该参数会作为本函数运行时之 this
指向。当用new 操作符调用绑定函数时,该参数无效。
arg1, arg2,
…:当绑定函数被调用时,这些参数将坐实参之前传递让吃绑定的方。

示例:

this.x = 9; 
var module = {
  x: 81,
  getX: function() { return this.x; }
};
module.getX(); // 返回 81
var retrieveX = module.getX;
retrieveX(); // 返回 9, 在这种情况下,"this"指向全局作用域
// 创建一个新函数,将"this"绑定到module对象
// 新手可能会被全局的x变量和module里的属性x所迷惑
var boundGetX = retrieveX.bind(module);
boundGetX(); // 返回 81

Array新增方法:

Array.isArray()

拖欠措施适用于规定传递的价值是否也Array。

Array.isArray(obj)

示例:

Array.isArray([1, 2, 3]);  // true
Array.isArray({foo: 123}); // false
Array.isArray("foobar");   // false
Array.isArray(undefined);  // false

职位方法:

Array.prototype.indexOf()

回在勤组吃得找到被定元素的率先个目录,如果未设有,则赶回-1。

arr.indexOf(searchElement)

示例:

var a = [2, 9, 9]; 
a.indexOf(2); // 0 

Array.prototype.lastIndexOf()

回去指定元素(也即行之 JavaScript
值或变量)在屡组吃的最后一个之目,如果非设有则赶回
-1。从数组的后向前查找,从 fromIndex 处开始。

arr.lastIndexOf(searchElement[, fromIndex = arr.length - 1])

searchElement:被寻找的因素。
fromIndex:从此位置上马逆向查找。默认为反复组的尺寸减
1,即所有数组都深受摸。如果该值大于或等数组的长度,则全部数组会被搜寻。如果也负值,将其视为从数组末尾向前的撼动。即使该值为借助,数组仍然会于从晚上查找。如果该值为负时,其绝对值大于数组长度,则法返回
-1,即数组不见面被寻找。

示例:

var array = [2, 5, 9, 2];
var index = array.lastIndexOf(2);//3

迭代法:

Array.prototype.every()

测试数组的具备因素是否都由此了点名函数的测试。
every 方法为数组中的每个元素执行同样不成 callback 函数,直到其找到一个如果
callback 返回 false(表示只是变换为布尔值 false
的价)的因素。如果发现了一个这样的要素,every 方法将会即时回
false。否则,callback 为各国一个素返回 true,every 就见面回到 true。

arr.every(callback[, thisArg])

callback:用来测试每个元素的函数。
thisArg:执行 callback 时使用的 this 值。

示例:

function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);// false
passed = [12, 54, 18, 130, 44].every(isBigEnough);// true

Array.prototype.some()

测试数组中之一点因素是否通过了点名函数的测试。
some 为数组中的各国一个元素执行同样次等 callback 函数,直到找到一个让
callback 返回一个“真值”(即可转换为布尔值 true
的价)。如果找到了如此一个值,some 将会立马回到 true。否则,some 返回
false。

arr.some(callback[, thisArg])

示例:

function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true

Array.prototype.filter()

以指定的函数测试所有因素,并创办一个带有有通过测试的素的初数组。
filter 为数组中的每个元素调用一潮 callback 函数,并下具有使得 callback
返回 true 或 等价于 true 的值 的因素创建一个初数组。

var new_arrary = arr.filter(callback[, thisArg])

示例:

function isBigEnough(value) {
  return value >= 10;
}

var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);//[12, 130, 44]

Array.prototype.forEach()

办法对反复组的每个元素执行同一蹩脚提供的函数。

array.forEach(callback[, thisArg])

示例:

var a = ['a', 'b', 'c'];

a.forEach(function(element) {
    console.log(element);
});
// a
// b
// c

forEach() 为每个数组元素执行callback函数;不像map() 或者reduce()
,它连接回到 undefined值,并且不可链式调用。

Array.prototype.map()

缔造一个初数组,其结果是该数组中之每个元素调用一个提供的函数。
map 方法会让原数组被之每个元素都仍顺序调用一不行 callback 函数。callback
每次执行后底返回值(包括 undefined)组合起来形成一个新数组。

var new_array = arr.map(callback[, thisArg])

示例:

var numbers = [1, 5, 10, 15];
var roots = numbers.map(function(x) {
    return x * 2;
});
// roots is now [2, 10, 20, 30]
// numbers is still [1, 5, 10, 15]

由并道:

Array.prototype.reduce()

针对累加器和频繁组的每个值 (从左到右)应用一个函数,以拿该缩减呢单个值。

arr.reduce(callback,[initialValue])

callback:执行数组中每个值的函数,包含四独参数
accumulator:上亦然软调整用回调返回的值,或者是供的初始值(initialValue)
currentValue:数组中正处理的素
currentIndex:数据被正在处理的要素索引,如果提供了 initialValue
,从0开始;否则从1始发
array:调用 reduce 的数组
initialValue:可摘,其值用于第一不善调整用 callback 的第一只参数。

示例:

var sum = [0, 1, 2, 3].reduce(function(acc, val) {
  return acc + val;
}, 0);

console.log(sum);// 6

Array.prototype.reduceRight();

reduceRight()
方法接受一个函数作为累加器(accumulator),让每个值(从右到左,亦即由尾到头)缩减为一个值。(与
reduce() 的实践方向相反)

arr.reduceRight(callback[, initialValue])

示例:

var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
    return a.concat(b);
}, []);
// flattened is [4, 5, 2, 3, 0, 1]

String

String.trim()

会见去除一个字符串两端的空白字符。

var newStr = str.trim()

示例:

var orig = '   foo  ';
console.log(orig.trim()); // 'foo'

Date

Date.now()

返从1970年1月1日 00:00:00 UTC到即时刻之毫秒数。

var timeInMs = Date.now();

IE8及以下可以用于下代码来配合:

if (!Date.now) {
  Date.now = function now() {
    return new Date().getTime();
  };
}

Date.prototype.toISOString()

回来一个 ISO(ISO 8601 Extended Format)格式的字符串:
YYYY-MM-DDTHH:mm:ss.sssZ。时区总是UTC(协调世界时),加一个后缀“Z”标识。

dateObj.toISOString()

示例:

var today = new Date("05 October 2011 14:48 UTC");
console.log(today.toISOString()); // 返回2011-10-05T14:48:00.000Z

JSON

JSON.parse()

剖析一个JSON字符串,构造由字符串描述的JavaScript值或对象。可以供可选的reviver函数以在返之前对所取得的目标执行变换。

JSON.parse(text[, reviver])

text:要让分析成JavaSctipt值的字符串,查看 JSON 对象上之JSON
语法的认证。
reviver:
可摘,如果是一个函数,则确定了原始值如何给解析改造,在吃归之前。

示例:

JSON.parse('{"name" : "jesse","age":25 }');//{ name: 'jesse', age: 25 }

JSON.stringfy()

JSON.stringify() 方法将JavaScript值转换为JSON字符串

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

示例:

JSON.stringify({ name: 'jesse', age: 25 });//{"name":"jesse","age":25}