[英]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.