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 ..

        }

  • 相关阅读:
    redhat 6.4下PXE+Kickstart无人值守安装操作系统
    ubuntu14.04安装好Hadoo之后接着安装hbase和介绍常用命令
    避坑之Hadoop安装伪分布式(Hadoop3.2.0/Ubuntu14.04 64位)
    kindeditor文件上传设置文件说明为上传文件名(JSP版)
    sqlmap 扫描注入漏洞
    局域网内访问不同网段的主机(转记)
    cmd创建用户开启3389命令
    用python来更改windows开机密码
    代码安全之上传文件
    web渗透(转)
  • 原文地址:https://www.cnblogs.com/meway/p/5824714.html
Copyright © 2011-2022 走看看