1. 使用指令”use strist”
    2. 为什么使用严格模式
      1. 消除js语法不合理,不严谨保证代码运行安全
      2. 提高编译器效率,提高速度
      3. 为新版本js做铺垫
      4. 体现了合理安全严格的发展方向,包括IE10主流的浏览器的支持
    3. 指令出现位置 ```vue
    1. ```vue
    2. <script>
    3. function foo(){
    4. //此方法以严格模式执行
    5. "use strict";
    6. }
    7. </script>


    1. 1.在严格模式下删除对象属性需要configurable置为true

      1. <script>
      2. "use strict";
      3. var o = Object.create(null,{
      4. 'x':{
      5. value:1234,
      6. configurable:true
      7. }
      8. })
      9. console.log(o.x); //1234
      10. delete o.x
      11. console.log(o.x); //undefind
      12. </script>


    2. 严格模式下,不能使用未声明的变量

      1. <script>
      2. "use strict"
      3. x = 123;
      4. console.log(123); //报错 x in not defind
      5. </script>
    1. 严格模式下,不允许参数名相同
    2. 严格模式下,不允许是八进制
    3. 严格模式下,不允许使用转义字符
    4. 严格模式下,不允许只对只读属性赋值

      1. <script>
      2. "use strict";
      3. var obj = {};
      4. Object.defineProperty(obj, "x", {
      5. value: 0,
      6. writable: false
      7. });
      8. obj.x = 3.14;
      9. //Uncaught TypeError: Cannot assign to read only property 'x' of object '#<Object>'
      10. </script>


    5. 1.严格模式下,不允许对一个使用getter方法读取的属性进行赋值

      1. <script>
      2. "use strict";
      3. var obj = {
      4. get x() {
      5. return 0
      6. }
      7. };
      8. obj.x = 3.14;
      9. //Uncaught TypeError: Cannot set property x of #<Object> which has only a getter
      10. 无法设置只有getter的对象>的属性x
      11. </script>


    6. 严格模式下,不允许删除一个不允许删除的属性

      1. <script>
      2. "use strict";
      3. delete Object.prototype;
      4. //Uncaught TypeError: Cannot delete property 'prototype' of function Object() { [native code] }(不能删除函数对象()的属性“原型”{ [本机代码] })
      5. </script>


    7. 严格模式下,变量名不能使用 “eval” 字符串

    8. 严格模式下,变量名不能使用 “arguments” 字符串
    9. 严格模式下,不允许使用以下这种语句

      1. <script>
      2. "use strict"
      3. with(Math) {
      4. x = cos(2)
      5. };
      6. //Uncaught SyntaxError: Strict mode code may not include a with statement
      7. </script>


    10. 严格模式下,由于一些安全原因,在作用域 eval() 创建的变量不能被调用

    1. <script>
    2. "use strict"
    3. eval ("var x = 2");
    4. alert (x); //Uncaught ReferenceError: x is not defined
    5. </script>