我有下面的代碼,我試圖在一個參數的幫助下執行一個函數。上面的參數告訴Javascript來在陣列上/串使得其指示執行的操作(例如ps
陣列並且如果id
參數爲0 properties
字符串,as
陣列和attributes
串如果id
不爲0):數組賦值中的引用錯誤(左手邊分配)
var properties = "apple=fruit";
var attributes = "carrot=vegetable banana=fruit cherry=fruit fruit";
var ps = [];
var as = [];
function getpsas(id)
{
(id === 0 ? ps : as) = (id === 0 ? properties : attributes).split(" ").map
(
function(element)
{
var eqlpos = element.lastIndexOf("=");
return {name: element.substr(0, eqlpos), type: element.substr(eqlpos + 1)};
}
).filter
(
function(element)
{
return (/^(vegetable|fruit)$/.test(element.type));
}
);
}
getpsas(0);
getpsas(1);
console.log(ps);
console.log(as);
,Fiddle這裏。它會在(id === 0 ? ps : as) =
部分引發「Uncaught ReferenceError:賦值中無效的左手邊」。如果我從=
左側刪除括號,它將起作用,除了它執行僅適用於後一個陣列(又名as
)而不是前者(又名ps
)的功能。
我知道我在這裏做錯了什麼,錯過了一個符號/一對括號或其他東西。我已經檢查了operator precedence in Javascript,關於同一事件的其他問題,但都表明它應該起作用,因爲操作員(我認爲)是正確的,例如,條件的===
,轉讓的簡單的=
等。最令我困惑的是三元運算符內的其他引用(本示例的右邊部分,我的代碼的其他部分)工作。
那麼......這個有什麼問題呢?
我不得不承認,這是最好的答案,只是因爲它正好說明發生了什麼,爲什麼我的做法是不正確的。我解決了這個問題,但沒有使用「對象」(嚴格來說),而是通過將等式的右邊部分分配給「虛擬數組」(名爲_temp_),然後使_if(id === 0){ps = temp;} else {as = temp} _在我的函數結尾處。如果您提供了適用於我的特定代碼的簡單解決方案,那麼您的答案將會非常完美,但即便如此,這也是最好的答案。謝謝。必須刪除並重新發布我更正的評論,因爲我無法編輯它。 –