我有下面的代码,我试图在一个参数的帮助下执行一个函数。上面的参数告诉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} _在我的函数结尾处。如果您提供了适用于我的特定代码的简单解决方案,那么您的答案将会非常完美,但即便如此,这也是最好的答案。谢谢。必须删除并重新发布我更正的评论,因为我无法编辑它。 –