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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
---
title: Object.isFrozen()
slug: Web/JavaScript/Reference/Global_Objects/Object/isFrozen
translation_of: Web/JavaScript/Reference/Global_Objects/Object/isFrozen
---
<div>{{JSRef}}</div>
<p><code><strong>Object.isFrozen()</strong></code> gibt an ob ein Objekt {{jsxref("Object.freeze()", "eingefroren", "", 1)}} ist.</p>
<div>{{EmbedInteractiveExample("pages/js/object-isfrozen.html")}}</div>
<h2 id="Syntax">Syntax</h2>
<pre class="syntaxbox"><code>Object.isFrozen(<var>obj</var>)</code></pre>
<h3 id="Parameter">Parameter</h3>
<dl>
<dt><code>obj</code></dt>
<dd>Das Objekt, welches überprüft werden soll.</dd>
</dl>
<h3 id="Rückgabewert">Rückgabewert</h3>
<p>Ein {{jsxref("Boolean")}}-Wert, der angibt ob das Objekt eingefroren ist oder nicht.</p>
<h2 id="Beschreibung">Beschreibung</h2>
<p>Ein Objekt gilt dann und nur dann als eingefroren, wenn es nicht {{jsxref("Object.isExtensible()", "erweiterbar", "", 1)}} ist, all seine Eigenschaften nicht konfigurierbar sind und all seine Daten-Eigenschaften (d.h. Eigenschaften die nicht durch Getter oder Setter definiert sind) nicht schreibbar sind.</p>
<h2 id="Beispiele">Beispiele</h2>
<pre class="brush: js">// Ein neues Objekt ist erweiterbar, also nicht eingefroren.
Object.isFrozen({}); // === false
// An leeres Objekt, das nicht erweiterbar ist,
// ist sinnlos eingefroren.
var sinnlos = Object.preventExtensions({});
Object.isFrozen(sinnlos); // === true
// Ein neues Objekt mit einer einzelnen Eigenschaft, ist auch erweiterbar,
// ergo nicht eingefroren.
var eineEigenschaft = { p: 42 };
Object.isFrozen(eineEigenschaft); // === false
// Das Objekt nicht erweiterbar zu machen, friert es nicht ein,
// da die Eigenschaft immer nocht konfigurierbar und schreibbar ist.
Object.preventExtensions(eineEigenschaft);
Object.isFrozen(eineEigenschaft); // === false
// ...wenn man die Eigenschaft aber löscht,
// wird das Objekt sinnlos
delete eineEigenschaft.p;
Object.isFrozen(eineEigenschaft); // === true
// Ein nicht erweiterbares Objekt, mit einer nicht schreibbaren
// jedoch konifgurierbaren Eigenschaft gilt als nicht eingefroren.
var nichtSchreibbar = { e: 'plep' };
Object.preventExtensions(nichtSchreibbar);
Object.defineProperty(nichtSchreibbar, 'e', {
writable: false
}); // `e` wird nicht schreibbar
Object.isFrozen(nichtSchreibbar); // === false
// Wird diese Eigenschaft nicht konfigurierbar,
// so friert das Objekt ein.
Object.defineProperty(nichtSchreibbar, 'e', {
configurable: false
}); // `e` wird nicht konfigurierbar
Object.isFrozen(nichtSchreibbar); // === true
// Ein nicht erweiterbares Objekt, mit einer nicht konfigurierbaren
// jedoch schreibbaren Eigenschaft gilt ebenfalls als nicht eingefroren.
var nichtKonfigurierbar = { release: 'the kraken!' };
Object.preventExtensions(nichtKonfigurierbar);
Object.defineProperty(nichtKonfigurierbar, 'release', {
configurable: false
});
Object.isFrozen(nichtKonfigurierbar); // === false
// Wird diese Eigenschaft nicht schreibbar,
// so friert das Objekt ein.
Object.defineProperty(nichtKonfigurierbar, 'release', {
writable: false
});
Object.isFrozen(nichtKonfigurierbar); // === true
// Ein nicht erweiterbares Objekt, mit einer konfigurierbaren
// dynamischen Eigenschaft (get/set) ist nicht eingefroren.
var dynamisch = { get food() { return 'yum'; } };
Object.preventExtensions(dynamisch);
Object.isFrozen(dynamisch); // === false
// ABER, wird diese Eigenschaft nicht konfigurierbar,
// friert das Objekt ein.
Object.defineProperty(dynamisch, 'food', {
configurable: false
});
Object.isFrozen(dynamisch); // === true
// Am Ende ist die einfachste Methode um ein Objekt einzufrieren,
// Object.freeze aufzurufen.
var eingefroren = { 1: 81 };
Object.isFrozen(eingefroren); // === false
Object.freeze(eingefroren);
Object.isFrozen(eingefroren); // === true
// Per Definition ist ein eingefrorenes Objekt nicht erweiterbar.
Object.isExtensible(eingefroren); // === false
// Und es ist ebenfalls versiegelt.
Object.isSealed(eingefroren); // === true
</pre>
<h2 id="Anmerkungen">Anmerkungen</h2>
<p>In ES5, wirft die Methode einen {{jsxref("TypeError")}}, wenn der Parameter kein primitives Objekt ist.</p>
<p>In ES2015 wird der Parameter, sollte er kein primitives Objekt sein, als bereits eingefrorenes Objekt betrachtet und gibt dementsprechend einfach <code>true</code> zurück.</p>
<pre class="brush: js">Object.isFrozen(1);
// TypeError: 1 is not an object (ES5 code)
Object.isFrozen(1);
// true (ES2015 code)
</pre>
<h2 id="Spezifikationen">Spezifikationen</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Spezifikation</th>
<th scope="col">Status</th>
<th scope="col">Kommentar</th>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.2.3.12', 'Object.isFrozen')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td>Initiale Definition. In JavaScript 1.8.5 implementiert.</td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-object.isfrozen', 'Object.isFrozen')}}</td>
<td>{{Spec2('ES6')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-object.isfrozen', 'Object.isFrozen')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="Browser_Kompatibilität">Browser Kompatibilität</h2>
<div>
<p>{{Compat("javascript.builtins.Object.isFrozen")}}</p>
</div>
<h2 id="Siehe_auch">Siehe auch</h2>
<ul>
<li>{{jsxref("Object.freeze()")}}</li>
<li>{{jsxref("Object.preventExtensions()")}}</li>
<li>{{jsxref("Object.isExtensible()")}}</li>
<li>{{jsxref("Object.seal()")}}</li>
<li>{{jsxref("Object.isSealed()")}}</li>
</ul>
|