[英]JavaScript and square bracket notation
我是Java腳本新手。 在我的兩本書中: http : //www.larryullman.com/books/modern-javascript-develop-and-design和http://www.packtpub.com/object-oriented-javascript/book兩位作者都說這種表示法:當我們具有對象和變量(這是對象的未來屬性)時, object[unknownYetProperty]
應該起作用。 問題是另外兩個符號作品object['unknownYetProperty']
和object.unknownYetProperty
但不是第一個。
var a1 = 'spring';
var a2 = 'autumn';
var a3 = 'summer';
var object = {
propertyA1 : a1, // according to books this only this should work :-/
propertyA2 : a2,
propertyA3 : a3
}
console.log(object[propertyA1] + ' ' + object['propertyA2'] + ' ' + object.propertyA3);
工作示例: http : //jsfiddle.net/cachaito/p78Le
有人可以向我解釋嗎?
object[propertyA1]
的問題在於propertyA1
不存在。
基本上,這就像執行以下操作(同樣不起作用): alert(propertyA1);
與另外兩個正確地引用對象上的字段相反:
object['propertyA2'] === object.propertyA2 === a2 == 'autumn'
object.propertyA3 == a3 == 'summer'
這將是這樣的:
var propertyA1 = 'propertyA1',
temp = object[propertyA1]; // === 'spring'
propertyAl
不存在。 字符串文字和點表示法起作用的原因是因為您正確地訪問了對象的屬性。 在第一個中,您嘗試訪問object[undefined]
因為object[undefined]
propertyA1。
使用數組符號訪問的屬性應指定為字符串。
object['propertyA1']
是訪問對象屬性的正確方法。
每當創建對象時,冒號的左側始終是字符串。 因此,在使用數組符號訪問時,應將字符串用於屬性。
好吧,當您編寫此代碼時:
object['propertyA1']
Javascript試圖在對象內部找到一個名為propertyA1
。
但是當您使用時:
object[propertyA1]
Javascript試圖在名為...的對象內找到一個屬性,呃,讓我們看看var propertyA1
... WTF里面有什么? 沒有名字的變量! 好的,然后未定義propertyA1,因此:
object[undefined]
區別在於Javascript知道'propertyA1'是什么(字符串xD),但是當刪除引號時,它不是字符串,而是尚未聲明的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.