for...in in python
lists = [1,2,3,4,5,6,7,8,9]
lists1 = [2,3,4,5,6,7,8,9]
list2 = [2,4,5,6,7,8,9]
for i in lists:
print(i)
if i < 5:
lists.remove(i)
print(lists) // [2,4,5,6,7,8,9]
for...in in javascript
此处MDN不建议对Array使用for...in,因为for...in遍历的是对象的所有可枚举属性(自有的、继承的、可枚举的、非Symbol的)并不保证顺序(迭代顺序依赖环境)
let lists=[1,2,3,4,5,6,7,8,9]
for(let i in lists){
console.log(i,typeof i) // string
}
for(let i in lists) {
if(i<5){
lists.splice(lists.indexOf(i),1)
}
}
console.log(lists) // [1, 2, 3, 4]
对象的所有可枚举属性内容不等于Object.keys()的内容
Array.prototype.b=()=>{}
let lists=[1,2,3,4,5,6,7,8,9]
lists.a='a'
console.log(Object.keys(lists))
let inKeys=[]
for(let i in lists){
inKeys.push(i)
}
console.log(inKeys)
// (10) ["0", "1", "2", "3", "4", "5", "6", "7", "8", "a"]
// (11) ["0", "1", "2", "3", "4", "5", "6", "7", "8", "a", "b"]
Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致。
注意上述文字自身可枚举属性,顺序一致但是内容不一致哦~,再次强调for...in遍历的是一个对象自有的、继承的、可枚举的、非Symbol的属性
for...of in javascript
for...of 语句遍历可迭代对象定义要迭代的数据
let lists=[1,2,3,4,5,6,7,8,9]
for(let i of lists){
console.log(i,typeof i) // number
}
for(let i of lists) {
if(i<5){
console.log(i,' in ',lists,' = ',lists.indexOf(i));
lists.splice(lists.indexOf(i),1)
}
}
console.log(lists) // [2, 4, 5, 6, 7, 8, 9]
// 1 " in " (9) [1, 2, 3, 4, 5, 6, 7, 8, 9] " = " 0
// 3 " in " (8) [2, 3, 4, 5, 6, 7, 8, 9] " = " 1
// (7) [2, 4, 5, 6, 7, 8, 9]
for(let i of lists) {
console.log(i,' in ',lists,' = ',lists.indexOf(i));
lists.splice(lists.indexOf(i),1)
}
console.log(lists) // [2, 4, 6, 8]
// 1 " in " (9) [1, 2, 3, 4, 5, 6, 7, 8, 9] " = " 0
// 3 " in " (8) [2, 3, 4, 5, 6, 7, 8, 9] " = " 1
// 5 " in " (7) [2, 4, 5, 6, 7, 8, 9] " = " 2
// 7 " in " (6) [2, 4, 6, 7, 8, 9] " = " 3
// 9 " in " (5) [2, 4, 6, 8, 9] " = " 4
// (4) [2, 4, 6, 8]
等同于
for(let index = 0;index<lists.length;index++){
let i=lists[index]
console.log(i,' in ',lists,' = ',index);
lists.splice(lists.indexOf(i),1)
}
console.log(lists) // [2, 4, 6, 8]
// 1 " in " (9) [1, 2, 3, 4, 5, 6, 7, 8, 9] " = " 0
// 3 " in " (8) [2, 3, 4, 5, 6, 7, 8, 9] " = " 1
// 5 " in " (7) [2, 4, 5, 6, 7, 8, 9] " = " 2
// 7 " in " (6) [2, 4, 6, 7, 8, 9] " = " 3
// 9 " in " (5) [2, 4, 6, 8, 9] " = " 4
// (4) [2, 4, 6, 8]
for...in生成fibonacci数列
function* fibonacci() { // 一个生成器函数
let [prev, curr] = [0, 1];
for (;;) { // while (true) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
for (let n of fibonacci()) {
console.log(n);
// 当n大于1000时跳出循环
if (n >= 1000)
break;
}