表达式JavaScript的奇怪行为

时间:2017-03-23 10:27:19

标签: 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 && 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,如果&&表达式返回第一个false值和最后一个可信值,则执行第二个表达式的可能性如何。

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:2)

你的表达式是这样执行的:

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

但你的意思可能是:

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

您只需要添加括号。

答案 2 :(得分:1)

let _params; // undefined

_params && Array.isArray(_params) ?false,因此被叫代码为arr.push(_params);,结果为arr.push(undefined);

相关问题