JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性


Posted in Javascript onOctober 11, 2012

接下来应该是BOM和HTML5了,但是鉴于ECMAScript5相对于ECMAScript3的新变化比较多,而且这些变化也非常的有意思,因此在这篇文章中再将我认为的有意思的变化(并非全部变化)集中整理一下,但这里只是列举,不具体展开。

一、语法变化

1、关键字和保留字

在ES3中,使用关键字做标识符会导致“Identifier Expected ”错误,而使用保留字做标识符可能会也可能不会导致相同的错误,具体取决于特定的引擎。在ES5中,关键字和保留字虽然不能作为标识符 使用,但可以作为对象的属性名。在ES5中的关键字和保留字中,新增了let和yield。为了保证最大的兼容性,不管是ES3还是ES5中的关键字和保留字,都不要作为标识符使用。

2、属性特性

ES5允许使用用户定义的属性描述来覆盖给定属性的enumerable、configurable、writable、get、set等属性了。具体方法是使用定义在Object对象上的静态函数。

3、严格模式

最大的语法变化,就是引入了严格模式,可以通过语句"use strict"; 来开启严格模式,在代码顶部添加整个脚本启用严格模式,在函数内部添加则只对该函数启用严格模式。严格模式下主要的变化有:

(1)使用变量前必须先定义,即不允许隐式的全局变量

(2)不使用八进制数据

(3)不使用with语句

(4)eval

A、不能使用eval作为标识符,因此不能把变量或函数命名为eval

B、外部不能访问在eval()函数中定义的变量

(5)arguments

A、不能使用arguments作为标识符

B、不能修改作为函数内部对象的arguments,因此形式参数和arguments之间不再有同步变化

C、不能访问arguments.callee

D、ES5中定义了arguments.caller属性,它的值始终是undefined,主要用于区分arguments.caller和函数的caller,但是不能在严格模式下访问

(6)函数

A、函数中不能出现两个同名的形式参数

B、不能给函数的caller属性赋值

C、未指定环境对象而调用函数,this值不会指向window,而是undefined

(7)对象

A、对象中不能出现两个同名的属性

B、修改一个特性[[writable]]为false的属性时,会抛出异常,而不是静默失败,同样的使用delete删除特性[[configurable]]为false的属性时也会抛出异常

(8)delete

不能使用delete删除显示声明的变量和函数

二、内建对象的变化

1、Object对象

(1)继承相关方法:create()、getPrototypeOf()

(2)属性相关方法:defineProperty()、defineProperties()、getOwnPropertyDescriptor()、getOwnPropertyNames()、keys()

(3)防篡改方法:preventExtensions()、isExtensible()、seal()、isSealed()、freeze()、isFrozen()

2、Function对象

(1)添加了bind()方法。

(2)规范化了一个函数对象的属性caller,用于指向调用当前函数的函数的引用。

(3)prototype是不可枚举的

3、Array对象

(1)判断方法:添加了静态方法Array.isArray(obj)用于判断obj是否为一个Array对象的实例。

(2)索引方法:添加了两个用于查找指定项索引的方法indexOf()和lastIndexOf()。查找时使用全等(===)进行匹配。

(3)迭代方法:添加了every()、some()、forEach()、map()、filter()方法。

(4)缩小方法:添加了reduce()和reduceRight()方法。

4、String对象

添加了trim()方法。

5、JSON对象

添加了原生JSON内建对象。

6、Date对象

添加了Date.now()、Date.prototype.toJSON()等方法。

7、RegExp对象

在ES3中,使用正则表达式字面量时共享一个RegExp实例,而在ES5中,每次使用正则表达式字面量时都要创建新的RegExp实例,就像使用RegExp构造函数一样。

Javascript 相关文章推荐
JavaScript 脚本将当地时间转换成其它时区
Mar 19 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
Jan 09 Javascript
js调用AJAX时Get和post的乱码解决方法
Jun 04 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
Aug 17 Javascript
vue.js表格分页示例
Oct 18 Javascript
Easyui使用Dialog行内按钮布局的实例
Jul 27 Javascript
View.post() 不靠谱的地方你知道多少
Aug 29 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
Apr 17 Javascript
vue 权限认证token的实现方法
Jul 17 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
May 28 Javascript
基于javascript的拖拽类封装详解
Apr 19 Javascript
监控微信小程序中的慢HTTP请求过程详解
Jul 05 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
Oct 11 #Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
Oct 11 #Javascript
You might like
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
Python测试线程应用程序过程解析
2019/12/31 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
如何对python的字典进行排序
2020/06/19 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
阿尔卡特(中国)的面试题目
2014/08/20 面试题
.net C#面试题
2012/08/28 面试题
linux比较文件内容的命令是什么
2015/09/23 面试题
车贷收入证明范本
2014/01/09 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
铲车司机岗位职责
2014/03/15 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
采购员岗位职责范本
2015/04/07 职场文书
法定代表人免职证明
2015/06/24 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
MySQL GRANT用户授权的实现
2021/06/18 MySQL
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL