JavaScript中的“use strict”不起作用?

时间:2013-01-20 14:49:52

标签: javascript

根据this article

  

在JavaScript代码中添加“use strict”作为第一个语句¹   将对整个

实施严格模式

为什么:

"use strict";
012; 

不会抛出错误

(function () {
    "use strict";
    012; })();

呢? (严格模式下不允许使用八进制文字。)

John resig says nothing about it. he just says :

  

简单。把它放在一个程序的顶部,以便为整个程序启用它   脚本:

     

“使用严格”;或者将其置于一个函数中以打开严格模式   只在这种背景下。

     

function imStrict(){“use strict”; // ...你的代码......}

编辑:

enter image description here

编辑#2。

我在控制台中测试了代码。(chrome)。在jsbin示例中 - 它正在工作。不过,我不明白为什么它在控制台中表现不同。

3 个答案:

答案 0 :(得分:2)

会抛出错误。

quentin@workstation:~ # cat > tmp/foo.js
"use strict";
012; 

quentin@workstation:~ # node tmp/foo.js

/users/quentin/tmp/foo.js:2
012; 
^^^

module.js:434
  var compiledWrapper = runInThisContext(wrapper, filename, true);
                        ^
SyntaxError: Octal literals are not allowed in strict mode.
    at Module._compile (module.js:434:25)
    at Object..js (module.js:464:10)
    at Module.load (module.js:353:31)
    at Function._load (module.js:311:12)
    at Array.0 (module.js:484:10)
    at EventEmitter._tickCallback (node.js:190:38)

答案 1 :(得分:1)

控制台的行为与其他地方的行为方式不同,请尝试在浏览器中打开以下内容,然后重新显示错误,而无需将其包装在函数中。

<!doctype html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>use strict</title>
        <script>
"use strict";
012;
        </script>
    </head>
    <body>
    </body>
</html>

您可以通过仅键入~+等来确定控制台的实施方式与直接执行不同(您将获得SyntaxError: Unexpected token })。 通过直接编写这样的代码可以重现类似的行为(我不会把它称为相同的,因为我不知道控制台是如何做的)

example: { // labeled block
    "use strict"; // your code
    012;
} // end of block, no SyntaxError thrown for strict

答案 2 :(得分:-1)

012是八进制文字,在严格模式下不允许,因为它被ECMA-262第3版弃用。 JavaScript 1.5仍支持八进制整数文字以实现向后兼容。并且您的示例正在抛出错误!

你有3种可能性。

  1. 删除八进制文字

  2. 不要使用严格模式

  3. 或者您可以先使用八进制文字,并将所有代码包装在匿名函数中,并将严格模式限制为您立即调用的函数表达式(iife):

  4. 012

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