aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/javascript/reference/deprecated_and_obsolete_features/index.html
blob: 3700781397ba6c07c26a96e6924512180425966d (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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
---
title: 废弃和过时的特性
slug: Web/JavaScript/Reference/Deprecated_and_obsolete_features
tags:
  - JavaScript
  - 废弃
  - 指南
  - 过时
translation_of: Web/JavaScript/Reference/Deprecated_and_obsolete_features
---
<div>{{JsSidebar("More")}}</div>

<p>本附录列出了那些已经废弃(仍然可用,但是已计划删除)或者过时(已被删除,无法使用)的 JavaScript 特性。</p>

<h2 id="废弃特性">废弃特性</h2>

<p>这些废弃的特性仍然可以使用,但是使用时一定要保持谨慎,因为它们很可能会在未来的某个时间点被移除。应当将其从需要使用的代码中移除。</p>

<h3 id="RegExp_Properties" name="RegExp_Properties">RegExp 对象的属性</h3>

<p>下面的这些属性已经被废弃。注意,这和{{jsxref("String.replace", "替换字符串")}}中使用的同名标记没有直接关系。</p>

<table class="standard-table">
 <tbody>
  <tr>
   <th>属性</th>
   <th>描述</th>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.n", "$1-$9")}}</td>
   <td>
    <p>捕获分组的匹配结果。</p>
   </td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.input", "$_")}}</td>
   <td><code>input</code> 属性的别名。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.multiline", "$*")}}</td>
   <td><code>multiline</code> 属性的别名。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.lastMatch", "$&amp;")}}</td>
   <td><code>lastMatch</code> 属性的别名。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.lastParen", "$+")}}</td>
   <td><code>lastParen</code> 属性的别名。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.leftContext", "$`")}}</td>
   <td><code>leftContext</code> 属性的别名。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.rightContext", "$'")}}</td>
   <td><code>rightContext</code> 属性的别名。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.input", "input")}}</td>
   <td>正则表达式的匹配结果。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.lastMatch", "lastMatch")}}</td>
   <td>上次匹配结果的最后一个字符串。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.lastParen", "lastParen")}}</td>
   <td>上次匹配中,最后一个捕获分组的匹配结果。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.leftContext", "leftContext")}}</td>
   <td>上次匹配结果左边的字符串。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.rightContext", "rightContext")}}</td>
   <td>上次匹配结果右边的字符串。</td>
  </tr>
 </tbody>
</table>

<p>应该使用下面这些 <code>RegExp</code> 实例上的同名属性来代替上面这些 <code>RegExp</code> 对象的属性:</p>

<table class="standard-table">
 <tbody>
  <tr>
   <th>属性</th>
   <th>描述</th>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.global", "global")}}</td>
   <td>该正则是否开启了全局匹配模式。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.ignoreCase", "ignoreCase")}}</td>
   <td>该正则是否开启了忽略大小写模式。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.lastIndex", "lastIndex")}}</td>
   <td>上次成功匹配的索引位置。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.multiline", "multiline")}}</td>
   <td>该正则是否开启了多行模式。</td>
  </tr>
  <tr>
   <td>{{jsxref("RegExp.source", "source")}}</td>
   <td>正则的源文本。</td>
  </tr>
 </tbody>
</table>

<h3 id="RegExp_Methods" name="RegExp_Methods">RegExp 对象的方法</h3>

<p>{{jsxref("RegExp.compile", "compile()")}} 方法已被废弃。</p>

<p><code>valueOf</code> 方法已被废弃。使用 {{jsxref("Object.valueOf()")}} 代替它。</p>

<h3 id="Function_对象的属性">Function 对象的属性</h3>

<p>{{jsxref("Global_Objects/Function/caller", "caller")}}{{jsxref("Global_Objects/Function/arguments", "arguments")}} 属性已经废弃,因为它们会泄漏调用函数的对象。应当在函数内部使用 <code>arguments</code> 对象来代替函数的 <code>arguments</code> 属性。</p>

<h3 id="遗留的生成器">遗留的生成器</h3>

<ul>
 <li>{{jsxref("Statements/Legacy_generator_function", "遗留的生成器函数声明")}}{{jsxref("Operators/Legacy_generator_function", "遗留的生成器函数表达式")}}已被废弃。使用 {{jsxref("Statements/function*", "function* 声明")}}{{jsxref("Operators/function*", "function* 表达式")}}代替它们。</li>
 <li>{{jsxref("Operators/Array_comprehensions", "JS1.7/JS1.8 Array comprehension", "#Differences_to_the_older_JS1.7.2FJS1.8_comprehensions")}}{{jsxref("Operators/Generator_comprehensions", "JS1.7/JS1.8 Generator comprehension", "#Differences_to_the_older_JS1.7.2FJS1.8_comprehensions")}} 已被废弃。</li>
</ul>

<h3 id="迭代器">迭代器</h3>

<ul>
 <li>全局对象 {{jsxref("Global_Objects/StopIteration", "StopIteration")}} 已被废弃。</li>
 <li>全局对象 {{jsxref("Global_Objects/Iterator", "Iterator")}} 已被废弃。</li>
</ul>

<h3 id="Object_对象的方法">Object 对象的方法</h3>

<ul>
 <li>{{jsxref("Object.watch", "watch")}} 方法和 {{jsxref("Object.unwatch", "unwatch")}} 方法已被废弃。使用 {{jsxref("Proxy")}} 并编写相应的捕获器代替它们。</li>
 <li><code>__iterator__</code> 方法已被废弃。</li>
 <li>{{jsxref("Object.noSuchMethod", "__noSuchMethod__")}} 方法已被废弃。使用 {{jsxref("Proxy")}} 并编写相应的捕获器作为代替。</li>
</ul>

<h3 id="Date_对象的方法">Date 对象的方法</h3>

<ul>
 <li>{{jsxref("Global_Objects/Date/getYear", "getYear")}} 方法和 {{jsxref("Global_Objects/Date/setYear", "setYear")}} 方法受千年虫问题(Year-2000-Problem)影响,已被 {{jsxref("Global_Objects/Date/getFullYear", "getFullYear")}} 方法和 {{jsxref("Global_Objects/Date/setFullYear", "setFullYear")}} 方法代替。</li>
 <li>应当使用 {{jsxref("Global_Objects/Date/toISOString", "toISOString")}} 方法代替已废弃的 {{jsxref("Global_Objects/Date/toGMTString", "toGMTString")}} 方法。</li>
 <li>{{jsxref("Global_Objects/Date/toLocaleFormat", "toLocaleFormat")}} 已被废弃。</li>
</ul>

<h3 id="函数">函数</h3>

<ul>
 <li>{{jsxref("Operators/Expression_closures", "表达式闭包")}}已被废弃。请用普通{{jsxref("Operators/function", "函数")}}{{jsxref("Functions/Arrow_functions", "箭头函数")}}代替它。</li>
</ul>

<h3 id="Proxy">Proxy</h3>

<ul>
 <li><code><a href="/zh-CN/docs/Archive/Web/Old_Proxy_API">Proxy.create()</a></code><code><a href="/zh-CN/docs/Archive/Web/Old_Proxy_API">Proxy.createFunction()</a></code> 已被废弃。使用 {{jsxref("Proxy")}} 即可。</li>
 <li>下列捕获器已经过时:
  <ul>
   <li><code>hasOwn</code> (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=980565">bug 980565</a>, Firefox 33).</li>
   <li><code>getEnumerablePropertyKeys</code> (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=783829">bug 783829</a>, Firefox 37)</li>
   <li><code>getOwnPropertyNames</code> (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1007334">bug 1007334</a>, Firefox 33)</li>
   <li><code>keys</code> (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1007334">bug 1007334</a>, Firefox 33)</li>
  </ul>
 </li>
</ul>

<h3 id="Escape_Sequences" name="Escape_Sequences">转义序列</h3>

<p>字符串字面量(literal)和正则表达式字面量中的八进制转义序列(反斜杠 <code>\</code> 后跟一到三位的八进制数字)已被废弃。</p>

<p>{{jsxref("Global_Objects/escape", "escape")}} 函数和 {{jsxref("Global_Objects/unescape", "unescape")}}函数已被废弃。使用 {{jsxref("Global_Objects/encodeURI", "encodeURI")}}{{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent")}}{{jsxref("Global_Objects/decodeURI", "decodeURI")}}{{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent")}} 对特殊字符进行转义序列编码和解码。</p>

<h3 id="String_对象的方法">String 对象的方法</h3>

<ul>
 <li><a href="/en-US/docs/tag/HTML%20wrapper%20methods">HTML 封装方法</a>,比如 {{jsxref("String.prototype.fontsize")}}{{jsxref("String.prototype.big")}},已被废弃。</li>
 <li>{{jsxref("String.prototype.quote")}} 已在 Firefox 37 中被移除。</li>
 <li>non standard <code>flags</code> parameter in {{jsxref("String.prototype.search")}}, {{jsxref("String.prototype.match")}}, and {{jsxref("String.prototype.replace")}} are deprecated.</li>
 <li>{{jsxref("String.prototype.substr")}} probably won't be removed anytime soon, but it's defined in <a href="https://www.ecma-international.org/ecma-262/9.0/index.html#sec-string.prototype.substr" rel="noopener">Annex B</a> of the ECMA-262 standard, whose <a href="https://www.ecma-international.org/ecma-262/9.0/index.html#sec-additional-ecmascript-features-for-web-browsers">introduction</a> states: "… Programmers should not use or assume the existence of these features and behaviours when writing new ECMAScript code. …"</li>
</ul>

<h2 id="过时特性">过时特性</h2>

<p>这些过时的特性已经完全被删除,不能在当前或者未来版本的 JavaScript 中使用了。</p>

<h3 id="Object_对象">Object 对象</h3>

<table class="standard-table">
 <tbody>
  <tr>
   <th>属性</th>
   <th>描述</th>
  </tr>
  <tr>
   <td>{{jsxref("Global_Objects/Object/count", "__count__")}}</td>
   <td>返回用户自定义对象上的可枚举自身属性的个数。</td>
  </tr>
  <tr>
   <td>{{jsxref("Global_Objects/Object/Parent", "__parent__")}}</td>
   <td>指向一个对象的上下文。</td>
  </tr>
  <tr>
   <td>{{jsxref("Global_Objects/Object/eval", "Object.prototype.eval()")}}</td>
   <td>在指定对象的上下文上执行一个包含 JavaScript 代码的字符串。</td>
  </tr>
  <tr>
   <td>{{jsxref("Object.observe()")}}</td>
   <td>Asynchronously observing the changes to an object.</td>
  </tr>
  <tr>
   <td>{{jsxref("Object.unobserve()")}}</td>
   <td>Remove observers.</td>
  </tr>
  <tr>
   <td>{{jsxref("Object.getNotifier()")}}</td>
   <td>Creates an object that allows to synthetically trigger a change.</td>
  </tr>
 </tbody>
</table>

<h3 id="函数_2">函数</h3>

<table class="standard-table">
 <tbody>
  <tr>
   <th>属性</th>
   <th>描述</th>
  </tr>
  <tr>
   <td>{{jsxref("Global_Objects/Function/arity", "arity")}}</td>
   <td>形参的数量。</td>
  </tr>
 </tbody>
</table>

<h3 id="Array_对象">Array 对象</h3>

<table class="standard-table">
 <tbody>
  <tr>
   <td>属性</td>
   <td>描述</td>
  </tr>
  <tr>
   <td>{{jsxref("Array.observe()")}}</td>
   <td>Asynchronously observing changes to Arrays.</td>
  </tr>
  <tr>
   <td>{{jsxref("Array.unobserve()")}}</td>
   <td>Remove observers.</td>
  </tr>
 </tbody>
</table>

<h3 id="Number_对象">Number 对象</h3>

<ul>
 <li>{{jsxref("Number.toInteger()")}}</li>
</ul>

<h3 id="ParallelArray_对象">ParallelArray 对象</h3>

<ul>
 <li>{{jsxref("ParallelArray")}}</li>
</ul>

<h3 id="声明">声明</h3>

<ul>
 <li>{{jsxref("Statements/for_each...in", "for each...in")}} 声明已被废弃。使用 {{jsxref("Statements/for...of", "for...of")}} 作为代替。</li>
 <li>解构 {{jsxref("Statements/for...in", "for...in")}} 声明已被废弃。使用 {{jsxref("Statements/for...of", "for...of")}} 作为代替。</li>
 <li>let 区块和 let 表达式已被废弃。</li>
</ul>

<h3 id="E4X">E4X</h3>

<p>详见 <a href="/en-US/docs/Archive/Web/E4X">E4X</a></p>

<h3 id="变量引用语法(Sharp_variables)">变量引用语法(Sharp variables)</h3>

<p>详见 <a href="/en-US/docs/Archive/Web/Sharp_variables_in_JavaScript">JavaScript 中的变量引用语法</a></p>