[英]quick question about JavaScript variables
不知道在这里搜索什么,如果我重复另一个问题,请道歉。
我想知道在JavaScript中使用以下语法是否存在任何我不知道的问题:
var a = {};
var b = a.niceCoat = {};
看起来很方便,但我只是想确保......
这是完全正常的,因为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 = {};
}
我们可以使用逻辑OR运算符( ||
)使其更短:
var obj = map[key] || (map[key] = {});
(虽然它可能不太可读)。
你可以做到这一点。 将首先评估a.niceCoat = {}
,它将对象分配给属性,并将对象作为结果,然后您可以将该对象分配给变量。
但是您应该知道b
和a.niceCoat
现在引用相同的对象,因此如果您在对象中放入任何内容,它将显示变量和属性:
var a = {};
var b = a.niceCoat = {};
b.x = 42;
alert(a.niceCoat.x); // shows 42
这没有问题。 它与以下相同:
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;
请注意如何使用var
关键字声明j。
这是你在javascript中创建一个空对象的方法。 这没什么不对。
是的,绝对有效。
例如
var a = {};
var b = a.niceCoat = {};
a.foo = function() { alert('foo!'); };
a.foo(); // shows the alert
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.