最近,我通过Crockford的jslint 输入了一些我的笔记本代码, 它犯了以下错误:

第1行字符1:缺少“严格使用”的语句。

某些搜索, 我意识到有些人在他们的 javascript 代码中添加了“ 严格使用 ” ; 。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并没有揭示此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读该语句有关, 但我不知道效果会是什么 。

那么,什么是“严格使用”;什么是“严格使用”;一切,它意味着什么,它是否仍然相关?

当前的任何浏览器是否响应“ 严格使用 ” ; 字符串, 或是否未来使用 ?


当前回答

“严格”模式引入了5号标本中。

(function() {
  "use strict";
  your code...
})();

刻写“ 严格使用 ” ; 在您 js 文件的顶部打开严格的语法检查 。 它为我们执行以下任务 :

如果您试图指定给一个未声明变量, 则显示错误 。 如果您试图指定给一个未声明的变量, 则会阻止您覆盖密钥 js 系统库禁止某些不安全或易出错的语言功能。

个人功能内部的工程也严格使用。在代码中加入严格使用总是更好的做法。

浏览器兼容性问题 : “ 使用” 指令意在向后兼容。 不支持这些指令的浏览器将只看到一个字符串字典, 没有进一步引用。 因此, 它们会通过它继续前进 。

其他回答

John Revig写了个好摘要 写了个好摘要

这只是一个字符串,你放 在你的 javacript 文件( 在文件顶部或函数内部) 中, 看起来像这个 :

"use strict";

输入您的代码不应该对当前浏览器造成任何问题, 因为它只是一条字符串。 它可能会在未来对您的代码造成问题, 如果您的代码违反了 pragma 。 例如, 如果您目前拥有 Foo = “ bar ” 而不先定义 Foo , 您的代码将会开始失效... 在我看来这是件好事。

如果您使用在去年左右的一年中释放的浏览器, 那么它很可能支持 javascript 严格模式。 只有旧浏览器才会在 5 缩写5 成为当前标准之前使用, 不支持它 。

命令周围的引号确保代码在旧浏览器中仍然有效(尽管那些在严格模式下产生语法错误的东西通常只会导致脚本在旧浏览器中发生一些难以探测的故障 ) 。

开发商使用“严格使用”的主要理由如下:

使用“ 使用严格( ) ” 将会确保变量在使用前以 var 来声明 。 例如 : 函数 usestratedemo () { 使用严格 { ; // works finevar a = ' no problem' ; /// does not works fine fine and problem k = “ problem” // 即便如此, 也会丢弃错误 object = {` problem' : 'Problection'} ;} n.b: “ 使用严格” 指令仅在脚本或函数开始时得到承认 。 字符串“ argument” 不能用作 varibl 。

简而言之,将减少代码的错误易感性,并反过来使您写好代码。

以阅读更多关于它的内容,您可在此查询。

语句“ 严格使用 ” ; 指示浏览器使用严格模式, 即一个缩写和安全的 Javastrict 特征集 。

特征列表列表(并非详尽无遗)

不允许的全变量 。 (在变量名称中缺少 var 声明和打字符) 静态失效分配将会在严格模式下丢出错误( 指派 nan = 5 ;) 试图删除非可删除属性将会丢弃( 删除对象 . prototype) , 要求对象字典中的所有属性名称都是独特的( var x = {x1: 1, x1: 1, x1: 2}) 函数参数名称必须是独一无二的( 函数和( x, x) {...}) 禁止八语法( var x = 023; 一些 deds 错误地假定前的零 doe

[参考:严格模式,mozilla 开发者网络]


实例:

严格模式代码不能用别名来描述在其中创建的参数对象的属性

function show( msg ){
    msg = 42;
    console.log( msg );          // msg === 42
    console.log( arguments[0] ); // arguments === 42
}
show( "Hey" );

// In strict mode arguments[i] does not track the value of 
// the corresponding named argument, nor does a named argument track the value in the corresponding arguments[i]
function showStrict( msg ){
    "use strict";
    msg = 42;
    console.log( msg );          // msg === 42
    console.log( arguments[0] ); // arguments === "Hey"
}
showStrict( "Hey" );

如果人们担心使用严格使用,

浏览器中的 5 个“ 限制模式” 支持 。 这是什么意思 ? novogeek. com - krishna 的 Webb 。

讨论浏览器支持, 但更重要的是如何安全处理:

function isStrictMode(){
    return !this;
} 
/*
   returns false, since 'this' refers to global object and 
   '!this' becomes false
*/

function isStrictMode(){   
    "use strict";
    return !this;
} 
/* 
   returns true, since in strict mode the keyword 'this'
   does not refer to global object, unlike traditional JS. 
   So here, 'this' is 'undefined' and '!this' becomes true.
*/