aboutsummaryrefslogtreecommitdiff
path: root/files/ca/web/javascript/reference/global_objects/object/isfrozen/index.html
blob: 46c2e24be2159f22b970cce622af64c913f2903c (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
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
174
175
176
177
178
179
180
181
182
---
title: Object.isFrozen()
slug: Web/JavaScript/Reference/Global_Objects/Object/isFrozen
translation_of: Web/JavaScript/Reference/Global_Objects/Object/isFrozen
---
<div>{{JSRef}}</div>

<p>El mètode <code><strong>Object.isFrozen()</strong></code> determina si un objecte està congelat.</p>

<h2 id="Sintaxi">Sintaxi</h2>

<pre class="syntaxbox"><code>Object.isFrozen(<var>obj</var>)</code></pre>

<h3 id="Paràmetres">Paràmetres</h3>

<dl>
 <dt><code>obj</code></dt>
 <dd>L'objecte que es comprovarà si està congelat o no.</dd>
</dl>

<h2 id="Descripció">Descripció</h2>

<p>Un objecte està congelat si i només si no és {{jsxref("Object.isExtensible()", "extensible", "", 1)}}, cap de les seves propietats és configurable, i cap de les seves propietats de dades (és a dir, propietats que no són <em>accessor</em> amb components getter o setter) that is, properties which are not accessor properties with getter or setter components) es poden escriure (modificar el seu valor).</p>

<h2 id="Exemples">Exemples</h2>

<pre class="brush: js">// Els objectes nous són extensibles, així que no estan congelats.
Object.isFrozen({}); // === false

// Un objecte buit que no és extensible està congelat ja que no te propietats que trenquin les restriccions.
var vacuouslyFrozen = Object.preventExtensions({});
Object.isFrozen(vacuouslyFrozen); // === true

// Un objecte nou amb una propietat és extensible, i per tant no està congelat.
var oneProp = { p: 42 };
Object.isFrozen(oneProp); // === false

// Fer-lo no extensible no el fa congelat,
// perquè la propietat encara és configurable (i permet l'escriptura).
Object.preventExtensions(oneProp);
Object.isFrozen(oneProp); // === false

// ...però, un altre cop, si eliminem la propietat ens trobem amb un objecte buit congelat.
delete oneProp.p;
Object.isFrozen(oneProp); // === true

// Un objecte no extensible amb una propietat que no permeti l'escriptura però sí que es configurable no està congelat.
var nonWritable = { e: 'plep' };
Object.preventExtensions(nonWritable);
Object.defineProperty(nonWritable, 'e', { writable: false }); // fer que la propietat no permeti l'escriptura
Object.isFrozen(nonWritable); // === false

// Fer aquesta propietat no configurable fa que l'objecte estigui congelat
Object.defineProperty(nonWritable, 'e', { configurable: false }); // fer la propietat no configurable
Object.isFrozen(nonWritable); // === true

// Un objecte no extensible amb una propietat no configurable però que si permeti l'escriptura tampoc està congelat.
var nonConfigurable = { release: 'the kraken!' };
Object.preventExtensions(nonConfigurable);
Object.defineProperty(nonConfigurable, 'release', { configurable: false });
Object.isFrozen(nonConfigurable); // === false

// Canviar aquesta propietat per a que no permeti l'escriptura fa que l'objecte estigui congelat.
Object.defineProperty(nonConfigurable, 'release', { writable: false });
Object.isFrozen(nonConfigurable); // === true

// Un objecte amb una propietat accessor no extensible no està congelat.
var accessor = { get food() { return 'yum'; } };
Object.preventExtensions(accessor);
Object.isFrozen(accessor); // === false

// ...però si la propietat es fa no configurable l'objecte esdevé congelat.
Object.defineProperty(accessor, 'food', { configurable: false });
Object.isFrozen(accessor); // === true

// La forma més fàcil, però, d'aconseguir congelar un objecte és cridant el mètode Object.freeze al mateix objecte.
var frozen = { 1: 81 };
Object.isFrozen(frozen); // === false
Object.freeze(frozen);
Object.isFrozen(frozen); // === true

// Per definició, un objecte congelat no és extensible.
Object.isExtensible(frozen); // === false

// També per definició, un objecte congelat està segellat.
Object.isSealed(frozen); // === true
</pre>

<h2 id="Notes">Notes</h2>

<p>A l'EcmaScript 5, si l'argument passat a aquest mètode no és un objecte (un valor primitiu), llençarà un <a href="https://developer.mozilla.org/ca/docs/Web/JavaScript/Referencia/Objectes_globals/TypeError" title="L'objecte TypeError representa un error quan el valor no és del tipus esperat."><code>TypeError</code></a>. A l'EcmaScript 6, un argument que no sigui un objecte serà tractat com si fós un objecte congelat ordinari, i simplement el retornarà.</p>

<pre class="brush: js">Object.isFrozen(1);
// TypeError: 1 no és un objecte (codi EcmaScript 5)

Object.isFrozen(1);
// true                          (codi EcmaScript 6)
</pre>

<h2 id="Especificacions">Especificacions</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Especificació</th>
   <th scope="col">Estat</th>
   <th scope="col">Comentaris</th>
  </tr>
  <tr>
   <td>{{SpecName('ES5.1', '#sec-15.2.3.12', 'Object.isFrozen')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td>Definició inicial. Implementat a JavaScript 1.8.5.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-object.isfrozen', 'Object.isFrozen')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="Compatibilitat_amb_navegadors">Compatibilitat amb navegadors</h2>

<div>{{CompatibilityTable}}</div>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Característica</th>
   <th>Chrome</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari</th>
  </tr>
  <tr>
   <td>Suport bàsic</td>
   <td>{{CompatChrome("6")}}</td>
   <td>{{CompatGeckoDesktop("2.0")}}</td>
   <td>{{CompatIE("9")}}</td>
   <td>{{CompatOpera("12")}}</td>
   <td>{{CompatSafari("5.1")}}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Característica</th>
   <th>Android</th>
   <th>Chrome for Android</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>IE Mobile</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
  </tr>
  <tr>
   <td>Suport bàsic</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
  </tr>
 </tbody>
</table>
</div>

<h2 id="Vegeu_també">Vegeu també</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>