data[0].estate !== (0 || null || "")
0 || null -> null
null || "" -> ""
0 || null || "" -> ""
也就是说你括号里的内容永远都会是个空字符串,如果你想判断它是否非空,那么可以这样:
let estate = data[0].estate
let isEmpty = !(estate && estate !== "")
因为 0
和 null
都判定为 false
,因此
let a;
let c;
a = 0; c = !(a && a !== '') -> true
a = ''; c = !(a && a !== '') -> true
a = null; c = !(a && a !== '') -> true
a = 1; c = !(a && a !== '') -> false
a = 'foo'; c = !(a && a !== '') -> false
a = {}; c = !(a && a !== '') -> false
其实也就是 !!estate
了,!!
可以转换任何东西到一个 bool
值。
你写的肯定不对啊
估计你的目的是判断3个可能,这样写是不对的,其等效于data[0].estate !== ""
,这是因为括号的优先级问题。
估计你是想(data[0].estate !== 0 && data[0].estate !== null && data[0].estate !=="")
或者你具体描述一下你的需求。
看你的代码。。应该是想要这样的结果
data[0].estate !== 0 && data[0].estate !== null && data[0].estate !== ""
如果确定了是这样的需求,可以这样来做:
![0, null, ""].includes(data[0].estate)
includes为强类型匹配,不做自动转换
没有理解这样写的目的是想要啥...
首先来看(0 || null || "")
。
这里 0 会进行强制类型转换,等同于false
。然后跳到null
,null
也是false
,最后命令就等同于:data[0].estate !== ""
其实题主可以了解一下,js中if语句判断的规则是怎么样的,就能理解怎么做了...
如果只是想判断data[0].estate
不为null,不为0,不为空字符串的话,可以使用下面的几种方法,前提要了解js的规则..
// 简单的if逻辑可以用 && 操作符强制转换类型
data[0].estate && doSomething()
// status不为假值时
if (status) {
// other code
}
// 稳妥一点就通过逻辑非运算符进行取反
if (!!status) {
// other code
}
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
对于不对看你需求,别人不知道,一般来说我们这么写: