本文概述
- 防止对象重复
- 禁止使用with陈述式
- 防止全局变量声明
- 禁止将保留关键字用作变量名
- 将参数作为标识符或修改Arguments变量
- 在eval函数中声明的变量
- 禁止八进制语法
- 扩展不可扩展的对象属性
- 支持的浏览器
严格模式适用于整个脚本或单个功能。它不适用于{}中包含的语句块;尝试将其应用于此类上下文不会执行任何操作。基本上, 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
- 让
"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:
文章图片
推荐阅读
- 如何覆盖JavaScript中的console方法
- 如何使用JavaScript从网络摄像头生成ascii艺术照片
- 如何使用javascript将URL(网站,电子邮件)从字符串转换为html标签
- 如何防止修改JavaScript中的对象并防止它们在控制台中访问
- 如何使用XMLHttpRequest(jQuery Ajax)绕过”Access-Control-Allow-Origin”错误
- 鸿蒙初体验-五子棋
- 在校生下午试题60分通过软考网工经验谈!
- 预告(2009年下半年软考试题及答案51CTO将实时发布)
- iOS开发面试只需知道这些,技术基本通关!(内存管理篇)