#

  • strictモードの適用は、「スクリプト全体」ではなく、「関数単位での適用」

偶発的にグローバル変数を作成できないようにします

"use strict";
mistypedVaraible = 17; // throws a ReferenceError

代入文で暗黙的に失敗せずに例外が発生する

"use strict";

// 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

削除できないプロパティを削除しようとするとエラー

"use strict";
delete Object.prototype; // throws a TypeError

オブジェクトリテラル内のプロパティ名はユニークであることを必須にします

"use strict";
var o = { p: 1, p: 2 }; // !!! syntax error

関数の引数名がユニークであることを必須にします

function sum(a, a, c) // !!! syntax error
{
  "use strict";
  return a + b + c; // wrong if this code ran
}

8 進数表記を禁止します

"use strict";
var sum = 015 + // !!! syntax error
          197 +
          142;

コード中の変数名と特定の変数定義との対応づけ方法を単純化 - with使用を禁止

"use strict";
var x = 17;
with (obj) // !!! syntax error
{
  // If this weren't strict mode, would this be var x, or
  // would it instead be obj.x?  It's impossible in general
  // to say without running the code, so the name can't be
  // optimized.
  x;
}

まだまだある。。

references

strict mode : MDN

results matching ""

    No results matching ""