关于JavaScript变量的快速问题

时间:2011-08-30 17:32:48

标签: javascript variables

不知道在这里搜索什么,如果我在重复另一个问题,请道歉。

我想知道在JavaScript中使用以下语法是否有任何我不知道的问题:

var a = {};

var b = a.niceCoat = {};

似乎很方便,但我只想确保......

5 个答案:

答案 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 = {},它将对象分配给属性,并将对象作为结果,然后您可以将其分配给变量。

但是您应该知道ba.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