2012-11-19 93 views
0

我看到很多代碼,開始像檢查對象存在

var a=a||{}; 

現在我知道它的檢查,如果存在。

我的問題是爲什麼要檢查它,如果它在第一個代碼?

我的意思是程序員知道a不存在。

+0

如果'了'存在,使用現有的'了'對象,而不是創造的新。您不知道包含的腳本是否可能會創建這樣的變量 - 並且您可能會通過覆蓋其他腳本來弄亂其他腳本。 – nhahtdh

+2

它實際上測試'a'是否具有falsy值,但如果'a'未定義,如_not declared_中,它將不起作用,您將不得不使用'typeof a!=='undefined'' – elclanrs

+0

是我知道它,但正如我所說,這是第一個代碼,所以程序員知道a不存在 – user1801625

回答

2

程序員應該知道變量是否存在。

它用於將不同的腳本塊混合在一起,而無需跟蹤腳本的哪個部分首先被加載。幾個腳本在開始時會有相同的代碼,所以它們共享相同的變量。

對於第一個腳本,聲明變量,並且沒有以前的值,因此使用{}值。

對於使用它的以下腳本,var將被忽略,因爲該變量已被聲明,並且使用之前設置的變量值。

當然,在幾個地方聲明相同的變量對它有代碼味道。最好你應該跟蹤你在做什麼,以便你只申報一次。

0

這是恢復默認值的快捷方式 - {}在這種情況下。

0

基本上,JavaScript可以寫入多個文件,並且在每個文件中可以定義多個聲明和函數。

即使程序員知道給定的實例是否存在該變量,也無法知道從其他位置調用此代碼時它是否已經存在。

這不應該發生在編寫良好的代碼中(全部來自一個開發人員/房子),但它確實發生在js代碼從多個位置合併的項目中。

這個SO question關於javascript中的變量作用域有一個很好的答案,它應該澄清你的疑惑。

1

翻譯成更清晰的代碼

var a; // The variable declaration gets brought up because of hoisting 

更多信息在吊裝here

if(a) { 
    a = a; // if a is a truthy value then assign it to itself 
} else { 
    a = {}; // if a is a falsy value then set the default to an empty object 
} 

希望幫助