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