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 有趣的eval优化输入验证实例代码
Sep 22 Javascript
在jquery中combobox多选的不兼容问题总结
Dec 24 Javascript
php+js实现倒计时功能
Jun 02 Javascript
JQuery菜单效果的两个实例讲解(3)
Sep 17 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
Jan 08 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
js解决软键盘遮挡输入框的问题分享
Dec 19 Javascript
微信小程序之onLaunch与onload异步问题详解
Mar 28 Javascript
微信小程序实现单列下拉菜单效果
Apr 25 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
layui自定义ajax左侧三级菜单
Jul 26 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
Jun 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脚本的10个技巧(6)
2006/10/09 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
DOM精简教程
2006/10/03 Javascript
Javascript String.replace的妙用
2009/09/08 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
python tkinter基本属性详解
2019/09/16 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
技校生自我鉴定
2013/12/08 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
加强作风建设工作总结
2014/10/23 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
Python 发送SMTP邮件的简单教程
2021/06/24 Python