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 相关文章推荐
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
Oct 20 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
Aug 15 Javascript
js中传递特殊字符(+,&)的方法
Jan 16 Javascript
JavaScript判断变量是否为空的自定义函数分享
Jan 31 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
Apr 21 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
五种js判断是否为整数类型方式
Dec 03 Javascript
javascript 网页进度条简单实例
Feb 22 Javascript
vuex的简单使用教程
Feb 02 Javascript
使用RN Animated做一个“添加购物车”动画的方法
Sep 12 Javascript
vue3 源码解读之 time slicing的使用方法
Oct 31 Javascript
vue商城中商品“筛选器”功能的实现代码
Jul 01 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代码包装修正版
2008/03/15 PHP
PHP file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
PHP中用正则表达式清除字符串的空白
2011/01/17 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
jQuery遍历DOM元素与节点方法详解
2016/04/14 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
Python深入学习之上下文管理器
2014/08/31 Python
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
keras.layer.input()用法说明
2020/06/16 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
军人违纪检讨书
2014/02/04 职场文书
寒山寺导游词
2015/02/03 职场文书
教务处教学工作总结
2015/08/10 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js