zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    assembly打包。
    调用jar程序,读取与jar同级的配置文件。
    java.lang.UnsupportedClassVersionError
    jar包程序 读取properties文件
    Mysql-5.7.10启动失败 。
    spring HibernateValidator 验证 子类不起作用
    Eclipse 启动Tomcat后web项目的classes的子文件夹中没有calss文件
    java.lang.Exception: Socket bind failed: [730013] An attempt was made to acc
    log4
    jquery.validationEngine
  • 原文地址:https://www.cnblogs.com/f1194361820/p/8342861.html
Copyright © 2011-2022 走看看