從Mozilla的JavaScript 1.7 changlog中可以看出,他們添加了解構賦值工具。可悲的是,我不是很喜歡的語法(爲什麼寫a和b兩次?):JavaScript中的解構賦值工作
var a, b;
[a, b] = f();
像這樣的事情會好了很多:
var [a, b] = f();
這仍然是向後兼容。類似Python的解構不會向後兼容。
反正我已經能夠拿出對JavaScript 1.5的最佳解決方案是:
function assign(array, map) {
var o = Object();
var i = 0;
$.each(map, function(e, _) {
o[e] = array[i++];
});
return o;
}
其工作方式:
var array = [1,2];
var _ = assign[array, { var1: null, var2: null });
_.var1; // prints 1
_.var2; // prints 2
但是,這真的很爛,因爲_是沒有意義的。這只是一個空殼來存儲名稱。但令人遺憾的是,它是必需的,因爲JavaScript沒有指針。在正面,您可以在值不匹配的情況下分配默認值。另請注意,此解決方案不會嘗試對數組進行分片。所以你不能做像{first: 0, rest: 0}
這樣的東西。但是,如果有人想要這種行爲,那很容易做到。
什麼是更好的解決方案?
我同意的唯一的事情是,解構可能是一個更好的名字。 *來源,目的地是unix風格。 *填充全球範圍是不好的。它不會導致組合性。 *將輸出變量寫入字符串會讓您的編輯人員感到疲倦和困難。就像編寫SQL一樣。 – 2008-10-15 18:31:49
@AndersRuneJensen由於這模仿了一個賦值,因此目標應該幾乎肯定在左邊 - 就像`[var1,var2] = arr`。而`destructure`是一個可怕的,無意露出的名字。我認爲`assign`更好 - 畢竟,這被認爲是一個通用的效用函數。如果不是,那麼也許`massAssign`? – 2014-06-27 19:36:12