1. 程式人生 > >js--語法--for和for-in;訪問物件的屬性.和[]的區別

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執行效率差別
陣列[]表示法在存取屬性值時會進行表示式執行。
而點表示法是直接存取屬性值,理論上執行效率會比陣列表示法高。