这似乎是一个常见问题,但我找不到任何可以帮助我理解的内容。
我有一堆带有bool类型的介绍成员的项目。有些项目引入了真值,有些是假的。所以来自c ++我不希望这会返回'false'(item.introduced是boolean)
if ((show_introduced == "false") && (item.introduced)) {console.log(item.introduced)};
但我实际上将'假'视为'真'。
对我来说,它是一样的,当然,它从不输出任何东西。
var a = false;
if (true && a) {console.log(a)};
和&&在js中工作方式不同,或者我应该在代码的其余部分找到问题?
已编辑:因为item.introduced是从JSON读取的,所以它实际上是一个字符串,所以这就是它无效的原因。
答案 0 :(得分:2)
'false'使它成为一个字符串,这是真的。所以,“假”!=假 把它写成
(show_introduced === false)
修改强> Javascript中的虚假值:
false(布尔值) “”(空字符串) 0(零) 空值 未定义 为NaN
如果你从上面得到任何东西,它们就是虚假的价值,而其他一切都是真的。
答案 1 :(得分:2)
不要尝试将布尔值与true或false进行比较,只需将它们用作布尔值
if ( showIntroduced )
或
if ( ! showIntroduced )
逻辑运算符,例如&&和||在JavaScript中的行为与您对C / C ++的期望相同,具有相同的短路规则。