文档章节

ecmaScript5新特性

L
 LorinLuo
发布于 2016/02/18 09:26
字数 725
阅读 40
收藏 1

浏览器支持情况:

  • 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);


© 著作权归作者所有

共有 人打赏支持
L
粉丝 18
博文 166
码字总数 116776
作品 0
成都
程序员
私信 提问
ECMAScript5新JavaScript API入门

ECMAScript5 给出了一系列新的API接口,这些接口在新的浏览器中大部分是被支持的,IE9,Chrome,FirFor都支持,也有少量API不是所有浏览器都支持,以下内容仅介绍大部分被支持的API。利用新的...

彭博
2012/03/09
437
1
针对于ECMA5Script 、ECMAScript6、TypeScript的认识

什么是ECMAScript、什么又是ECMA? Ecma国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Ass...

赵_俊明
2016/07/27
895
4
《编写可维护的 JavaScript》读书笔记第11章:不是你的对象不要动

什么是你的 只要维护代码是你的责任,那么你就拥有这些对象。 如果你的代码没有创建这些对象,不要修改它们,包括: 原生对象(Object、Array 等) DOM 对象(例如,document) 浏览器对象模...

张前程
2013/12/24
0
0
ECMAScript5 用法总结

浏览器支持 现在虽然已经出了ES6的规范,但是各大浏览器兼容性还有待提高。所以现在我们平时写的js代码还是多以ES5为规范。时至今日,除了一些较低版本的浏览器,各大主流浏览器基本都实现了...

bothyan
2016/11/03
13
0
原型式继承Object.create()函数讲解

原型式继承是由道格拉斯发明的一种继承方法,该方法没有严格意义上的构造函数。借助原型可以基于已有的对象来创建对象。他给出了函数: new F();的过程相当于如下,假设实例对象为f//相当于将...

zljhdu的博客
2017/12/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot引入第三方jar包或本地jar包的处理方式

在开发过程中有时会用到maven仓库里没有的jar包或者本地的jar包,这时没办法通过pom直接引入,那么该怎么解决呢 一般有两种方法 - 第一种是将本地jar包安装在本地maven库 - 第二种是将本地j...

独钓渔
今天
2
0
五、MyBatis缓存

一、MyBatis缓存介绍 缓存的使用可以明显的加快访问数据速度,提升程序处理性能,生活和工作中,使用缓存的地方很多。在开发过程中,从前端-->后端-->数据库等都涉及到缓存。MyBatis作为数据...

yangjianzhou
今天
2
0
最近研究如何加速UI界面开发,有点感觉了

最近在开发JFinal学院的JBolt开发平台,后端没啥说的,做各种极简使用的封装,开发者上手直接使用。 JBolt开发平台包含常用的用户、角色、权限、字典、全局配置、缓存、增删改查完整模块、电...

山东-小木
今天
3
0
《月亮与六便士》的读后感作文3000字

《月亮与六便士》的读后感作文3000字: 看完英国作家威廉.萨默塞特.毛姆所著《月亮与六便士》(李继宏译),第一疑问就是全书即没提到“月亮”,也没提到“六便士”。那这书名又与内容有什么...

原创小博客
昨天
2
0
微信网页授权获取用户信息(ThinkPHP5)+ 微信发送客服消息(一)

以thinkphp5为实例,创建控制器 class Kf extends Controller { /** * [protected description]微信公众号appid * @var [type] */ protected $appid = "xxxxxxxxxxxxxxx"; /** * [protected......

半缘修道半缘君丶
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部