“use strict”是什么(用JavaScript表示)

本文概述

  • 防止对象重复
  • 禁止使用with陈述式
  • 防止全局变量声明
  • 禁止将保留关键字用作变量名
  • 将参数作为标识符或修改Arguments变量
  • 在eval函数中声明的变量
  • 禁止八进制语法
  • 扩展不可扩展的对象属性
  • 支持的浏览器
严格模式对解释器处理Javascript的方式进行了几处更改。严格模式通过将它们更改为引发错误来消除一些JavaScript静默错误。严格模式可修复导致JavaScript引擎难以执行优化的错误:有时可以使严格模式代码比非严格模式下的相同代码运行得更快, 并且禁止在将来的ECMAScript版本中定义某些语法(例如, 类等) 。
严格模式适用于整个脚本或单个功能。它不适用于{}中包含的语句块;尝试将其应用于此类上下文不会执行任何操作。基本上, strict的用途是在代码中引入更好的错误检查。
可以启用严格模式, 在脚本” use strict” 的顶部添加具有以下内容的字符串;即:
在脚本标签或引用的文件上:
< script> "use strict"; // Execute some script strictly< /script>

功能上(匿名或非匿名)
(function(){"use strict"; // All the code will be analyzed in strict mode})(); function myAction(){ "use strict"; // Threat me strictly}

防止对象重复 以下对象具有2个具有相同名称的属性:
var myObject = {hello:"A string", anotherProperty:2, other:"Hi", hello:"A string"};

如果没有严格模式, 则对象将具有属性, 但具有最新的声明值。在严格模式下, js解释器将抛出严格模式下不允许的对象常量中的Uncaught SyntaxError:Duplicate data属性。
禁止使用with陈述式 在严格模式下使用with语句:
"use strict"; var a, x, y; var r = 10; with (Math) { a = PI * r * r; x = r * cos(PI); y = r * sin(PI / 2); }

将抛出Uncaught SyntaxError:严格模式代码可能不包含with语句。不建议使用with语句, 因为它可能导致令人困惑的错误和兼容性问题。
防止全局变量声明 不允许在范围内声明全局变量, 例如:
var history = []; function ExecuteSomething(message){// Note that the code doesnt use => var toSaveInHistory, therefore there is an errortoSaveInHistory = message; return console.log(message); }ExecuteSomething("My custom log");

先前的代码将引发Uncaught ReferenceError:未定义toSaveInHistory, 因为确实没有在闭包中声明toSaveInHistory。严格模式禁止隐式创建全局属性。
禁止将保留关键字用作变量名 使用将来的保留字作为标识符是无效的。标识符名称在严格模式下保留, 即:
  • 实施
  • 接口
  • private
  • protected
  • public
  • static
将参数作为标识符或修改Arguments变量 在严格模式下, 变量” arguments” (在所有函数中均被标识为数组, 该变量包含已发送给函数执行的所有参数, 请在此处详细了解参数变量的工作原理)不能用作标识符(变量或函数名, 参数名, 等等)也不会更改局部参数对象的成员的值, 即:
"use strict"; var arguments = "something"; // Throws => Invalid usage of 'arguments' in strict mode// orfunction executeSomething(age, name){arguments[0] = 12; return true; }executeSomething(15, "Batman");

在eval函数中声明的变量 如果在eval函数内部声明了变量, 则不能在该函数外部使用该变量, 即:
eval("var myVariable = 10; "); document.write(myVariable);

之前的代码抛出” myVariable” 是未定义的。
禁止八进制语法 不允许将八进制值分配给数字文字, 或尝试对八进制值使用转义符, 即:
var myOctal = 012; var myEscapedOctal = \012;

前面的代码抛出严格模式下不允许的八进制数字文字和转义字符。
扩展不可扩展的对象属性 如果没有严格模式, 则许多事情都会被静默忽略, 因为将属性添加到不可扩展的对象不会产生任何效果。但是, 如果启用了严格模式, 则会出现异常, 即:
var myItem = {}; Object.preventExtensions(myItem); myItem.otherProperty = 222;

前面的代码抛出” 无法为不可扩展对象创建属性” 。
支持的浏览器 【“ use strict” 是什么(用JavaScript表示)】当前所有主要浏览器(不包括IE 9和更低版本)都支持使用strict。有关更多信息, 请参阅我可以使用use strict。但是, 在Web上有很多地方, 他们会告诉你在ie8或9中使用严格模式不是问题, 如果你仍然怀疑的话, 请相信microsoft:
&#8220;use strict&#8221;是什么(用JavaScript表示)

文章图片

    推荐阅读