zoukankan      html  css  js  c++  java
  • 关于JS中的严格模式

    1、概述

      除了正常模式,ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式使得javascript在更严格的条件下运行。

    2、为什么要用严格模式?

      - 消除javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

      - 消除代码运行的一些不安全之处,保证代码运行的安全;

      - 提高编译效率,增加运行速度;

      - 为未来新版本的javascript做好铺垫。

      “严格模式”体现了javascript更合理、更安全、更严谨的发展方向,包括IE10在内的主流浏览器都已经支持它,许多大项目已经开始全面拥抱它。

      另一方面,一些在“正常模式”下可以运行的代码,在“严格模式”下,可能将不能运行。

    3、进入标志

      “use strict”;

    4、如何调用

      - 针对单个脚本

        <script>

          "use strict";

          console.log("这是严格模式");

        </script>

      - 针对单个函数

        function strict(){

          "use strict";

          return "这是严格模式";

        }

        function noStrict(){

          return "这是正常模式";  

        }

    5、语法和行为的改变

      - 全局变量显式声明

        在正常模式下,如果一个变量没有声明就赋值,默认为全局变量;在严格模式下禁止这样做,全局变量必须显式声明。

        “use strict”;

        v=1;  /*报错,v未声明*/

        for(i=0;i<2;i++){

          /*报错,i未声明*/

        }

      - 禁止this关键字指向全局对象

        function fn(){

          return !this;  /*返回false,因为“this”指向全局对象,“!this”就是false;*/

        }

        function fn(){

          "use strict";

          return !this;  /*返回true,因为严格模式下,this的值为undefined,所以“!this”为true;*/

        }

        因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。

        function fn(){

          "use strict";

          this.num=1;

        }

        fn();  /*报错,this未定义*/

      - 禁止删除变量

        严格模式下,无法删除变量。只有configurable设置为true的对象属性,才能被删除。

        “use strict”;

        var x;

        delete x;  /*语法错误*/

        var o=Object.create(null,{'x':{

          value:1;

          configurable:true;

        }})

        delete o.x;  /*删除成功*/

      - 对象不能有重名的属性

        正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。在严格模式下,这属于语法错误。

        “use strict”;

        var fn={

          a:1,

          a:2  /*语法错误*/

        }

      - 函数不能有重名的参数

        正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取,严格模式下,这属于语法错误。

        “use strict”;

        function fn(a,a,b){  /*语法错误*/

          return ..

        }

  • 相关阅读:
    【Linux_Unix系统编程】Chapter4 文件IO
    【Unix网络编程】chapter6 IO复用:select和poll函数
    【Unix网络编程】 chapter5 TCP客户,服务器程序实例
    【Unix网络编程】chapter3 套接字编程简介
    VS自动编译脚本
    【Python编程:从入门到实践】chapter4 操作列表
    【Python编程:从入门到实践】chapter3 列表简介
    【Python编程:从入门到实践】chapter2 变量和简单数据类型
    【Unix网络编程】chapter2传输层:TCP,UDP和SCTP
    vim配置编辑php
  • 原文地址:https://www.cnblogs.com/meway/p/5824714.html
Copyright © 2011-2022 走看看