通过键名调用JSON对象的方法有何不同?

时间:2012-05-14 21:57:03

标签: javascript syntax

我尽力想到这个问题的名称,如果我能得到一些术语来帮助我改变它

我能描述的最佳方式是

obj1 = {
    "a":{"var":1},
    "b":{"var":2},
    "c":{"var":3}
}

// What's the difference between
resulta = obj1['a']['var']

// and...
resultb = obj1.a.var

那么,使用['']和。之间的区别是什么。 ?

我意识到你只能使用。运行功能,但这是唯一的区别吗?

一种方法比另一种更快吗? (甚至一点点?)

3 个答案:

答案 0 :(得分:1)

如果您正在动态构建对象的属性键,则使用方括号的第一种方法很方便:

var myDynamicKey = "a";
var result = obj[myDynamicKey]["var"];
var result = obj["someOtherKey_" + myDynamicKey]["var"];

如果您事先了解这些属性,那么第二个肯定是首选。

注意你可以混合搭配:

var result = obj[myDynamicKey].var;

我愿意打赌使用点表示法访问属性的速度更快,但我没有实际的数据支持。

答案 1 :(得分:1)

如果您使用[''],那么您可以将键的名称作为动态变量传递...它可以在运行时更改。如果使用.key.key方法,则必须在构建时知道密钥是什么。

示例:

var keys = ['name','phone','email'];
var object = {"name": ,"phone": , "email"};
function updateKeys(name,phone,email){
    for(var i = 0; i < keys; i++){
        object[keys[i]] = arguments[i]
    }
}

VS

function updateKeys(name, phone, email){
    object.name = name; 
    object.phone = phone;
    object.email = email
}

['']方式更灵活,允许更多代码重用。大多数图书馆都会使用这个,或者一些本土的替代方式来做事。

答案 2 :(得分:0)

有各种网站提供相关信息。

http://www.quirksmode.org/js/associative.html

http://www.hunlock.com/blogs/Mastering_JSON_(_JavaScript_Object_Notation_)

http://www.mongodb.org/display/DOCS/Dot+Notation+(Reaching+into+Objects)

第一个我会调用dot notation,它可用于访问对象的方法和属性,第二个是关联数组。