js if条件判断请问这样写对吗?

大融
  • 48
data[0].estate !== (0 || null || "")
回复
阅读 1.5k
7 个回答

对于不对看你需求,别人不知道,一般来说我们这么写:

if (typeof data[0].estate !== 'undefined') {
    // 表示至少设置了一个值
}

if (!!data[0].estate) {
    // 表示值不是 undefined,null,0,'',false
}

0 || null -> null
null || "" -> ""
0 || null || "" -> ""

也就是说你括号里的内容永远都会是个空字符串,如果你想判断它是否非空,那么可以这样:

let estate = data[0].estate
let isEmpty = !(estate && estate !== "")

因为 0null 都判定为 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 值。

不对。
你这样写相当于

data[0].estate !== ''

你写的肯定不对啊
估计你的目的是判断3个可能,这样写是不对的,其等效于
data[0].estate !== "",这是因为括号的优先级问题。
估计你是想(data[0].estate !== 0 && data[0].estate !== null && data[0].estate !=="")
或者你具体描述一下你的需求。

console.log(!data[0].estate);

判断是否为泛false

看你的代码。。应该是想要这样的结果

data[0].estate !== 0 && data[0].estate !== null && data[0].estate !== ""

如果确定了是这样的需求,可以这样来做:

![0, null, ""].includes(data[0].estate)

includes为强类型匹配,不做自动转换

没有理解这样写的目的是想要啥...

首先来看(0 || null || "")

这里 0 会进行强制类型转换,等同于false。然后跳到nullnull也是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
}
宣传栏