JavaScript表达式的奇怪行为

JavaScript表达式的奇怪行为,javascript,ecmascript-6,Javascript,Ecmascript 6,有人能向我解释为什么会这样?如果有人知道这个行为名称,请编辑标题 使用此代码: const arr = ['RIPA'], varB = "RIPB"; let _params; _params && Array.isArray(_params) ? arr.push(..._params) : arr.push(_params); _params && console.log("I will never appear"); varB &&

有人能向我解释为什么会这样?如果有人知道这个行为名称,请编辑标题

使用此代码:

 const arr = ['RIPA'], varB = "RIPB";
let _params;
_params && Array.isArray(_params) ? arr.push(..._params) : 
arr.push(_params);

_params && console.log("I will never appear");
varB && console.log("I will appear");

arr.push(varB);
console.log('array',arr);
console.log("Type of the _params --> ", typeof _params);
输出:

array [ 'RIPA', undefined, 'RIPB' ]
Type of the _params -->  undefined
jsBIN:
答复:

如果
\u参数
未定义,如果
&&
表达式返回第一个false和最后一个trusty值,则执行第二个表达式的可能性有多大

 false  && false                  ? never executed       : _params is undefined
_params && Array.isArray(_params) ? arr.push(..._params) : arr.push(_params);
其他方式:

if (_params && Array.isArray(_params)) { // (false && false) === false
    arr.push(..._params); // it will be never executed
} else {
    arr.push(_params); // _params is undefined
}

\u-params&&Array.isArray(\u-params)
false
,因此调用的代码是
arr.push(\u-params),导致
arr.push(未定义)

表达式的执行方式如下:

(_-params&&Array.isArray(_-params))?arr.push(…_参数):arr.push(_参数)

但你的意思可能是:

_参数&(Array.isArray(_参数)?arr.push(…_参数):arr.push(_参数))


您只需添加括号。

arr.push(_参数)
push
undefined
arr
中,您的问题到底是什么,有点不清楚
\u params&&Array.isArray(\u params)
计算结果为
false
,因此
arr.push(\u params),它将
未定义的
推送到
arr
。但是&&表达式返回第一个falsy值,因此在我看来,编译器永远不能执行表达式的第二部分。A,我从另一个角度看表达式,我是这样看的
参数&(Array.isArray(\u params)?arr.push(…\u params):arr.push(_参数));
let _params; // undefined