Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是;使用“严格的”;在JavaScript中执行,其背后的原因是什么?_Javascript_Syntax_Jslint_Use Strict - Fatal编程技术网

什么是;使用“严格的”;在JavaScript中执行,其背后的原因是什么?

什么是;使用“严格的”;在JavaScript中执行,其背后的原因是什么?,javascript,syntax,jslint,use-strict,Javascript,Syntax,Jslint,Use Strict,最近,我通过Crockford运行了一些JavaScript代码,它给出了以下错误: 第1行字符1出现问题:缺少“use strict”语句 做了一些搜索,我意识到有些人添加了“使用严格”转换为他们的JavaScript代码。一旦我添加了语句,错误就不再出现了。不幸的是,谷歌没有透露这个字符串语句背后的很多历史。当然,这一定与浏览器如何解释JavaScript有关,但我不知道会产生什么效果 那么什么是“严格使用”所有关于,它意味着什么,它仍然相关吗 当前的浏览器是否响应的“严格使用”字符串还是供

最近,我通过Crockford运行了一些JavaScript代码,它给出了以下错误:

第1行字符1出现问题:缺少“use strict”语句

做了一些搜索,我意识到有些人添加了
“使用严格”
转换为他们的JavaScript代码。一旦我添加了语句,错误就不再出现了。不幸的是,谷歌没有透露这个字符串语句背后的很多历史。当然,这一定与浏览器如何解释JavaScript有关,但我不知道会产生什么效果

那么什么是
“严格使用”所有关于,它意味着什么,它仍然相关吗


当前的浏览器是否响应
的“严格使用”字符串还是供将来使用?

这是ECMAScript 5的新功能。约翰·雷斯格写了一篇文章

它只是一个放入JavaScript文件中的字符串(位于文件顶部或函数内部),如下所示:

"use strict";

现在将它放入代码中不会对当前浏览器造成任何问题,因为它只是一个字符串。如果您的代码违反pragma,将来可能会导致代码出现问题。例如,如果您当前有
foo=“bar”
,而没有首先定义
foo
,那么您的代码将开始失败……这在我看来是一件好事。

这是ECMAScript 5的一个新特性。约翰·雷斯格写了一篇文章

它只是一个放入JavaScript文件中的字符串(位于文件顶部或函数内部),如下所示:

"use strict";

现在将它放入代码中不会对当前浏览器造成任何问题,因为它只是一个字符串。如果您的代码违反pragma,将来可能会导致代码出现问题。例如,如果您当前有
foo=“bar”
,而没有首先定义
foo
,那么您的代码将开始失败……这在我看来是一件好事。

这篇关于Javascript严格模式的文章可能会让您感兴趣:

引用一些有趣的部分:

严格模式是ECMAScript 5中的一项新功能,允许您将程序或函数置于“严格”操作上下文中。这种严格的上下文阻止执行某些操作,并引发更多异常

以及:

严格模式有两种帮助:

  • 它捕获一些常见的编码blooper,抛出异常
  • 当采取相对“不安全”的操作(例如访问全局对象)时,它可以防止或抛出错误
  • 它会禁用令人困惑或考虑不周的功能
另外请注意,您可以对整个文件应用“严格模式”。。。或者您只能将其用于特定函数(仍引用John Resig的文章):

//非严格代码。。。
(功能(){
“严格使用”;
//严格定义你的库。。。
})();
//非严格代码。。。
如果必须混合使用新旧代码,这可能会有所帮助;-)

因此,我认为它有点像您可以在Perl中使用的
“use strict”
(因此得名?):它通过检测更多可能导致中断的内容来帮助您减少错误

现在是严格模式


内部(使用
import
export
语句)和,严格模式始终处于启用状态,不能禁用。

这篇关于Javascript严格模式的文章可能会让您感兴趣:

引用一些有趣的部分:

严格模式是ECMAScript 5中的一项新功能,允许您将程序或函数置于“严格”操作上下文中。这种严格的上下文阻止执行某些操作,并引发更多异常

以及:

严格模式有两种帮助:

  • 它捕获一些常见的编码blooper,抛出异常
  • 当采取相对“不安全”的操作(例如访问全局对象)时,它可以防止或抛出错误
  • 它会禁用令人困惑或考虑不周的功能
另外请注意,您可以对整个文件应用“严格模式”。。。或者您只能将其用于特定函数(仍引用John Resig的文章):

//非严格代码。。。
(功能(){
“严格使用”;
//严格定义你的库。。。
})();
//非严格代码。。。
如果必须混合使用新旧代码,这可能会有所帮助;-)

