aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/orphaned/web/javascript
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/orphaned/web/javascript')
-rw-r--r--files/zh-cn/orphaned/web/javascript/javascript(起步)/index.html292
-rw-r--r--files/zh-cn/orphaned/web/javascript/reference/global_objects/array/prototype/index.html178
-rw-r--r--files/zh-cn/orphaned/web/javascript/reference/global_objects/asyncfunction/prototype/index.html57
-rw-r--r--files/zh-cn/orphaned/web/javascript/reference/global_objects/asynciterator/index.html119
4 files changed, 646 insertions, 0 deletions
diff --git a/files/zh-cn/orphaned/web/javascript/javascript(起步)/index.html b/files/zh-cn/orphaned/web/javascript/javascript(起步)/index.html
new file mode 100644
index 0000000000..b9cd157ec1
--- /dev/null
+++ b/files/zh-cn/orphaned/web/javascript/javascript(起步)/index.html
@@ -0,0 +1,292 @@
+---
+title: javascript(起步)
+slug: Web/JavaScript/javascript(起步)
+tags:
+ - bug-840092
+---
+<h2 id="Why_JavaScript.3F" name="Why_JavaScript.3F">JavaScript是什么?</h2>
+
+<p>作为一门计算机语言,JavaScript本身强大、复杂,且难于理解。但是,你可以用它来开发一系列的应用程序,它有巨大的潜力来改变当前的互联网现状。下面这个应用程序就是一个很好的例子:<a class="external" href="http://local.google.com/">Google Maps</a>。</p>
+
+<p>JavaScript(通称为ECMAScript)最大的优势在于,它基于浏览器,但是通过浏览器的支持可以在不同平台上生产出相同结果。 本文举出的例子是 Google Maps,它几乎可以无差别的运行在 Linux、Windows和Mac OS系统中。 伴随大量JavaScript类库的出现,你现在可以用它很轻易的实现文档导航、DOM元素选择、创建动画、处理事件和开发AJAX应用。同其他因各种利益目的而推动的技术不同,JavaScript是一种真正免费并且被广泛采用的跨平台编程语言。</p>
+
+<h2 id="What_you_should_already_know" name="What_you_should_already_know">你应该知道</h2>
+
+<p>JavaScript是一种非常容易入门的编程语言。你只需要一个文本编辑器和web浏览器就可以开始进行学习。 </p>
+
+<p>在使用 JavaScript进行开发的过程中,可能还会涉及很多其他技术,这不在本文讨论的范围之内。 所以,不要期望在学习的第一天就能开发出一个类似 Google maps 这样的应用程序。</p>
+
+<h2 id="Getting_Started" name="Getting_Started">起步</h2>
+
+<p>JavaScript的起步非常简单。你不需要进行复杂的程序安装,不需要去了解如何使用shell、打包器或编译器。它是通过浏览器来展示的,你所需要做的全部事情就是把你的代码保存为文本文件,然后再浏览器中打开。就这么简单!</p>
+
+<p>JavaScript非常适合作为入门级的编程语言。它直观形象,并且教会学生认识到这是一个在实际生活中非常有用的工具。 对比C、C++和 Java等语言会发现有很大不同,它们只对那些专业的软件开发者来说是有价值的。</p>
+
+<h2 id="Browser_Compatibility_Issues" name="Browser_Compatibility_Issues">浏览器兼容问题</h2>
+
+<p>不同浏览器在功能实现上有很多不同之处。Mozilla, Microsoft IE, Apple Safari 和 Opera 在行为上有很多差异。 我们计划在此记录这些差异 <a href="/en-US/docs/JavaScript/Compatibility" title="en-US/docs/JavaScript/Compatibility">documenting these variations</a>。你可以使用各种跨平台的JavaScript API接口来解决这些兼容性问题。这些API隐藏了浏览器之间的各种差异,提供了通用性的功能函数来方便调用。</p>
+
+<h2 id="How_to_try_the_Examples" name="How_to_try_the_Examples">如何运行示例</h2>
+
+<p>下面的例子都有相同的代码。要执行它们有多种方法,如果你有自己的个人站点,你还可以在站点上把这些例子保存为新的页面。</p>
+
+<p>如果你没有自己的个人站点,你可以在电脑上把这些例子保存下来,并使用你自己的浏览器来执行它们。这就是JavaScript简单的地方,也是它适合做入门语言的原因。你不需要编译器或者开发环境,你只需要一个浏览器就可以开始起步了。</p>
+
+<h2 id="Example:_Catching_a_mouse_click" name="Example:_Catching_a_mouse_click">举例:捕获一个鼠标单击事件</h2>
+
+<p>事件处理 (事件类型、事件注册、冒泡等) 的细节是一个非常宽泛的话题,这个简单的例子并不能说明所有的问题。然而,如果我们不涉及JavaScript事件系统,我们就不能很好展示一个鼠标点击捕获的范例。你只需要记得例子里展示的只是JavaScrpt事件系统里非常表象的一些东西,如果你想要了解更多的内部细节,那你可以去查找更详细的相关资料。</p>
+
+<p>鼠标事件只是浏览器同用户交互过程中所产生的事件系统里的一个子集。下面列举了一些用户在交互过程中产生的具体的鼠标事件:</p>
+
+<ul>
+ <li>Click - 用户点击鼠标时触发</li>
+ <li>DblClick - 用户双击鼠标时触发</li>
+ <li>MouseDown - 用户按下鼠标键触发 (click事件前半部分)</li>
+ <li>MouseUp - 用户释放鼠标键触发 (click事件后半部分)</li>
+ <li>MouseOut - 当鼠标指针离开对象物理边界时触发</li>
+ <li>MouseOver - 当鼠标指针进入对象物理边界时触发</li>
+ <li>MouseMove -当鼠标指针在对象物理边界内移动时触发</li>
+ <li>ContextMenu - 用户点击鼠标右键时触发</li>
+</ul>
+
+<p>捕获事件并注册处理函数最简单的办法就是使用HTML,你可以把事件当成元素属性来使用。例子:</p>
+
+<pre class="brush:js"> &lt;span onclick="alert('Hello World!');"&gt;Click Here&lt;/span&gt;</pre>
+
+<p>要执行的JavaScript代码既可以作为属性值写在行内位置,也可以写成函数并用&lt;script&gt;包裹后放到HTML页面中:</p>
+
+<pre class="brush:js">&lt;script type="text/javascript"&gt;
+ function onclick_callback () {
+ alert ("Hello, World!");
+ }
+&lt;/script&gt;
+&lt;span onclick="onclick_callback();"&gt;Click Here&lt;/span&gt;</pre>
+
+<p>另外,事件对象是可以被捕获和引用,开发者可以通过访问事件对象来获取更多信息,如捕获事件的对象、事件类型、哪个鼠标按键被点击等。我们还用上面的例子来说明:</p>
+
+<pre class="brush:js">&lt;script type="text/javascript"&gt;
+ function onclick_callback(event) {
+ var eType = event.type;
+ /* the following is for compatability */
+ /* Moz populates the target property of the event object */
+ /* IE populates the srcElement property */
+ var eTarget = event.target || event.srcElement;
+
+ alert( "Captured Event (type=" + eType + ", target=" + eTarget );
+ }
+&lt;/script&gt;
+&lt;span onclick="onclick_callback(event);"&gt;Click Here&lt;/span&gt;</pre>
+
+<p>对于事件的注册和接收还用注意一些的是,你可以给任何使用JavaScript生成的HTMLElement对象做相同的操作。下面的例子展示了一个这样的过程:生成span对象,添加到页面中的body,给span注册mouse-over、mouse-out、mouse-down和 mouse-up事件。</p>
+
+<pre class="brush:js">&lt;script type="text/javascript"&gt;
+ function mouseevent_callback(event) {
+ /* The following is for compatability */
+ /* IE does NOT by default pass the event object */
+ /* obtain a ref to the event if one was not given */
+ if (!event) event = window.event;
+
+ /* obtain event type and target as earlier */
+ var eType = event.type;
+ var eTarget = event.target || event.srcElement;
+ alert(eType +' event on element with id: '+ eTarget.id);
+ }
+
+ function onload () {
+ /* obtain a ref to the 'body' element of the page */
+ var body = document.body;
+ /* create a span element to be clicked */
+ var span = document.createElement('span');
+ span.id = 'ExampleSpan';
+ span.appendChild(document.createTextNode ('Click Here!'));
+
+ /* register the span object to receive specific mouse events */
+ span.onmousedown = mouseevent_callback;
+ span.onmouseup = mouseevent_callback;
+ span.onmouseover = mouseevent_callback;
+ span.onmouseout = mouseevent_callback;
+
+ /* display the span on the page */
+ body.appendChild(span);
+}
+&lt;/script&gt;</pre>
+
+<p>{{ draft() }}</p>
+
+<h2 id="Example:_Catching_a_keyboard_event" name="Example:_Catching_a_keyboard_event">举例:捕获一个键盘事件</h2>
+
+<p>同上面的例子类似,键盘事件捕获也依赖于JavaScript事件系统。当键盘上的键被使用的时候触发键盘事件。</p>
+
+<p>下面的列表展示了一些具体的键盘事件,同鼠标事件相比是很少的:</p>
+
+<ul>
+ <li>KeyPress - 按键被按下并且释放后触发</li>
+ <li>KeyDown - 按键被按下但是还没有被释放时触发</li>
+ <li>KeyUp - 按键被释放时触发</li>
+ <li>TextInput ( Webkit浏览器下可以使用,并且只在输入时有效) - 通过粘贴、语音或者键盘输入文本时触发。本文不介绍该事件。</li>
+</ul>
+
+<p>在一个 <a class="new " href="/en-US/docs/DOM/event/keypress" rel="internal">keypress</a> 事件中,键值的Unicode编码会存储到属性keyCode或者<code><a href="/en-US/docs/DOM/event.charCode" rel="internal">charCode</a></code> 中,但是两者不会同时存在。按键会生成一个字母 (如 'a'),这时会把字母的编码存储到<code>charCode</code> 中,注意这里是区分大小写的( <code>charCode</code> 会判断shift键是否同时被按下)。其他情况下,编码会存储到 <code>keyCode中。</code></p>
+
+<p>捕获键盘事件最简单的方法仍然是在HTML中注册键盘事件的处理函数,在元素属性中处理相关事件。 举例:</p>
+
+<pre class="brush:js"> &lt;input type="text" onkeypress="alert ('Hello World!');"&gt;&lt;/input&gt;
+</pre>
+
+<p>同鼠标事件类似,你的 JavaScript代码既可以写到属性值内,也可以作为函数用&lt;script包裹后写到HTML页面中:</p>
+
+<pre class="brush:js">&lt;script type="text/javascript"&gt;
+ function onkeypress_callback () {
+ alert ("Hello, World!");
+ }
+&lt;/script&gt;
+
+&lt;input onkeypress="onkeypress_callback();"&gt;&lt;/input&gt;
+</pre>
+
+<p>捕获事件和引用事件源(一个真实的键被按下时) 的方法同鼠标事件类似:</p>
+
+<pre class="brush:js">&lt;script type="text/javascript"&gt;
+ function onkeypress_callback(evt) {
+ var eType = evt.type; // Will return "keypress" as the event type
+ var eCode = 'keyCode is ' + evt.keyCode;
+ var eChar = 'charCode is ' + evt.charCode;
+
+ alert ("Captured Event (type=" + eType + ", key Unicode value=" + eCode + ", ASCII value=" + eChar + ")");
+ }
+&lt;/script&gt;
+&lt;input onkeypress="onkeypress_callback(event);"&gt;&lt;/input&gt;</pre>
+
+<p>要捕获页面上所有的键盘事件,可以在document上注册和绑定相关的处理函数:</p>
+
+<pre class="brush:js">&lt;script type="text/javascript"&gt;
+ document.onkeypress = key_event;
+ document.onkeydown = key_event;
+ document.onkeyup = key_event;
+
+ function key_event(evt) {
+ var eType = evt.type;
+ var eCode = "ASCII code is " + evt.keyCode;
+ var eChar = 'charCode is ' + evt.charCode;
+
+ alert ("Captured Event (type=" + eType + ", key Unicode value=" + eCode + ", ASCII value=" + eChar + ")");
+ }
+&lt;/script&gt;</pre>
+
+<p>下面是一个完整的键盘事件处理过程:</p>
+
+<pre class="brush:js">&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+ &lt;script&gt;
+ var metaChar = false;
+ var exampleKey = 16;
+ function keyEvent(event) {
+ var key = event.keyCode || event.which;
+ var keychar = String.fromCharCode(key);
+ if (key==exampleKey) { metaChar = true; }
+ if (key!=exampleKey) {
+ if (metaChar) {
+ alert("Combination of metaKey + " + keychar)
+ metaChar = false;
+ } else { alert("Key pressed " + key); }
+ }
+ }
+ function metaKeyUp (event) {
+ var key = event.keyCode || event.which;
+ if (key==exampleKey) { metaChar = false; }
+ }
+ &lt;/script&gt;
+&lt;/head&gt;
+&lt;body onkeydown="keyEvent(event)" onkeyup="metaKeyUp(event)"&gt;
+&lt;/body&gt;
+&lt;/html&gt;</pre>
+
+<h3 id="浏览器_bugs_和_quirks">浏览器 bugs 和 quirks</h3>
+
+<p>键盘事件中有两个可用的属性<code style="font-style: normal; line-height: 1.5;">keyCode</code><span style="line-height: 1.5;"> 和 </span><code style="font-style: normal; line-height: 1.5;">charCode。通常情况下,</code><code style="font-style: normal; line-height: 1.5;">keyCode</code><span style="line-height: 1.5;"> 指向的是用户按下的键盘上的那个键,而</span><code style="font-style: normal; line-height: 1.5;">charCode</code><span style="line-height: 1.5;"> 存储的是相应键的 ASCII 码值。这两个值不一定相同,如, 小写 'a' 和 大写 'A' 拥有相同的 </span><code style="font-style: normal; line-height: 1.5;">keyCode,因为用户按下的是相同的按键,但是他们的</code><code style="font-style: normal; line-height: 1.5;">charCode不同,因为两个字母的码值不同。</code><span style="line-height: 1.5;"> </span></p>
+
+<p>不同浏览器对于charCode的处理方式并不统一。例如Internet Explorer 和Opera 并不支持 <code>charCode,他们把字母信息写到了</code><code>keyCode</code>中,而且只在 onkeypress下有效。在 Onkeydown 和Onkeyup的事件中, <code>keyCode</code> 存储的仍然是按键的相关信息。 Firefox 则使用 "which", 来区分字母。.</p>
+
+<p>可以到 Mozilla 文档 <a href="/en-US/docs/DOM/Event/UIEvent/KeyboardEvent" title="https://developer.mozilla.org/en-US/docs/DOM/Event/UIEvent/KeyEvent">Keyboard Events</a> 去了解关于键盘事件的更多信息。.</p>
+
+<p>{{ draft() }}</p>
+
+<h2 id="Example:_Dragging_images_around" name="Example:_Dragging_images_around">举例:拖曳图片</h2>
+
+<p>下面的例子展示了firefox浏览器下如何实现拖动图片:</p>
+
+<pre class="brush:js">&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style type='text/css'&gt;
+img { position: absolute; }
+&lt;/style&gt;
+
+&lt;script type='text/javascript'&gt;
+window.onload = function() {
+
+ movMeId=document.getElementById("ImgMov");
+ movMeId.style.top = "80px";
+ movMeId.style.left = "80px";
+  movMeId.style.position = "absolute";
+
+ document.onmousedown = coordinates;
+ document.onmouseup=mouseup;
+
+ function coordinates(e) {
+ if (e == null) { e = window.event;}
+ var sender = (typeof( window.event ) != "undefined" ) ? e.srcElement : e.target;
+
+ if (sender.id=="ImgMov") {
+ mouseover = true;
+ pleft = parseInt(movMeId.style.left);
+ ptop = parseInt(movMeId.style.top);
+ xcoor = e.clientX;
+ ycoor = e.clientY;
+ document.onmousemove=moveImage;
+ return false;
+ } else {
+ return false;
+ }
+ }
+
+ function moveImage(e) {
+ if (e == null) { e = window.event; }
+ movMeId.style.left = pleft+e.clientX-xcoor+"px";
+ movMeId.style.top = ptop+e.clientY-ycoor+"px";
+ return false;
+ }
+
+ function mouseup(e) {
+ document.onmousemove = null;
+ }
+}
+&lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body&gt;
+ &lt;img id="ImgMov" src="http://mozcom-cdn.mozilla.net/img/covehead/about/logo/download/logo-only.png" width="64" height="64"/&gt;
+ &lt;p&gt;Drag and drop around the image in this page.&lt;/p&gt;
+&lt;/body&gt;
+
+&lt;/html&gt;</pre>
+
+<h2 id="Example:_Resizing_things" name="Example:_Resizing_things">举例:改变大小</h2>
+
+<div>{{todo("Need Content. Or, remove headline")}}</div>
+
+<h3 id="Example:_Drawing_Lines" name="Example:_Drawing_Lines">举例:绘制直线</h3>
+
+<div class="originaldocinfo">
+<h2 id="Original_Document_Information" name="Original_Document_Information">附加文档信息</h2>
+
+<ul>
+ <li>作者: <a class="external" href="http://linuxmachines.com/">Jeff Carr</a></li>
+ <li>Here is a attempt at a new <a href="/en-US/docs/javascript_new_testpage" title="en-US/docs/javascript_new_testpage">JavaScript new testpage</a></li>
+ <li>最后修改: July 14 2005</li>
+ <li>版权信息: © 2005 by individual contributors; content available under the <a class="external" href="http://www.mozilla.org/foundation/licensing/website-content.html">Creative Commons license</a></li>
+</ul>
+</div>
+
+<p> </p>
diff --git a/files/zh-cn/orphaned/web/javascript/reference/global_objects/array/prototype/index.html b/files/zh-cn/orphaned/web/javascript/reference/global_objects/array/prototype/index.html
new file mode 100644
index 0000000000..31d65bf734
--- /dev/null
+++ b/files/zh-cn/orphaned/web/javascript/reference/global_objects/array/prototype/index.html
@@ -0,0 +1,178 @@
+---
+title: Array.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Array/prototype
+tags:
+ - Array.prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/prototype
+---
+<div>{{JSRef}}</div>
+
+<p><strong><code>Array.prototype</code></strong>  属性表示 {{jsxref("Array")}} 构造函数的原型,并允许您向所有Array对象添加新的属性和方法。</p>
+
+<pre class="brush: js">/*
+如果JavaScript本身不提供 first() 方法,
+添加一个返回数组的第一个元素的新方法。
+*/
+
+if(!Array.prototype.first) {
+    Array.prototype.first = function() {
+        console.log(`如果JavaScript本身不提供 first() 方法,
+添加一个返回数组的第一个元素的新方法。`);
+        return this[0];
+    }
+}
+</pre>
+
+<h2 id="Description" name="Description">描述</h2>
+
+<p>{{jsxref("Array")}}实例继承自 <strong>Array.prototype </strong>。与所有构造函数一样,您可以更改构造函数的原型对象,以对所有 {{jsxref("Array")}} 实例进行更改。例如,可以添加新方法和属性以扩展所有Array对象。这用于 {{Glossary("Polyfill", "polyfilling")}}, 例如。</p>
+
+<p>鲜为人知的事实:<code>Array.prototype</code> 本身也是一个 {{jsxref("Array")}}。</p>
+
+<pre class="brush: js">Array.isArray(Array.prototype);
+// true
+</pre>
+
+<p>{{js_property_attributes(0, 0, 0)}}</p>
+
+<h2 id="Properties" name="Properties">属性</h2>
+
+<dl>
+ <dt><code>Array.prototype.constructor</code></dt>
+ <dd>所有的数组实例都继承了这个属性,它的值就是 {{jsxref("Array")}},表明了所有的数组都是由 {{jsxref("Array")}} 构造出来的。</dd>
+ <dt>{{jsxref("Array.prototype.length")}}</dt>
+ <dd>上面说了,因为 <code>Array.prototype</code> 也是个数组,所以它也有 <code>length</code> 属性,这个值为 <code>0</code>,因为它是个空数组。</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">方法</h2>
+
+<h3 id="Mutator_methods" name="Mutator_methods">会改变自身的方法</h3>
+
+<p>下面的这些方法会改变调用它们的对象自身的值:</p>
+
+<dl>
+ <dt>{{jsxref("Array.prototype.copyWithin()")}} {{experimental_inline}}</dt>
+ <dd>在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值。</dd>
+ <dt>{{jsxref("Array.prototype.fill()")}} {{experimental_inline}}</dt>
+ <dd>将数组中指定区间的所有元素的值,都替换成某个固定的值。</dd>
+ <dt>{{jsxref("Array.prototype.pop()")}}</dt>
+ <dd>删除数组的最后一个元素,并返回这个元素。</dd>
+ <dt>{{jsxref("Array.prototype.push()")}}</dt>
+ <dd>在数组的末尾增加一个或多个元素,并返回数组的新长度。</dd>
+ <dt>{{jsxref("Array.prototype.reverse()")}}</dt>
+ <dd>颠倒数组中元素的排列顺序,即原先的第一个变为最后一个,原先的最后一个变为第一个。</dd>
+ <dt>{{jsxref("Array.prototype.shift()")}}</dt>
+ <dd>删除数组的第一个元素,并返回这个元素。</dd>
+ <dt>{{jsxref("Array.prototype.sort()")}}</dt>
+ <dd>对数组元素进行排序,并返回当前数组。</dd>
+ <dt>{{jsxref("Array.prototype.splice()")}}</dt>
+ <dd>在任意的位置给数组添加或删除任意个元素。</dd>
+ <dt>{{jsxref("Array.prototype.unshift()")}}</dt>
+ <dd>在数组的开头增加一个或多个元素,并返回数组的新长度。</dd>
+</dl>
+
+<h3 id="Accessor_methods" name="Accessor_methods">不会改变自身的方法</h3>
+
+<p>下面的这些方法绝对不会改变调用它们的对象的值,只会返回一个新的数组或者返回一个其它的期望值。</p>
+
+<dl>
+ <dt>{{jsxref("Array.prototype.concat()")}}</dt>
+ <dd>返回一个由当前数组和其它若干个数组或者若干个非数组值组合而成的新数组。</dd>
+ <dt>{{jsxref("Array.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>判断当前数组是否包含某指定的值,如果是返回 <code>true</code>,否则返回 <code>false</code>。</dd>
+ <dt>{{jsxref("Array.prototype.join()")}}</dt>
+ <dd>连接所有数组元素组成一个字符串。</dd>
+ <dt>{{jsxref("Array.prototype.slice()")}}</dt>
+ <dd>抽取当前数组中的一段元素组合成一个新数组。</dd>
+ <dt>{{jsxref("Array.prototype.toSource()")}} {{non-standard_inline}}</dt>
+ <dd>返回一个表示当前数组字面量的字符串。遮蔽了原型链上的 {{jsxref("Object.prototype.toSource()")}} 方法。</dd>
+ <dt>{{jsxref("Array.prototype.toString()")}}</dt>
+ <dd>返回一个由所有数组元素组合而成的字符串。遮蔽了原型链上的 {{jsxref("Object.prototype.toString()")}} 方法。</dd>
+ <dt>{{jsxref("Array.prototype.toLocaleString()")}}</dt>
+ <dd>返回一个由所有数组元素组合而成的本地化后的字符串。遮蔽了原型链上的 {{jsxref("Object.prototype.toLocaleString()")}} 方法。</dd>
+ <dt>{{jsxref("Array.prototype.indexOf()")}}</dt>
+ <dd>返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。</dd>
+ <dt>{{jsxref("Array.prototype.lastIndexOf()")}}</dt>
+ <dd>返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。</dd>
+</dl>
+
+<h3 id="Iteration_methods" name="Iteration_methods">遍历方法</h3>
+
+<p>在下面的众多遍历方法中,有很多方法都需要指定一个回调函数作为参数。在每一个数组元素都分别执行完回调函数之前,数组的length属性会被缓存在某个地方,所以,如果你在回调函数中为当前数组添加了新的元素,那么那些新添加的元素是不会被遍历到的。此外,如果在回调函数中对当前数组进行了其它修改,比如改变某个元素的值或者删掉某个元素,那么随后的遍历操作可能会受到未预期的影响。总之,不要尝试在遍历过程中对原数组进行任何修改,虽然规范对这样的操作进行了详细的定义,但为了可读性和可维护性,请不要这样做。</p>
+
+<dl>
+ <dt>{{jsxref("Array.prototype.forEach()")}}</dt>
+ <dd>为数组中的每个元素执行一次回调函数。</dd>
+ <dt>{{jsxref("Array.prototype.entries()")}} {{experimental_inline}}</dt>
+ <dd>返回一个数组迭代器对象,该迭代器会包含所有数组元素的键值对。</dd>
+ <dt>{{jsxref("Array.prototype.every()")}}</dt>
+ <dd>如果数组中的每个元素都满足测试函数,则返回 <code>true</code>,否则返回 <code>false。</code></dd>
+ <dt>{{jsxref("Array.prototype.some()")}}</dt>
+ <dd>如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false。</dd>
+ <dt>{{jsxref("Array.prototype.filter()")}}</dt>
+ <dd>将所有在过滤函数中返回 <code>true</code> 的数组元素放进一个新数组中并返回。</dd>
+ <dt>{{jsxref("Array.prototype.find()")}} {{experimental_inline}}</dt>
+ <dd>找到第一个满足测试函数的元素并返回那个元素的值,如果找不到,则返回 <code>undefined</code>。</dd>
+ <dt>{{jsxref("Array.prototype.findIndex()")}} {{experimental_inline}}</dt>
+ <dd>找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回 <code>-1</code>。</dd>
+ <dt>{{jsxref("Array.prototype.keys()")}} {{experimental_inline}}</dt>
+ <dd>返回一个数组迭代器对象,该迭代器会包含所有数组元素的键。</dd>
+ <dt>{{jsxref("Array.prototype.map()")}}</dt>
+ <dd>返回一个由回调函数的返回值组成的新数组。</dd>
+ <dt>{{jsxref("Array.prototype.reduce()")}}</dt>
+ <dd>从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。</dd>
+ <dt>{{jsxref("Array.prototype.reduceRight()")}}</dt>
+ <dd>从右到左为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。</dd>
+ <dt>{{jsxref("Array.prototype.values()")}} {{experimental_inline}}</dt>
+ <dd>返回一个数组迭代器对象,该迭代器会包含所有数组元素的值。</dd>
+ <dt>{{jsxref("Array.prototype.@@iterator()", "Array.prototype[@@iterator]()")}} {{experimental_inline}}</dt>
+ <dd>和上面的 <code>values() 方法是同一个函数。</code></dd>
+</dl>
+
+<h3 id="Generic_methods" name="Generic_methods">通用方法</h3>
+
+<p>在 JavaScript 中,很多的数组方法被故意设计成是通用的。也就是说,那些看起来像是数组的对象(类数组对象),即拥有一个 <code>length</code> 属性,以及对应的索引属性(也就是数字类型的属性,比如 <code>obj[5]</code>)的非数组对象也是可以调用那些数组方法的。其中一些数组方法,比如说 {{jsxref("Array.join", "join")}} 方法,它们只会单纯的读取当前对象的 <code>length</code> 属性和索引属性的值,并不会尝试去改变这些属性的值。而另外一些数组方法,比如说 {{jsxref("Array.reverse", "reverse")}} 方法,它们会尝试修改那些属性的值,因此,如果当前对象是个 {{jsxref("String")}} 对象,那么这些方法在执行时就会报错,因为字符串对象的 <code>length</code> 属性和索引属性都是只读的。</p>
+
+<h2 id="Specifications" name="Specifications">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.3.1', 'Array.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype', 'Array.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">浏览器兼容性</h2>
+
+<div>
+<div>
+
+
+<p>{{Compat("javascript.builtins.Array.prototype")}}</p>
+</div>
+</div>
+
+<h2 id="See_also" name="See_also">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Array")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
diff --git a/files/zh-cn/orphaned/web/javascript/reference/global_objects/asyncfunction/prototype/index.html b/files/zh-cn/orphaned/web/javascript/reference/global_objects/asyncfunction/prototype/index.html
new file mode 100644
index 0000000000..9a8678680a
--- /dev/null
+++ b/files/zh-cn/orphaned/web/javascript/reference/global_objects/asyncfunction/prototype/index.html
@@ -0,0 +1,57 @@
+---
+title: AsyncFunction.prototype
+slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction/prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction/prototype
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>AsyncFunction.prototype</strong></code> 属性表示 {{jsxref("AsyncFunction")}} 的原型对象。</p>
+
+<h2 id="描述">描述</h2>
+
+<p>{{jsxref("AsyncFunction")}} 对象继承自 <code>AsyncFunction.prototype</code>。<code>AsyncFunction.prototype</code> 不能被修改。</p>
+
+<h2 id="属性">属性</h2>
+
+<dl>
+ <dt><code><strong>AsyncFunction.constructor</strong></code></dt>
+ <dd>默认值为 {{jsxref("AsyncFunction")}}。</dd>
+ <dt><code><strong>AsyncFunction.prototype[@@toStringTag]</strong></code></dt>
+ <dd>返回 "AsyncFunction"。</dd>
+</dl>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-async-function-constructor-prototype', 'AsyncFunction.prototype')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>最初定义在ES2017.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="兼容性">兼容性</h2>
+
+<div>
+<div>
+
+
+<p>{{Compat("javascript.builtins.AsyncFunction.prototype")}}</p>
+</div>
+</div>
+
+<h2 id="参见">参见</h2>
+
+<ul>
+ <li>{{jsxref("AsyncFunction")}}</li>
+ <li>{{jsxref("Function")}}</li>
+</ul>
diff --git a/files/zh-cn/orphaned/web/javascript/reference/global_objects/asynciterator/index.html b/files/zh-cn/orphaned/web/javascript/reference/global_objects/asynciterator/index.html
new file mode 100644
index 0000000000..9c14e462bd
--- /dev/null
+++ b/files/zh-cn/orphaned/web/javascript/reference/global_objects/asynciterator/index.html
@@ -0,0 +1,119 @@
+---
+title: AsyncIterator
+slug: Web/JavaScript/Reference/Global_Objects/AsyncIterator
+tags:
+ - 异步迭代器
+ - 类
+translation_of: Web/JavaScript/Reference/Global_Objects/AsyncIterator
+---
+<p>{{JSRef}}{{Draft}}</p>
+
+<p><strong><code>AsyncIterator</code></strong> 全局对象是一个提供辅助方法的抽象类,与暴露在{{JSxRef("Array")}} 实例上的那些类似。</p>
+
+<h2 id="构造函数">构造函数</h2>
+
+<dl>
+ <dt>{{JSxRef("AsyncIterator.AsyncIterator", "AsyncIterator()")}} </dt>
+ <dd>一个抽象构造函数,仅能够通过 {{JSxRef("Operators/super", "super()")}} 来调用。</dd>
+</dl>
+
+<h2 id="属性">属性</h2>
+
+<dl>
+ <dt><code>AsyncIterator.prototype</code></dt>
+ <dd><code>%AsyncIteratorPrototype%</code> 内部对象。</dd>
+</dl>
+
+<h2 id="方法">方法</h2>
+
+<dl>
+ <dt>{{JSxRef("AsyncIterator.from()")}} </dt>
+ <dd>等同于在传入的对象上调用 <code>@@asyncIterator</code> 。</dd>
+</dl>
+
+<h2 id="AsyncIterator_原型"><code>AsyncIterator</code> 原型</h2>
+
+<h3 id="原型属性">原型属性</h3>
+
+<dl>
+ <dt><code>AsyncIterator.prototype.constructor</code></dt>
+ <dd>指定创建对的象原型的函数.</dd>
+ <dt><code>AsyncIterator.prototype[@@toStringTag]</code> </dt>
+ <dd><code>字符串 "Iterator"</code>.</dd>
+</dl>
+
+<h3 id="原型方法">原型方法</h3>
+
+<dl>
+ <dt>{{JSxRef("AsyncIterator.prototype.map()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.filter()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.take()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.drop()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.asIndexedPairs()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.flatMap()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.reduce()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.toArray()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.forEach()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.some()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.every()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.find()")}} </dt>
+ <dd>...</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.@@iterator()", "AsyncIterator.prototype[@@iterator]()")}}</dt>
+ <dd>返回该 <code>AsyncIterator</code> 实例。</dd>
+</dl>
+
+<h2 id="实现方法">实现方法</h2>
+
+<dl>
+ <dt>{{JSxRef("AsyncIterator.prototype.next()", "&lt;<var>implementation</var>&gt;.prototype.next()")}}</dt>
+ <dd>获取 <code>AsyncIterator</code> 中的下一项</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.return()", "&lt;<var>implementation</var>&gt;.prototype.next()")}}{{Optional_Inline}}</dt>
+ <dd>返回给出的值,并结束迭代。</dd>
+ <dt>{{JSxRef("AsyncIterator.prototype.throw()", "&lt;<var>implementation</var>&gt;.prototype.next()")}}{{Optional_Inline}}</dt>
+ <dd>抛出一个迭代器错误(同时也终止了迭代器,除非是在该迭代器内部被捕获)。</dd>
+</dl>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><a href="https://tc39.es/proposal-iterator-helpers/#sec-asynciterator-constructor">ESNext Iterator Helpers Proposal</a></td>
+ <td><span class="spec-Draft">Stage 2 Draft</span></td>
+ <td>Initial definition</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+
+
+<p>{{Compat("javascript.builtins.AsyncIterator")}}</p>
+
+<h2 id="另请参阅">另请参阅</h2>
+
+<ul>
+ <li>{{JSxRef("Iteration_protocols", "Iteration protocols", "", "1")}}</li>
+ <li>{{JSxRef("Generator")}}</li>
+ <li>{{JSxRef("Global_Objects/AsyncGenerator", "AsyncGenerator")}}</li>
+ <li>{{JSxRef("Iterator")}} </li>
+</ul>