【发布时间】:2018-02-02 20:10:09
【问题描述】:
我有以下代码,我试图在参数的帮助下执行一个函数。该参数告诉 Javascript 对其指示的数组/字符串执行操作(例如,如果 id 参数为 0,则为 ps 数组和 properties 字符串,如果 @987654328 为 as 数组和 attributes 字符串@不是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) = 部分抛出“未捕获的引用错误:分配中无效的左侧”。如果我从= 的左侧删除括号,它可以工作,除了它只执行后一个数组(又名as)而不是前一个数组(又名ps)的函数。
我知道我在这里做错了,缺少一个符号/一对括号或其他东西。我检查了operator precedence in Javascript,关于同一问题的其他问题,但都表明它应该工作,因为操作员(我认为)是正确的,例如=== 用于条件,简单的= 用于赋值等。最困扰我的是三元运算符中的其他引用工作(此示例的右侧部分,我的代码的其他部分)。
那么……这个有什么问题?
【问题讨论】:
标签: javascript arrays variable-assignment operator-keyword ternary