因此,我认为它有点像您可以在Perl中使用的
“use strict”
(因此得名?):它通过检测更多可能导致中断的内容来帮助您减少错误

现在是严格模式


内部(使用
import
export
语句)和,严格模式始终处于启用状态,不能禁用。

如果使用去年左右发布的浏览器,则它很可能支持JavaScript严格模式。只有ECMAScript 5成为当前标准之前的旧浏览器不支持它


命令周围的引号确保代码在较旧的浏览器中也能工作(尽管在严格模式下生成语法错误的东西通常只会导致脚本在较旧的浏览器中以某种难以检测的方式出现故障).

如果您使用去年左右发布的浏览器,那么它很可能支持JavaScript严格模式。只有ECMAScript 5成为当前标准之前的旧浏览器不支持它


命令周围的引号确保代码在较旧的浏览器中也能工作(尽管在严格模式下生成语法错误的东西通常只会导致脚本在较旧的浏览器中以某种难以检测的方式出现故障).

如果人们担心使用
使用strict
,那么这篇文章可能值得一看:


NovoGeek.com-克里希纳的博客

它谈到了浏览器支持,但更重要的是如何安全地处理它
var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};
var tree1Data = { name: 'Banana Tree',age: 100,leafCount: 100000};

function Tree(typeOfTree) {
    var age;
    var leafCount;

    age = typeOfTree.age;
    leafCount = typeOfTree.leafCount;
    nameoftree = typeOfTree.name;
};

var tree1 = new Tree(tree1Data);
console.log(window);
"use strict";
var tree1Data = {
    name: 'Banana Tree',
    age: 100,
    leafCount: 100000,
    name:'Banana Tree'
};
var hasStrictMode = (function() { "use strict"; return this===undefined }());
if(a<b){ function f(){} }
var n = 023;
 function f() {
      "use strict";
      this.a = 1;
 };
 f(); 
 {a: 1, b: 3, a: 7} 
f(a, b, b){}
function f(x){
   "use strict";
   var a = 12;
   b = a + x*35; // error!
}
f();
"use strict";
arguments++;
var obj = { set p(arguments) { } };
try { } catch (arguments) { }
function arguments() { } 
'use strict';
var a = 365;
var b = 030;
// File: myscript.js

'use strict';
var a = 2;
....
function doSomething() {
    'use strict';
    ...
}
(function() {
  "use strict";
  your code...
})();
function useStrictDemo(){
 'use strict';
 //works fine
 var a = 'No Problem';

 //does not work fine and throws error
 k = "problem"

 //even this will throw error
 someObject = {'problem': 'lot of problem'};
}
"use strict";
var arguments = 3.14;    // This will cause an error
 function strict() {
     // Function-level strict mode syntax
     'use strict';
     function nested() { return 'And so am I!'; }
     return "Hi!  I'm a strict mode function!  " + nested();
 }
 function notStrict() { return "I'm not strict."; }

 console.log(strict(), notStrict());
'use strict';
var v = "Hi! I'm a strict mode script!";
console.log(v);
'use strict';

// Assignment to a non-writable global
var undefined = 5; // throws a TypeError
var Infinity = 5; // throws a TypeError

// Assignment to a non-writable property
var obj1 = {};
Object.defineProperty(obj1, 'x', { value: 42, writable: false });
obj1.x = 9; // throws a TypeError

// Assignment to a getter-only property
var obj2 = { get x() { return 17; } };
obj2.x = 5; // throws a TypeError

// Assignment to a new property on a non-extensible object.
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = 'ohai'; // throws a TypeError
function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); // Stack Overflow
"use strict"
function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); 
Uncaught ReferenceError: name is not defined
at getname (<anonymous>:3:15)
at <anonymous>:6:5
var city = "Chicago"
console.log(city) // Prints the city name, i.e. Chicago
city = "Chicago"
console.log(city) // Prints the city name, i.e. Chicago
'use strict';

city = "Chicago"
console.log(city) // Reference Error: asignment is undeclared variable city.
module.exports = {
    env: {
        es6: true
    },
    rules : {
        strict: ['error', 'global'],
        },
    };
    
"use strict";
 function x(p1, p2) {}; 
 delete x; // This will cause an error
 "use strict";
 function x(p1, p1) {};   // This will cause an error
"use strict";
var arguments = "value"; //This will generate an error
var static = "value 2"; //This will also generate an error
"use strict";
myVar = 0; //This will generate an error.
counter = 9;//This will generate an error too.
counter++; 
"use strict";
function myFunc() {
 return true;
}
delete myFunc; //This will generate an error
var myVar = 0;
delete myVar; //This will generate an error too.