zoukankan      html  css  js  c++  java
  • JavaScript严格模式

    目前浏览器主要以 es3 + es5 规则为准  如果es3 和 es5 使用规则发生冲突 以 es3为准

    启动严格模式 将以 es5 为准

    //启用方式

    "use strict" //必须写在作用域最顶端 

    //老版本的浏览器会把它当作一行普通字符串,加以忽略。

    正常模式的区别
    1. 禁用with

    ( es3 可以使用 )

    var obj ={name:"abc"}
    with (obj){
    //会继承obj作用域
    console.log(name)//"obj"
    //使用with改变了作用域链会消耗大量效率 所以 使用 with会报错 
    }
    ```
    2. 禁用arguments.celler / arguments.cellee 使用会报错
    
    3. 全局指向 window 局部为 undefined 
    ```
    function test (){
    console.log(this)//undefined
    }

    4. 重复的参数会报错 重复的属性不会报错但后面的值会覆盖前面的值

    function test (a,a){
    console.log(a)// es5: 报错 es3: 2
    }
    test(1,2)
    var obj ={
    name:123,
    name:234
    }
    console.log(obj)// es5/ es3: 234 不报错

    5. eval es5 和es3 禁止使用 eval 功能类似于with 会改变全局作用域 字符串也可以当代码运行解析
    6. 未声明的变量将会报错

    function (){
    a=8 //error
    }

    7. 赋值类报错

    // 给不可写属性赋值
    var obj1 = {};
    Object.defineProperty(obj1, "x", { value: 42, writable: false });
    obj1.x = 9; // 抛出TypeError错误
    
    // 给只读属性赋值
    var obj2 = { get x() { return 17; } };
    obj2.x = 5; // 抛出TypeError错误
    
    // 给不可扩展对象的新属性赋值
    var fixed = {};
    Object.preventExtensions(fixed);
    fixed.newProp = "ohai"; // 抛出TypeError错误

    8. 试图删除不可删除的属性时会抛出异常 删除禁止声明变量

    delete Object.prototype; // 抛出TypeError错误
    var a;
    delete a //!!! 语法错误

    9. 禁止八进制数字语法

    var sum = 015 // !!! 语法错误

    10.严禁给原始(primitive)数据类型设置属性

    false.true = ""; //TypeError
    (14).a = "c"; //TypeError
    "with".b = "d"; //TypeError

    11. 函数必须声明在作用域顶层,不允许在非函数的代码块内声明函数。

    1 2   if (true) {
    3     function fun() { } //TypeError
    4   }
    5 
    6   for (var i = 0; i < 5; i++) {
    7     function fun1() { } //TypeError
    8   }
    9 

    严格模式好处主要有:
      - 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
      - 消除代码运行的一些不安全之处,保证代码运行的安全;
      - 提高编译器效率,增加运行速度;
      - 为未来新版本的Javascript做好铺垫。

  • 相关阅读:
    Java基础
    数据库表设计
    Spring循环依赖
    Mysql类型转换
    Mysql刷题
    JavaScript
    Git
    告别.NET生成报表统计图的烦恼
    JS给页面标签添加事件(或超链接链接)
    发现联想手机P630型号的一个严重的系统Bug
  • 原文地址:https://www.cnblogs.com/gaoguowen/p/10361446.html
Copyright © 2011-2022 走看看