aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/errors/cant_assign_to_property/index.html
blob: 62988bcd18eb852ee7be4e1b7b16249e20d45142 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
---
title: 'TypeError: can''t assign to property "x" on "y": not an object'
slug: Web/JavaScript/Reference/Errors/Cant_assign_to_property
tags:
  - Error
  - Errors
  - JavaScript
  - TypeError
translation_of: Web/JavaScript/Reference/Errors/Cant_assign_to_property
---
<div>{{jsSidebar("Errors")}}</div>

<p>JavaScript の strict モードの例外 "can't assign to property" は、<a href="/ja/docs/Glossary/Primitive">プリミティブ</a>値、例えば<a href="/ja/docs/Glossary/Symbol">シンボル</a><a href="/ja/docs/Glossary/String">文字列</a><a href="/ja/docs/Glossary/Number">数値</a><a href="/ja/docs/Glossary/Boolean">論理値</a>などにプロパティを作成しようとしたときに発生します。<a href="/ja/docs/Glossary/Primitive">プリミティブ</a>値はいかなる<a href="/ja/docs/Glossary/property/JavaScript">プロパティ</a>を持つこともできません。</p>

<h2 id="Message">エラーメッセージ</h2>

<pre class="brush: js">TypeError: can't assign to property &quot;x&quot; on {y}: not an object (Firefox)
TypeError: Cannot create property 'x' on {y} (Chrome)
</pre>

<h2 id="Error_type">エラーの種類</h2>

<p>{{jsxref("TypeError")}}</p>

<h2 id="What_went_wrong">エラーの原因</h2>

<p>{{jsxref("Strict_mode", "Strict モード", "", 1)}}では、 {{jsxref("TypeError")}}<a href="/ja/docs/Glossary/Primitive">プリミティブ</a>値、例えば<a href="/ja/docs/Glossary/Symbol">シンボル</a><a href="/ja/docs/Glossary/String">文字列</a><a href="/ja/docs/Glossary/Number">数値</a><a href="/ja/docs/Glossary/Boolean">論理値</a>などにプロパティを作成しようとしたときに発生します。<a href="/ja/docs/Glossary/Primitive">プリミティブ</a>値はいかなる<a href="/ja/docs/Glossary/property/JavaScript">プロパティ</a>を持つこともできません。</p>

<p>想定外の場所に想定外の値が流れてきたり、 {{jsxref("String")}}{{jsxref("Number")}} のオブジェクトバリアントが想定されていたりすることが問題となることがあります。</p>

<h2 id="Examples"></h2>

<h3 id="Invalid_cases">無効な場合</h3>

<pre class="brush: js example-bad">'use strict';

var foo = "my string";
// 次の行は strict モードでない場合は何もしません。
foo.bar = {}; // TypeError: can't assign to property "bar" on "my string": not an object
</pre>

<h3 id="Fixing_the_issue">問題の修正</h3>

<p>このような場所で<a href="/ja/docs/Glossary/Primitive">プリミティブ</a>値を使用しないようにコードを修正するか、 {{jsxref("Object")}} と同等のオブジェクトを生成して問題を修正するかします。</p>

<pre class="brush: js example-good">'use strict';

var foo = new String("my string");
foo.bar = {};
</pre>

<h2 id="See_also">関連情報</h2>

<ul>
  <li>{{jsxref("Strict_mode", "Strict モード", "", 1)}}</li>
  <li><a href="/ja/docs/Glossary/Primitive">プリミティブ</a></li>
</ul>