From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../global_objects/array/values/index.html | 125 +++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 files/zh-cn/web/javascript/reference/global_objects/array/values/index.html (limited to 'files/zh-cn/web/javascript/reference/global_objects/array/values') diff --git a/files/zh-cn/web/javascript/reference/global_objects/array/values/index.html b/files/zh-cn/web/javascript/reference/global_objects/array/values/index.html new file mode 100644 index 0000000000..cf9b1c7c82 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/array/values/index.html @@ -0,0 +1,125 @@ +--- +title: Array.prototype.values() +slug: Web/JavaScript/Reference/Global_Objects/Array/values +tags: + - Array + - ECMAScript 2015 + - Iterator + - JavaScript + - Prototype + - 数组 + - 方法 + - 迭代 +translation_of: Web/JavaScript/Reference/Global_Objects/Array/values +--- +
{{JSRef}}
+ +

values() 方法返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值

+ +
{{EmbedInteractiveExample("pages/js/array-values.html")}}
+ +

语法

+ +
arr.values()
+ +

返回值

+ +

一个新的 {{jsxref("Array")}} 迭代对象。

+ +

示例

+ +

使用 for...of 循环进行迭代

+ +
let arr = ['w', 'y', 'k', 'o', 'p'];
+let eArr = arr.values();
+
+for (let letter of eArr) {
+  console.log(letter);
+} //"w" "y "k" "o" "p"
+ +

Array.prototype.values 是 Array.prototype[Symbol.iterator] 的默认实现。

+ +
Array.prototype.values === Array.prototype[Symbol.iterator]  // true 
+ +

使用 .next() 迭代

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+var iterator = arr.values();
+iterator.next();               // Object { value: "a", done: false }
+iterator.next().value;         // "b"
+iterator.next()["value"];      // "c"
+iterator.next();               // Object { value: "d", done: false }
+iterator.next();               // Object { value: "e", done: false }
+iterator.next();               // Object { value: undefined, done: true }
+iteraroe.next().value;         // undefined
+ +
+

一次性:数组迭代器是一次性的,或者说临时对象

+
+ +

例子:

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+ var iterator = arr.values();
+ for (let letter of iterator) {
+ console.log(letter);
+} //"a" "b" "c" "d"
+for (let letter of iterator) {
+console.log(letter);
+} // undefined
+ +

解释: 当 next().done=true 或 currentIndex>length 时, for..of 循环结束。参见 Iteration protocols 。

+ +

: 数组迭代器中存储的是原数组的地址,而不是数组元素值。

+ +
var arr = ['a', 'b', 'c', 'd', 'e'];
+var iterator = arr.values();
+console.log(iterator); // Array Iterator {  }
+iterator.next().value; // "a"
+arr[1] = 'n';
+iterator.next().value; //  "n"
+
+ +
+

如果数组中元素改变,那么迭代器的值也会改变

+
+ + + +

规范

+ + + + + + + + + + + + + + + + + + + +
规范名称规范状态备注
{{SpecName('ES6', '#sec-array.prototype.values', 'Array.prototype.values')}}{{Spec2('ES6')}}首次定义
{{SpecName('ESDraft', '#sec-array.prototype.values', 'Array.prototype.values')}}{{Spec2('ESDraft')}}
+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.Array.values")}}

+ +

相关链接

+ + -- cgit v1.2.3-54-g00ecf