为了转生而点技能-JavaScript,day15(Strict mode摘要整理

严格模式(Strict mode):

浏览器:在Strict mode跟没有Strict mode下的浏览器会有不同的执行结果。
如何进入Strict mode:

在scripts中必须在第一行打use strict才会整篇都生效。
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <script>        'use strict'
函式(function)中第一行登打use strict进入Strict mode,但是Strict mode的效果只侷限在该函式。
        function foo1() {            console.log(this);        }        foo1();                      //指向window物件        function foo() {            'use strict';           //进入Strict mode            console.log(this);        }        foo();                      //undefined

特徵:某些条件下会报错

* 直接定义未宣告变数

    <script>        'use strict'        myName = 'Emma';   //Uncaught ReferenceError

* 不允许对变数及函式使用delete,会出现Uncaught SyntaxError。

    <script>        'use strict'        var myName = 'Emma';        delete myName;   //Uncaught SyntaxError
    <script>        'use strict'        function sum(a, b) {            return a + b;        }        delete sum;   //Uncaught SyntaxError

* 不能接受重複的参数名称

    <script>        'use strict'        function square(a, a) {      // Uncaught SyntaxError            return a * a;        }        console.log(square(2, 2));

* silently fail失效:在非Strict mode下,有些错误不会被执行但是也不会报错中断,但是在Strict mode下会报错中断。

不可写入的属性赋值:
Object.defineProperty:会对一个物件定义、或是修改现有的属性。执行后会回传定义完的物件。
    <script>        'use strict'        var obj1 = {};        Object.defineProperty(obj1, "x", { value: 42, writable: false });        obj1.x = 9            //Uncaught TypeError
只提供读取的属性赋值:
    <script>        'use strict';        var obj2 = { get x() { return 17; } };        obj2.x = 5;        //Uncaught TypeError
不能扩展的属性赋值:
Object.preventExtensions:避免物件被新增新的属性。
    <script>        'use strict';        var fixed = {};        Object.preventExtensions(fixed);        fixed.newProp = "ohai"        //Uncaught TypeError

* 不能接受Octal Numbers(八进位)

    <script>        'use strict';        var x = 010;                  // Uncaught SyntaxError        console.log(parseInt(x));

eval失效

在Strict mode下,eval无法再变更原变数。
  <script>        var name = 'Tom';        var name2 = eval("var name = 'Mary';");        console.log(name);          //Mary     <script>        'use strict'        var name = 'Tom';        var name2 = eval("var name = 'Mary';");        console.log(name);          //Tom         
在Strict mode下,eval无法被当成变数名称、function names, 或是 function parameter names。
<script>        'use strict';        var eval = 10;        console.log(eval);     //Uncaught SyntaxError

在Strict mode的this:一般函式呼叫(Simple Call)的 this 值都是 undefined。

参考文章:

JavaScript Strict Mode:https://www.tutorialrepublic.com/javascript-tutorial/javascript-strict-mode.phpMDN:Strict mode:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章