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)。
For的衍生對象