「JavaScript/strictモード」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
1 行
{{Nav}}
'''Strict モード'''は、通常はエラーとはせず逃していたプログラミング上の省略をエラーにするなど、より厳格に振る舞うモードです。
Strict モードは、ECMAScript 2009 = ES5 で導入されました<ref>初見: https://www.ecma-international.org/wp-content/uploads/ECMA-262_5th_edition_december_2009.pdf#page=61 10.1.1 Strict Mode Code、現行: https://262.ecma-international.org/#sec-strict-mode-of-ecmascript C The Strict Mode of ECMAScript</ref>。
 
7 行
 
'''スクリプト全体をStrict モードにする場合'''
<sourcesyntaxhighlight lang="javascript" highlight="1" line>
'use strict';
var msg = "Hello strict world!";
console.log(msg);
</syntaxhighlight>
</source>
この例では怪しい兆候がないので、Hello strict world! が表示されました。
 
<sourcesyntaxhighlight lang="javascript" highlight="2" line>
'use strict';
msg = "Hello strict world!";
console.log(msg);
</syntaxhighlight>
</source>
1箇所変更しました。
実行すると、'''ReferenceError: msg is not defined''' となります。
24 行
 
{{code|'use strict';}} をとってみます。
<sourcesyntaxhighlight lang="javascript" highlight="1" line>
msg = "Hello strict world!";
console.log(msg);
</syntaxhighlight>
</source>
Hello strict world! が表示されました。
 
'''関数単位でStrict モードにする場合'''
<sourcesyntaxhighlight lang="javascript" highlight="8,10" line>
console.log(0)
function nostrict() {
45 行
console.log(2)
// SyntaxError: Octal literals are not allowed in strict mode.
</syntaxhighlight>
</source>
console.log() による表示は全く行われないでエラーで止まります。
0に[0-7]が続く書式の八進数表現はstrictモードではエラーです。
 
== class 定義は自動的に strict モード ==
ES6で導入された[[JavaScript/クラス|クラス]](class)の定義の中では、自動的にstrict モードになります。
 
== strict モードのエラー対象 ==