js 笔记整理

本文主要对比了Js中for、for-in、forEach以及for-of的用法和特性。for-in可遍历对象可枚举属性,包括原型链上的,但不适合迭代数组,可用hasOwnProperty()解决问题;for是原始写法,支持break等语句;forEach是数组方法,不支持break等;for…of可循环数组元素值。还提及定义变量的6种方式。

Js中for、for-in、forEach以及for-of的用法及特性对比

for-in

for...in以任意顺序遍历一个对象的可枚举属性。所以for-in不适合用来迭代一个Array。同时,for-in是可以遍历对象中所有可枚举属性的,包括原型链上的可枚举属性。

let ret = [];
array.num = 6;  //  对象上直接添加属性
Array.prototype.num = 6;  // 原型链中添加属性
for(let i in array){
  ret.push(array[i])
}
console.log(ret)   //  [ 1, 2, 3, 4, 5, 6, 7 ]

  

如果可以地设置属性为不可枚举,那么for-in循环将不会遍历到这个属性

 

let ret = [];
Object.defineProperty(array,"num",{
  enumerable: false,  // 设置属性不可遍历
  value: 8
})
for(let i in array){
  ret.push(array[i])
}
console.log(ret)  //  [ 1, 2, 3, 4, 5 ]

 

解决方法:使用hasOwnProperty()
hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中。这个方法只在给定属性存在于对象实例中时,才会返回true。 

/数组
var arr = ["星期一","星期二","星期三"];
Array.prototype.something = ["放假","休息咯"];
for (var i in arr){
	if(arr.hasOwnProperty(i)){ 
		console.log(arr[i])
	}
}

  

for(最原始的写法)、 支持 break、continue和return语句)、

forEach 数组的方法,arr.forEach;  forEach(ES5,但是它不支持使用break、continue和return语句)、

for…in循环数组索引、对象的属性,但使用 for…in 原型链上的所有属性都将被访问,用 hasOwnProperty() 方法解决。

for…of(ES6,循环数组的元素值)这三个是循环数组(对象数组)的;

定义变量的6种方式

ES5 只有两种声明变量的方法:

var命令和function命令。

ES6 除了添加letconst命令,

还有 import命令和class命令。

转载于:https://www.cnblogs.com/surfaces/p/10814761.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值