2017-04-15 92 views
1

屬性我知道JS對象的獲取值可以這樣做:JavaScript不能得到與obj.x

obj1.x 

obj1[x] 

但下面的例子obj1.x中是行不通的。爲什麼?

var txt = ""; 
var person = {fname:"John", lname:"Doe", age:25}; 

for (x in person) { 
    txt += person[x] + " ";//this is working 
    txt += person.x + " ";//this is not working 
} 

這表明,x爲屬性的名稱:

for (x in person) { 
     txt += x;//output: fname, lname 
    } 
+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Property_accessors – zerkms

回答

1

obj.x相當於obj['x']

雖然obj[x]你的情況相當於obj['fname']obj['lname']

1

這裏txt += person.x不起作用,因爲x對於persons object.So它把x動態變量沒有解決的一個關鍵作爲persons對象中的一個關鍵字,並且由於它不存在,它將返回undefined。但是當你做person[x]x被解析爲相應的key字符串,你得到的結果,就像在一個for循環來訪問數組array[i]讓你在index i

1

用方括號的數組的值,JavaScript可以解決動態對象鍵。

var txt = ""; 
var person = {fname:"John", lname:"Doe", age:25}; 

for (x in person) { 
    txt += person[x] + " "; //working 
    txt += person.x + " "; // here it tried to resolve "x" not dynamic value of "x" i.e fname/lname 
} 
2

你的假設是不正確的。以下是不一樣的:

obj1.x 
obj[x] 

在第一個語法,x必須是文字屬性的名稱,所以你的對象真的需要有x財產。例如:

var obj = { x: 1 } 
 
console.log(obj.x);

在第二個語法,x必須是可變的,並且作爲目標的屬性名稱是該變量的值。例如:

x = "y"; 
 
obj = { y: 1 } 
 
console.log(obj[x]);

但是,您也可以使用第二個語法文字屬性名稱,在這種情況下,你引用它,就像你會爲其他文本字符串做:

obj = { y: 1 } 
 
console.log(obj["y"]);

事實上,它可以是任何表達,一個只要結果是你的目標屬性名稱。

1

使用.運營商在JavaScript中的動態表達您不能訪問屬性。