JavaScript表达式的奇怪行为

3

有人能解释一下为什么会出现这种情况吗?如果有人知道这种行为的名字,请编辑标题。

使用以下代码:

 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: https://jsbin.com/bawepasivo/edit?js,console
repl.it: https://repl.it/GaHX

如果_paramsundefined,当&&表达式返回第一个为假的值和最后一个真实值时,执行第二个表达式的可能性有多大。


arr.push(_params) pushed undefined in arr - Mistalis
你的问题不太清楚,请问具体是什么? _params && Array.isArray(_params) 求值为 false,所以会调用 arr.push(_params);,从而将 undefined 推入 arr 中。 - user247702
但是 && 表达式返回第一个 falsy 值,所以在我的想法中,编译器永远不会执行表达式的第二部分。 - Elias Pinheiro
3个回答

2

您的表达式执行如下:

(_params && Array.isArray(_params)) ? arr.push(..._params) : arr.push(_params);

但您可能是想要这样:

_params && (Array.isArray(_params) ? arr.push(..._params) : arr.push(_params));

您只需要添加括号。


2
 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
}

A,我从另一个角度看到了这个表达式,我看到它是这样的_params && (Array.isArray(_params) ? arr.push(..._params) : arr.push(_params)); - Elias Pinheiro

1
let _params; // undefined

_params && Array.isArray(_params) ? 的值为 false,因此调用的代码是 arr.push(_params);,结果是 arr.push(undefined);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接