繁体   English   中英

如何在三元运算符或 boolean 运算符中处理 boolean 值本身?

[英]How to handle boolean values itself in the ternary operator or boolean operators?

我正在解析 JSON 响应,如果数据存在,我需要按原样返回值,否则返回 null。 我尝试为此使用三元运算符/布尔运算符,它适用于其他数据类型,但不适用于 boolean 值本身

例子:

let dummyObj = {
    data: {
        testdata: false
    }
};

console.log(dummyObj.data && dummyObj.data.testdata || null); // returns null always, should return false
console.log((dummyObj.data && dummyObj.data.testdata) ? dummyObj.data.testdata : null); // same behavior, always returns null if the testdata value is false

该语句总是返回 null,因为 testdata 的值本身为 false,它进入 or 条件并返回 null。 如果数据不是 boolean 或值为 true,这可以正常工作。

我怎样才能使这项工作? 有没有办法处理 boolean 值?

Nullish Coalescing 运算符是一个不错的选择。 现代浏览器大多支持这一点,可选链也有助于安全地验证嵌套属性

console.log(dummyObj?.data?.testdata ?? null); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining

如果您真的想按原样返回值,如果属性存在,那么您必须使用hasOwnProperty方法或in运算符测试它的存在:

dummyObject.data?.hasOwnProperty('testdata') ? dummyObject.data.testdata : null
('data' in dummyObject && 'testdata' in dummyObject.data) ? dummyObject.data.testdata : null

如果您还想将该属性视为不存在,如果它的值是undefinednull ,那么在另一个答案中描述了更短的方法。

另一种表述方式:确定属性的可能值(或数据类型)的确切范围,并使用适用于该值范围的最简单的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM