Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

TypeError: "x" is read-only

JavaScript のstrict モードのみの例外 "is read-only" は、代入されたグローバル変数またはオブジェクトプロパティが読み取り専用プロパティであった場合に発生します。

エラーメッセージ

js
TypeError: Assignment to read-only properties is not allowed in strict mode (Edge)TypeError: "x" is read-only (Firefox)TypeError: 0 is read-only (Firefox)TypeError: Cannot assign to read only property 'x' of #<Object> (Chrome)TypeError: Cannot assign to read only property '0' of [object Array] (Chrome)

エラーの種類

エラーの原因

代入しようとしたグローバル変数、またはオブジェクトのプロパティが読み取り専用プロパティです。 (技術的には、non-writable データプロパティです。)

このエラーは、strict モードのコードにだけ発生します。 strict コードではない場合、割り当ては無視されるだけです。

無効な場合

読み取り専用プロパティはさほど一般的ではありませんが、Object.defineProperty()、またはObject.freeze() を使用して生成することができます。

js
"use strict";var obj = Object.freeze({ name: "Elsa", score: 157 });obj.score = 0; // TypeError("use strict");Object.defineProperty(this, "LUNG_COUNT", { value: 2, writable: false });LUNG_COUNT = 3; // TypeError("use strict");var frozenArray = Object.freeze([0, 1, 2]);frozenArray[0]++; // TypeError

JavaScript の組み込みにも、いくつか読み取り専用プロパティがあります。数学的な定数を再定義しようとしたとします。

js
"use strict";Math.PI = 4; // TypeError

残念ながらできません。

グローバル変数のundefined も読み取り専用のため、このようにすると悪名高い "undefined is not a function" エラーが発生します。

js
"use strict";undefined = function () {}; // TypeError: "undefined" is read-only

有効な場合

js
"use strict";var obj = Object.freeze({ name: "Score", points: 157 });obj = { name: obj.name, points: 0 }; // 新しいオブジェクトで置き換える("use strict");var LUNG_COUNT = 2; // `var` が使われているので、読み取り専用ではないLUNG_COUNT = 3; // ok (解剖学的にはおかしいけれども)

関連情報

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp