ife-task16:思考js中for和for-in循环的使用区别;访问对象的属性.和[]的区别

1.for

js中for循环一般用于遍历数组

//前提:cars是个数组
for (var i=0;i<cars.length;i++){
    document.write(cars[i] + "<br>");
}

2.for-in

for-in一般用于循环遍历对象的属性
虽然数组在js中也是对象,技术上说,我们可以使用for-in循环数组,如下:

var x
var mycars = new Array();
mycars[0] = "Saab";
mycars[1] = "Volvo";
mycars[2] = "BMW";
for (x in mycars){
    document.write(mycars[x] + "<br/>");
}

但是属性列表的顺序(序列)是不能保证的,所以数组遍历还是推荐使用for循环,其他对象使用for-in循环,比如

/** * 生成示例格式的列表,并且遍历: * aqiData = { * "北京": 90, * "上海": 40 * }; */
 //之前的赋值操作
var city = document.getElementById('aqi-city-input').value,
      num = document.getElementById('aqi-value-input').value;
//这里就不能用.看随后属性访问的比较
aqiData[city] = num;
//随后的遍历操作
for(var city in aqiData) {
    alert(city+":"+aqiData[city]);//北京:90,上海:40等
}

3.for-in过滤原型链的属性

for-in在遍历时,不仅遍历对象的实例属性,还遍历了从原型继承来的属性,
但是在使用for-in遍历对象属性的时候可以过滤掉从原型链上下来的属性。
使用:hasOwnProperty()方法

//假设继承了原型链的属性,但想过滤掉
for(var city in aqiData){
    // 过滤出实例属性,若不适用此方法,jsHint和jsLint都会警告
    if(aqiData.hasOwnProperty(city)){
        alert(city+":"+aqiData[city]);
    }
}

4.访问对象属性的方法

4.1语法差别

object.property
object['property']

4.2举例

function Person() {
  this.name=" 王欢 "; 
  this.sex=" 女 "; 
  this.age=22; 
}
var wanghuan=new Person();
wanghuan.name;
wanghuan["name"];

4.3灵活性差别
使用”.“运算符来存取一个对象的属性时,属性名是用标识符表示的。而在JavaScript程序中,标识符必须被逐字地输入,它们不是一种数据类型,因此程序不能对其操作。
而使用数组[]表示法来存取一个对象的属性时,属性名是用字符串表示的。字符串是JavaScript的一种数据类型,因此可以在程序运行中操作并创建它们。

这种情况使用[]才可,因为city是个字符串

var city = document.getElementById('aqi-city-input').value,
      num = document.getElementById('aqi-value-input').value;
//这里就不能用.看随后属性访问的比较
aqiData[city] = num;
//随后的遍历操作
for(var city in aqiData) {
    alert(city+":"+aqiData[city]);//北京:90,上海:40等
}

4.4执行效率差别
数组[]表示法在存取属性值时会进行表达式运行。
而点表示法是直接存取属性值,理论上执行效率会比数组表示法高。

你可能感兴趣的:(JavaScript,for-in)