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

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/

原文地址:https://www.cnblogs.com/f1194361820/p/8342861.html

时间: 2024-11-13 08:19:13

ECMAScript 5 新特性的相关文章

ECMAScript 6 新特性-set。const

一.let命令是es6新增的特性,作用与var命令类似,声明变量,不同之处在于声明的变量的作用域为块级作用域.引入let后带来了很多新的特性. 1作用域,es5之前之后函数作用域和全局作用域,let的引入带来了块级作用域,块级作用于会带来很多新的改变. 2一个需要了解的是"暂时性死区",比如在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错. 3ES5 规定,函数只能在顶层作用域和函数作用域之中声明

ECMAScript 6新特性介绍

箭头函数 箭头函数使用=>语法来简化函数,在语句结构上和C#.Java 8 和 CoffeeScript类似,支持表达式和函数体..=>`操作符左边为输入的参数,而右边则是进行的操作以及返回的值. var sum = (num1, num2) => num1 + num2; // 等同于 var sum = function(num1, num2) { return num1 + num2; }; 关于this,绑定定义时所在的对象,而不是使用时所在的对象. var handler =

Ecmascript 6新特性

声明变量由var变成let.let实际上为JavaScript新增了块级作用域.let与var相比具有的特性有 1.不允许重复声明一个变量 var a=5; var a=7; let b=6; let b=8;//Uncaught SyntaxError: Identifier 'a' has already been declared重复声明变量报错,而var重复声明的变量不会报错 2.不存在变量提升,也就是预解析过程.只有变量声明后才可以调用,在该变量声明前使用会报错 console.log

ECMAScript 6新特性之Proxy

ECMAScript 6中新增了一个全局构造函数:Proxy.该构造函数能够接收两个參数:一个目标对象.一个处理对象. 代码演示样例: var target = {}; var handler = {}; var proxy = new Proxy(target, handler); proxy将具有与target类似的内部属性/方法:handler能够作为proxy方法的拦截器.

前端开发者进阶之ECMAScript新特性--Object.create

前端开发者进阶之ECMAScript新特性[一]--Object.create Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数:prototype 必需.  要用作原型的对象. 可以为 null.descriptors 可选. 包含一个或多个属性描述符的 JavaScript 对象."数据属性"是可获取且可设置值的属性. 数据属性描述符包含 value 特性,以及 writable.enumerab

ECMAScript 6的一些新特性2

看下ES6数组的一些新特性, 把类数组转换为真正的数组 'use strict'; var aDiv = document.getElementsByTagName('div'); var eles = Array.from( aDiv ); console.log( eles ); 同样的方法也可以转字符串 'use strict'; var str = 'abcd'; var eles = Array.from( str ); console.log( eles ); 数组的实例方法arr.

Atitit js es5 es6新特性 attilax总结

1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 基本chrome ff 360se8全面支持了2 2. ECMAScript 2015(ES6)的十大特征 – WEB前端开发 - 专注前端开发,关注用户体验.html2 1.1. JavaScript发展时间轴: 1.1995:JavaScript诞生,它的初始名叫LiveScript. 2.1997:ECMAScript标准确立. 3.1999:ES3出

TypeScript系列1-1.5版本新特性

1. 简介 随着PC端快速向移动端迁移,移动(体验)优先的概念也越来越响.由于ReactJS目前移动端仅仅支持iOS,因此移动端Web开发框架只能选择: AngularJS/Angula2 + Ionic框架 + Cordova.想要学习好Angula2以及阅读其代码, 就必须了解和学习TypeScript,也因此需要学习好ES6以及Web Component.近期将开始学习TypeScript语言. 下面先看看TypeScript语言的发展: 鉴于JavaScript这种脚本语言很难应用于大规

Atitit nodejs5 nodejs6  nodejs 7.2.1  新特性attialx总结

Atitit nodejs5 nodejs6  nodejs 7.2.1  新特性attialx总结 1.1. Node.js 4.0.0 已经发布了 .这是和 io.js 合并之后的首个稳定版本,它带来了一系列的新特性,支持 ES 6的大部分特性1 1.2. 10月29日发布了Node.js 5.0,至此Node.js 4.0进入了长期服务支持阶段(LTS),5.0成为稳定版本.Node.js 5.x系列采用快速发布模式,计划1~2周完成一个发布.1 1.3. Node.js 6覆盖了93%的