• 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做好铺垫。

  • 相关阅读:
    centos6 vps部署rails
    初始设置ubuntu 16.04 Vps部署rails
    自己买的书籍
    linux mint 18.2 install erlang
    Bunder: What does :require => nil in Gemfile mean?
    javascript箭头函数
    SharpGL学习笔记(一) 平台构建与Opengl的hello World
    动力学仿真引擎ODE的学习笔记,C#演示(一)
    设计模式之 面向对象的养猪厂的故事,C#演示(二)
    设计模式之 面向对象的养猪厂的故事,C#演示(一)
  • 原文地址:https://www.cnblogs.com/gaoguowen/p/10361446.html
Copyright © 2020-2023  润新知