js--語法--for和for-in;訪問物件的屬性.和[]的區別
阿新 • • 發佈:2019-01-26
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執行效率差別
陣列[]表示法在存取屬性值時會進行表示式執行。
而點表示法是直接存取屬性值,理論上執行效率會比陣列表示法高。