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对象都能用的。

2Function 
1)Function.prototype添加了bind()方法。 
2)规范化了一个函数对象的属性caller,用于指向调用当前函数的函数的引用。 
3)prototype是不可枚举的

3Array对象 
(1)判断方法:添加了静态方法Array.isArray(obj)用于判断obj是否为一个Array对象的实例。 
(2)索引方法:添加了两个用于查找指定项索引的方法indexOf()和lastIndexOf()。查找时使用全等(===)进行匹配。 
(3)迭代方法:添加了every()、some()、forEach()、map()、filter()方法。 
(4)缩小方法:添加了reduce()和reduceRight()方法。 
其中3)4)是和Java8的Stream API遥相呼应哈。

4String对象 
  添加了trim()方法。 
5Date对象 
  添加了Date.now()、Date.prototype.toJSON()等方法。 
6RegExp对象 
  在ES3中,使用正则表达式字面量时共享一个RegExp实例,而在ES5中,每次使用正则表达式字面量时都要创建新的RegExp实例,就像使用RegExp构造函数一样。

7JSON对象 
  添加了原生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 新特性的更多相关文章

  1. ECMAScript 6新特性简介

    目录 简介 ECMAScript和JavaScript的关系 let和const 解构赋值 数组的扩展 函数的扩展 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言 ...

  2. ECMAScript 2021 新特性

    ECMAScript 2021 新特性 refs https://codeburst.io/exciting-features-of-javascript-es2021-es12-1de8adf655 ...

  3. ECMAScript 6新特性(1)数组篇

    数组现有的方法: .concat():连接两个或更多的数组,并返回结果. .join():把数组的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. .pop():删除并返回数组的最后一个元素 . ...

  4. ECMAScript 6 | 新特性

    新特性概览 参考文章: http://www.cnblogs.com/Wayou/p/es6_new_features.html ——————————————————————————————————— ...

  5. ECMAScript 6新特性介绍

    箭头函数 箭头函数使用=>语法来简化函数.在语句结构上和C#.Java 8 和 CoffeeScript相似,支持表达式和函数体. . =>`操作符左边为输入的參数.而右边则是进行的操作以 ...

  6. ECMAScript 6新特性简记

    ECMAScript 6.0是JavaScript语言的2015年6月的发布版. 一.let和const命令 let:用来声明变量,用法类似于var,但是只在let命令所在的代码块内有效. var a ...

  7. ECMAScript 6 新特性-set。const

    一.let命令是es6新增的特性,作用与var命令类似,声明变量,不同之处在于声明的变量的作用域为块级作用域.引入let后带来了很多新的特性. 1作用域,es5之前之后函数作用域和全局作用域,let的 ...

  8. Ecmascript 6新特性

    声明变量由var变成let.let实际上为JavaScript新增了块级作用域.let与var相比具有的特性有 1.不允许重复声明一个变量 var a=5; var a=7; let b=6; let ...

  9. ECMAScript 6新特性之Proxy

    ECMAScript 6中新增了一个全局构造函数:Proxy.该构造函数能够接收两个參数:一个目标对象.一个处理对象. 代码演示样例: var target = {}; var handler = { ...

随机推荐

  1. 2.sass变量、嵌套、混合(mixin)、继承拓展、@import、comment

    变量.嵌套.混合(mixin).继承拓展.@import.comment 变量的意义 在sass里我们可以定义多个变量来存放颜色.边框等等的样式,这样就可以在下面想要使用样式的时候使用变量了 这样的优 ...

  2. win10大水牛主机插入耳机没有声音

    主机:大水牛,技嘉主板 操作系统:win10 问题:主机前面插入耳机,没有声音,扬声器图标出错 解决 一..插入耳机 二..Realtek高清晰音频管理器 1.打开音频管理器,点击右下角的设置 2.点 ...

  3. java.util.HashSet

    Operations Time Complexity Notes add, remove, contains, size O(1) assuming the hash functions has di ...

  4. 【转】String Date Calendar之间的转换

    1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDa ...

  5. C# 真正能发邮件的源码

    在网上找了很多例子都试邮件发送都失败,今天无意有试了一下居然行了 public static void ErrorMessageMail(string _subject, string _body)  ...

  6. 【精选】Nginx模块Lua-Nginx-Module学习笔记(二)Lua指令详解(Directives)

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis Nginx与Lua编写脚本的基本构建块是指令. 指令用于指定何时运行用户Lua代码以及如何使用结果. 下 ...

  7. 我的Python学习笔记(一):==和is

    Python中对象包含的三个基本要素:id(身份标识),type(数据类型),value(值) ==是用来比较两个对象的value(值)是否相等, is是用来比较两个对象的id(身份标识)是否相等 = ...

  8. Sqlserver如何递归查询层级数据将父级字段和本级某个字段合并?如何自定义用户函数并调用?

    开门见山,首先说下遇到的问题:前期系统地区字典表中,每个省市县只存了本级名称,没存完整的字段.如:肥西县隶属安徽省合肥市,表中就存了一个肥西县.现有需求需要将完整字段显示,由于系统已在线上运营,无法做 ...

  9. PyQt4 的事件与信号 -- 发射信号

    继承自QtCore.Qobject的对象均可以发射信号. 如果我们单击一个按钮,那么一个clicked()信号就会被触发. 以下代码将演示如果手动发射一个信号. import sys from PyQ ...

  10. 关于ORM的浴室思考

    这是一个由EF群引发的随笔 平时在一个EF群摸鱼,日常问题可以归纳为以下几种: 这条sql用linq怎么写? EF可以调用我写的存储过程么? EF好慢啊一些复杂查询写起来好麻烦-- 为什么会有这些问题 ...