簡體   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