ECMAScript 5 新特性

时间:2023-01-26 09:49:03

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. ubuntu14.0.4.3 devstack 安装openstack

    参考网址: http://www.chenshake.com/install-ubuntu-14-04-devstack/ 现在装完一切正常,就是不能重启,一旦重启VM,会导致给br-ex设置的IP地 ...

  2. 【风马一族_Android】Android 前端内容1

    Android 前端内容 4.1 View 类概述 4.1.1 关于 View //类型说明 view(视图)指的是用户界面组件的基本构建基块.一个视图占据屏幕上的矩形区域,负责绘图和事件处理.视图是 ...

  3. <Linux下FTP服务的搭建>

    默认安装好ftp软件包匿名用户是可以下载的.匿名以后可以上传:anon_upload_enable=YES# getsebool -a | grep ftpallow_ftpd_anon_write ...

  4. Java第一阶段总结

    学习java已经一个多月的时间了,第一阶段总算完成了. 这中间遇到很多问题,通过问同学问学长,收获了很多,但也知道自己和其他同学相差很远.他们java第一阶段只用了不到一个月的时间,而我拖了很长时间, ...

  5. Linux注意到Makefile

    规则: 目标 : 依靠 命令 make是怎样工作的: (1)make在当前文件夹下寻找makefile或Makefile. (2)假设找到,他会寻找文件里的第一个目标文件(target).并把这个文件 ...

  6. hihoCoder 403 Forbidden 字典树

    题意:给定个规则,个ip,问这些ip是否能和某个规则匹配,如果有多个规则,则匹配第一个.如果没能匹配成功,则认为是"allow",否则根据规则决定是"allow&quot ...

  7. 二十一、当锚点遇到fixed(margin和padding)

    当锚点点击跳转的时候,如果上方有fixed,锚点跳转会默认跳转到top为0的地方,有一部分就被遮挡了 解决方法:(像素值随便给的) 给锚点跳转到的具体内容加padding-top:-50px:marg ...

  8. 第二十二篇-Guideline基准线

    效果图: 前5个是button填充的,最后一个是线性布局下放置一个button在填充. layout.xml <?xml version="1.0" encoding=&qu ...

  9. Confluence 6 配置避免管理员联系表单垃圾

    你可以配置 Confluence 使用验证码(Captcha)来避免垃圾内容发送给 Confluence 管理员.有关管理员联系表单验证码的内容在全站验证码设置中进行配置,相关的文档请参考 Confi ...

  10. pymouse 点击指定坐标点

    from pymouse import PyMouse mouse = PyMouse() mouse.click(,)