ecmaScript5新特性


浏览器支持情况:

  • Opera 11.60

  • Internet Explorer 9*

  • Firefox 4

  • Safari 5.1**

  • Chrome 13

ES5的严格模式

严格模式给作者提供了选择一个限制性更强语言变种的方式——给作者提供额外的可靠性给用户提供额外的安全性。在JS文件或是函数的顶部添加"use strict"即可启用严格模式。因为"use strict"就是个字符串,因此其会被旧版浏览器安全地忽视。

"use strict";
function strict(){
  "use strict";  //...}function sloppy(){
  eval("window.foo = 'bar'");
}

附加对象

下面的方法是添加到Object上的构造器:

  • Object.getPrototypeOf

  • Object.getOwnPropertyDescriptor

  • Object.getOwnPropertyNames

  • Object.create

  • Object.defineProperty

  • Object.defineProperties

  • Object.seal

  • Object.freeze

  • Object.preventExtensions

  • Object.isSealed

  • Object.isFrozen

  • Object.isExtensible

  • Object.keys

"use strict";

function Animal () {
   this.name = "animal";
   this.age = 0;
}

Animal.prototype.say = function () {
   alert(this.name);
}

var dog = Object.create(new Animal(), {
   run: {
      value: true,
      writable: true,
      enumerable: true,
      configurable: true
   }
}) //创建对象

Object.defineProperty(dog, "run", {
   enumerable: false
}) //定义单个属性

Object.defineProperties(dog, {
   hair: {
      value: "black",
      writable: false,
      enumerable: true,
      configurable: true
   },
   nose: {
      set: function (value) {
         this.noseValue = value;
      },
      get: function () {
         return "dog's nose" + this.noseValue;
      },
      enumerable: true,
      configurable: true
   }
}) //定义多个属性

for (var i in dog) {
   console.log(i);
}

console.log(Object.getOwnPropertyDescriptor(dog, "run")); //获取某个属性的特性描述(value, enumerable, writable, configurable)
console.log(Object.getPrototypeOf(dog)); //获取原型对象
console.log(Object.getOwnPropertyNames(dog)); //获取自身属性名列表,名包括enumerable为false的属性
dog.nose = "灵敏";
console.log(dog.nose);
console.log(Object.keys(dog)); //取自身属性名列表,不包括enumerable为false的属性
Object.preventExtensions(dog); //阻止向对象添加属性
Object.seal(dog);  //阻止修改现有属性的特性,阻止继续添加新属性
Object.freeze(dog);  //阻止修改现有属性的特性和值,阻止继续添加新属性
console.log(Object.isExtensible(dog));
console.log(Object.isSealed(dog));
console.log(Object.isFrozen(dog));
Object.defineProperty(dog, "hair", {
   writable: true
})
dog.hair = 22;
console.log(dog.hair)

Function.prototype.bind(thisArg [, arg1 [, arg2, …]])

Function.prototype.bind返回一个新的函数对象,该函数对象的this绑定到了thisArg参数上。从本质上讲,这允许你在其他对象链中执行一个函数。

"use strict";

function run (type) {
   console.log(this.speed);
   console.log(type);
}

var obj = {
   speed: "50km/h"
}

var runBind = run.bind(obj, "average");

runBind();

额外的数组

以下方法添加到了Arrayprototype对象上:

  • Array.prototype.indexOf

  • Array.prototype.lastIndexOf

  • Array.prototype.every

  • Array.prototype.some

  • Array.prototype.forEach

  • Array.prototype.map

  • Array.prototype.filter

  • Array.prototype.reduce

  • Array.prototype.reduceRight

"use strict";

var arr = [1,3,2,6,6,8];

console.log(Array.isArray(arr)); //判断是否是一个数组
console.log(arr.indexOf(6)); //判断某个值在数组中第一次出现的位置
console.log(arr.lastIndexOf(6)); //判断某个值在数组中最后一次出现的位置

var everyTrue = arr.every(function (value) { //数组中每个元素都满足条件,返回true,有一个不满足返回false
   return value > 0;
})
console.log(everyTrue);

var someTrue = arr.some(function (value) { //数组中至少有一个元素满足,返回true,都不满足返回false
   return value > 5;
})
console.log(someTrue);

arr.forEach(function (value, index) { //遍历数组
   console.log(index, value)
})

var arr1 = arr.map(function (value) { //组装新数组,原数组不变
   return value + 10;
})
console.log(arr1);

var arr2 = arr.filter(function (value) { //组装新数组,过滤掉不满足条件的元素,原数组不变
   return value > 3
})
console.log(arr2)

var total = arr.reduce(function (total, value) { //对每个元素进行累积
   return total + value;
}, 10)
console.log(total);

var total = arr.reduceRight(function (total, value) { //对每个元素进行反向累积
   return total + value;
}, 10)
console.log(total);


你可能感兴趣的:(ecmaScript5新特性)