ECMAScript 5 新特性
Strict模式
开启strict:
在文件头部,或者在一个function头部内,添加‘use strict’或者“use strict”。
Strict模式的限制,以及违反时出现的异常:
- 新定制了未来可能会使用的一些保留字段 "implements", "interface", "let", "package", "private", "protected", "public", "static", and "yield"
那么这些保留字也就不能作为变量,常量、参数了。
Uncaught SyntaxError: Unexpected strict mode reserved word
- 八进制的数字不能作为字面量来用了
在之前的版本中。如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果前缀为 0 和 "x",则解释为十六进制数。
例如:var a=0379, 会作为8进制。0x12,会作为16进制。
但是在strict 模式下,就不允许使用8进制字面量了。
Uncaught SyntaxError: Decimals with leading zeros are not allowed in strict mode.
- escape、unescape 方法要对8进制处理
这一项,基本上用不到的。不需要关注。
- 所有变量声明必须有var
以前的版本中,声明一个变量,如果不使用var修饰的话,该变量会作为一个global变量。在strict 模式下取消这一项了。
Uncaught ReferenceError: a is not defined
- 不建议使用eval,arguments
下面三种情况下不能使用eval, arguments :
1)不能在赋值操作符(=)的左边,
2)不能出现在后缀(++, --)操作符的左边
3)不能与一元操作符(delete, void, typeof, ++, --, +, -, ~, !)结合使用
4)不能作为函数的形参
5)还有很多其他情形
上述三种情况下,违反时会出现:
Uncaught SyntaxError: Unexpected eval or arguments in strict mode
总之一句话,就是不能乱用eval, arguments
- 不能使用caller,callee
不能使用Arguments对象的callee,不能使用Function对象的caller
Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
- 对象字面量的属性不能重复
{a:1,b:’23’,a:123} 这样的代码是不被允许的。这个在Chrome上测试竟然是可以的。
- 一个函数的作用域不会被默认绑定给global,而是绑定为null或者undefined
- 不能使用delete语句、with语句
- 形参不能出现重名的情况
内置对象变化
1、 Object添加了一些静态方法
1)继承相关方法:create、getPrototypeOf
2)属性相关方法:defineProperty、 defineProperties、 getOwnPropertyDescriptor、getOwnPropertyNames、 keys
3)防篡改方法:preventExtensions、isExtensible、seal、isSealed、freeze、isFrozen
需要注意的是,这些方法全部是Object对象的,不是prototype,也就是说,不是每一个javascript对象都能用的。
2、Function
1)Function.prototype添加了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()方法。
其中3)4)是和Java8的Stream API遥相呼应哈。
4、String对象
添加了trim()方法。
5、Date对象
添加了Date.now()、Date.prototype.toJSON()等方法。
6、RegExp对象
在ES3中,使用正则表达式字面量时共享一个RegExp实例,而在ES5中,每次使用正则表达式字面量时都要创建新的RegExp实例,就像使用RegExp构造函数一样。
7、JSON对象
添加了原生JSON内建对象。
var obj = {'a':1,'b':new Date(),'c':1};
console.log(obj);
var jsonstr =JSON.stringify(obj)
console.log(jsonstr)
var obj1 = JSON.parse(jsonstr);
console.log(obj1)
此外,各个浏览器对 ES 5的支持情况参见:http://kangax.github.io/compat-table/es5/
ECMAScript 5 新特性的更多相关文章
- ECMAScript 6新特性简介
目录 简介 ECMAScript和JavaScript的关系 let和const 解构赋值 数组的扩展 函数的扩展 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言 ...
- ECMAScript 2021 新特性
ECMAScript 2021 新特性 refs https://codeburst.io/exciting-features-of-javascript-es2021-es12-1de8adf655 ...
- ECMAScript 6新特性(1)数组篇
数组现有的方法: .concat():连接两个或更多的数组,并返回结果. .join():把数组的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. .pop():删除并返回数组的最后一个元素 . ...
- ECMAScript 6 | 新特性
新特性概览 参考文章: http://www.cnblogs.com/Wayou/p/es6_new_features.html ——————————————————————————————————— ...
- ECMAScript 6新特性介绍
箭头函数 箭头函数使用=>语法来简化函数.在语句结构上和C#.Java 8 和 CoffeeScript相似,支持表达式和函数体. . =>`操作符左边为输入的參数.而右边则是进行的操作以 ...
- ECMAScript 6新特性简记
ECMAScript 6.0是JavaScript语言的2015年6月的发布版. 一.let和const命令 let:用来声明变量,用法类似于var,但是只在let命令所在的代码块内有效. var a ...
- ECMAScript 6 新特性-set。const
一.let命令是es6新增的特性,作用与var命令类似,声明变量,不同之处在于声明的变量的作用域为块级作用域.引入let后带来了很多新的特性. 1作用域,es5之前之后函数作用域和全局作用域,let的 ...
- Ecmascript 6新特性
声明变量由var变成let.let实际上为JavaScript新增了块级作用域.let与var相比具有的特性有 1.不允许重复声明一个变量 var a=5; var a=7; let b=6; let ...
- ECMAScript 6新特性之Proxy
ECMAScript 6中新增了一个全局构造函数:Proxy.该构造函数能够接收两个參数:一个目标对象.一个处理对象. 代码演示样例: var target = {}; var handler = { ...
随机推荐
- 浅谈OGNL表达式
OGNL(Object-Graph Navigation Language):对象视图导航语言 ${user.addr.name}这样的写法就叫对象视图导航 OGNL不仅可以视图导航,支持EL表达式更 ...
- Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述
第1章 Java程序设计概述1.1 Java程序设计平台 具有令人赏心悦目的语法和易于理解的语言,与其他许多优秀语言一样,Java满足这些要求. 可移植性 垃圾收集 提供大型的库 如果想要有奇特的绘 ...
- python科学计算_scipy_常数与优化
scipy在numpy的基础上提供了众多的数学.科学以及工程计算中常用的模块:是强大的数值计算库: 1. 常数和特殊函数 scipy的constants模块包含了众多的物理常数: import sci ...
- Mac下jenkins用户权限配置错误,导致登录时提示:没有Overall/read权限
由于初次接触jenkins,于是在搭建好jenkins以后,想要对用户进行管理,于是乎开始在系统管理->configure Global Security里设置用户的权限. 在启用安全-> ...
- Python 接口自动化(预)
1. HTTP协议:HTTP是接口测试的基础: 2. Fiddler工具:Fiddler所有界面布局及主要布局
- python 浅析类方法与静态方法
类方法,静态方法的定义 Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即 ...
- 用JAVA写一个冒泡排序
一:实现思想: 基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要 ...
- 从Unity中的Attribute到AOP(一)
首先来看一下微软官方对Attributes(C#)的定义: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/conce ...
- 微信小程序在开发中遇到的问题与解决方法
1. √ 这种错误多半是该js文件中没有Page这个方法,就算是空的js也必须要把Page({ })写上去 2. √ 这种错误多半是该json文件没有内容,所以必须要加上{ },就算是空内容也要加 ...
- [转]Python的3种格式化字符串方法
本文转自: 夏日微风Python笔记 传统C语言式 命名参数 位置参数 1. 传统C语言式 和c语言里面的 sprintf 类似,参数格式也一样 title = "world" y ...