不知道在这里搜索什么,如果我在重复另一个问题,请道歉。
我想知道在JavaScript中使用以下语法是否有任何我不知道的问题:
var a = {};
var b = a.niceCoat = {};
似乎很方便,但我只想确保......
答案 0 :(得分:11)
这完全没问题,因为先前已声明a
。表达式将被评估为
var a = {};
var b = (a.niceCoat = {});
即。它首先将新的空对象分配给a.niceCoat
,并将结果(分配的结果是指定的值)分配给b
。
但要注意像
这样的东西var a = b = 'c';
再次被评估为
var a = (b = 'c');
只有a
位于本地范围内,b
将全球。如果您希望b
也是本地的,则必须事先声明它:var b;
。像var a = var b = ....
这样的事情不工作(语法无效)。
稍微偏离主题:
这种方法确实很方便。成像你有一个物体的对象,如:
var map = {
foo: {},
bar: {}
};
并且您希望获取某个键的对象,或者如果该键不存在则创建一个新键。通常人们可能会这样做:
var obj = map[key];
if(!obj) { // works because if the key is set, it is an object
obj = {}; // which evals to true
map[key] = obj;
}
// now work with obj
使用上述方法,可以缩短为
var obj = map[key];
if(!obj) {
map[key] = obj = {};
}
我们可以使用logical OR operator (||
):
var obj = map[key] || (map[key] = {});
(尽管可能性较差)。
答案 1 :(得分:4)
你可以做到这一点。将首先评估a.niceCoat = {}
,它将对象分配给属性,并将对象作为结果,然后您可以将其分配给变量。
但是您应该知道b
和a.niceCoat
现在引用相同的对象,因此如果您在对象中放置任何内容,它将显示变量和属性:
var a = {};
var b = a.niceCoat = {};
b.x = 42;
alert(a.niceCoat.x); // shows 42
答案 2 :(得分:1)
没有问题。它与:
相同var b = (a.niceCoat = {});
与以下内容相同:
a.niceCoat = {};
var b = a.niceCoat; // Now b and a.niceCoat are the same object
请注意用它来声明全新的变量,如:
var i = j = 0;
与以下内容相同:
j = 0;
var i = j;
请注意j未使用var
关键字声明j。
答案 3 :(得分:0)
这是你在javascript中创建一个空对象的方法。没错。
答案 4 :(得分:0)
是的,绝对有效。
E.g。
var a = {};
var b = a.niceCoat = {};
a.foo = function() { alert('foo!'); };
a.foo(); // shows the alert