繁体   English   中英

关于JavaScript变量的快速问题

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM