混淆逻辑运算 if(null)


const selectedOption = { value: null , ...other }
if (selectedOption && selectedOption.value ) {
console.log('it is?')
}

我认为控制台一定不会发生
,但为什么会发生?

selectedOption.value 为 null,所以它是 falsy value no?


对不起,我错

是的,null是一个虚假的值。假值有nullundefined0""NaN,当然还有false。所有其他值都是真实的。

但是,正如马克在评论中指出的那样,这并不一定意味着您不会进入if的正文,因为selectedOption.value可能不null(例如,如果other有一个非nullvalue):

const other = {value: 42};
const selectedOption = { value: null , ...other }
if (selectedOption && selectedOption.value ) {
console.log('it is?')
}

如果点差顺序不同,selectedOption.value肯定会null

const other = {value: 42};
const selectedOption = { ...other, value: null }
if (selectedOption && selectedOption.value ) {
console.log('it is?');
} else {
console.log("definitely false");
}

对象初始值设定项按源代码顺序处理,因此后面的属性优先于具有相同名称的早期属性。

最新更新