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数组处理多个字符串的连接问题
Aug 20 Javascript
简介JavaScript中toUpperCase()方法的使用
Jun 06 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
Jun 16 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
Jul 03 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
Dec 04 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
Jan 22 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
Dec 25 Javascript
Node.js实现连接mysql数据库功能示例
Sep 15 Javascript
10行原生JS实现文字无缝滚动(超简单)
Jan 02 Javascript
一次Webpack配置文件的分离实战记录
Nov 30 Javascript
修改Vue打包后的默认文件名操作
Aug 12 Javascript
js 数组 fill() 填充方法
Nov 02 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
使用PHP实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
PHP之短标签开启设置
2013/06/17 PHP
php分页示例分享
2014/04/30 PHP
php广告加载类用法实例
2014/09/23 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
js表单登陆验证示例
2016/10/19 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
python的id()函数介绍
2013/02/10 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
Python创建字典的八种方式
2019/02/27 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
Python 定义只读属性的实现方式
2020/03/05 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
台湾三立电视电商平台:电电购
2019/09/09 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
抽奖活动主持词
2014/03/31 职场文书
残疾人小组计划书
2014/04/27 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
班主任高考寄语
2015/02/26 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
2015年中秋寄语
2015/07/31 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python