For的衍生物件
For的衍生物件:
for in語句:
for...in 語句用於遍歷陣列或者物件的屬性(對陣列或者物件的屬性進行迴圈操作)。
for...in 語句用於對陣列或者物件的屬性進行迴圈操作。
for ... in 迴圈中的程式碼每執行一次,就會對陣列的元素或者物件的屬性進行一次操作。
語法:
for
(變數in
物件) { 在此執行程式碼 }
“變數”用來指定變數,指定的變數可以是陣列元素,也可以是物件的屬性。
例項:
使用 for ... in 迴圈遍歷陣列。
<html> <body> <script type="text/javascript"> var x var mycars = new Array() mycars[0] = "Saab" mycars[1] = "Volvo" mycars[2] = "BMW"for (x in mycars) { document.write(mycars[x] + "<br />") }
</script> </body> </html>
for of語句:
for...of
語句建立一個迴圈來迭代可迭代的物件。在 ES6 中引入的 for...of
迴圈,以替代 for...in
和 forEach()
,並支援新的迭代協議。for...of
允許你遍歷 Arrays(陣列), Strings(字串), Maps(對映), Sets(集合)等可迭代的資料結構等。
語法
for (variable of iterable) {
statement
}
- variable:每個迭代的屬性值被分配給該變數。
- iterable:一個具有可列舉屬性並且可以迭代的物件。
用例
我們來探討一些用例。
Arrays(陣列)
Arrays(陣列)就是類列表(list-like)物件。陣列原型上有各種方法,允許對其進行操作,比如修改和遍歷等操作。下面手在一個數組上進行的 for...of
操作:
// array-example.js
const iterable = ['mini', 'mani', 'mo']; for (const value of iterable) { console.log(value); } // Output: // mini // mani // mo
其結果就是打印出 iterable
陣列中的每一個值。
Maps(對映)
Map 物件就是儲存 key-value(鍵值) 對。物件和原始值可以用作 key(鍵)或 value(值)。Map 物件根據其插入方式迭代元素。換句話說, for...of
迴圈將為每次迭代返回一個 key-value(鍵值) 陣列。
// map-example.js
const iterable = new Map([['one', 1], ['two', 2]]); for (const [key, value] of iterable) { console.log(`Key: ${key} and Value: ${value}`); } // Output: // Key: one and Value: 1 // Key: two and Value: 2
Set(集合)
Set(集合) 物件允許你儲存任何型別的唯一值,這些值可以是原始值或物件。 Set(集合) 物件只是值的集合。 Set(集合) 元素的迭代基於其插入順序。 Set(集合) 中的值只能發生一次。如果您建立一個具有多個相同元素的 Set(集合) ,那麼它仍然被認為是單個元素。
// set-example.js
const iterable = new Set([1, 1, 2, 2, 1]); for (const value of iterable) { console.log(value); } // Output: // 1 // 2
儘管我們的 Set(集合) 有多個 1
和 2
,但輸出的只有 1
和 2
。
String(字串)
字串用於以文字形式儲存資料。
// string-example.js
const iterable = 'javascript';
for (const value of iterable) { console.log(value); } // Output: // "j" // "a" // "v" // "a" // "s" // "c" // "r" // "i" // "p" // "t"
這裡,對字串執行迭代,並打印出每個索引上的字元。
Arguments Object(引數物件)
把一個引數物件看作是一個類陣列(array-like)物件,並且對應於傳遞給函式的引數。這是一個用例:
// arguments-example.js
function args() { for (const arg of arguments) { console.log(arg); } } args('a', 'b', 'c'); // Output: // a // b // c
如前所述,當呼叫函式時,arguments
會接收傳入 args()
函式的任何引數。所以,如果我們傳遞 20 個引數給 args()
函式,我們將打印出 20 個引數。
Generators(生成器)
生成器是一個函式,它可以退出函式,稍後重新進入函式。
// generator-example.js
function* generator(){ yield 1; yield 2; yield 3; }; for (const g of generator()) { console.log(g); } // Output: // 1 // 2 // 3
function*
定義了一個生成器函式,該函式返回生成器物件(Generator object)。