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 相关文章推荐
js 创建书签小工具之理论
Feb 25 Javascript
JS获取后台Cookies值的小例子
Mar 04 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
Sep 06 Javascript
微信JS接口大全
Aug 25 Javascript
Vue.js中数组变动的检测详解
Oct 12 Javascript
值得分享和收藏的xmlplus组件学习教程
May 05 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
Mar 20 Javascript
Vue全局分页组件的实现代码
Aug 10 Javascript
js实现前面自动补全位数的方法
Oct 10 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
Sep 11 Javascript
javascript实现简单留言板案例
Feb 09 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
关于微信中a链接无法跳转问题
2016/08/02 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
python 进程的几种创建方式详解
2019/08/29 Python
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
SQL SERVER面试资料
2013/03/30 面试题
省三好学生申请材料
2014/01/22 职场文书
医务人员自我评价
2014/01/26 职场文书
《乡愁》教学反思
2014/02/18 职场文书
班主任班级寄语大全
2014/04/04 职场文书
校园活动策划方案
2014/06/13 职场文书
节约粮食标语
2014/06/18 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android