if判断是否有值,但是这个值为0,它也判了不过请问怎么写呢

if判断是否有值,但是这个值为0,它也判了不过请问怎么写呢

    // row保存

saveRow (record) {

const { num, id } = record

if (!num) { // 这里为0也走了,怎么判断单纯有没有值

this.tableLoading = false

this.$message.error('请填写完整信息。')

return

}

},


回答:

这里先要搞明白 num 允许是哪些值。如果只能是数字的话,可以这样

if (typeof num === "number") { ... }

不过这样的话,num 还有可能是 NaN,一般 NaN 也需要过滤掉(要不要过滤看业务),所以

if (typeof num === "number" && !isNaN(num)) { ... }

接下来,如果逻辑可以保证 num 只会是数字,或者空(含 undefined),那么可以这样判断

if (!(num === undefined || num === null || isNaN(num))) { ... }

如果用新语法 Nullish Coalescing,会简单一些

if (!isNaN(num ?? NaN)) { ... }

如果 NaN 算是合法的,那就得找个不应该出现的值(只能是一个非数字值了,幸好 JS 不绑定类型)

// if (num ?? false !== false) { ... }

// 修改一下,用 null 语义上更舒服一些

if (num ?? null !== null) { ... }

更复杂的情况,如果 "1234" (表示数的字符串)这种也算合法,还是老实的用 typeof

// 代码没测试,小心使用

// 假设 NaN 不合法

function isValudNum(num) {

switch (typeof num) {

case "string":

num = parseInt(num, 10);

// 如果可能是浮点数用 parseFloat

// 这里不加 break,需要穿透下去判断 isNaN

case "number":

return !isNaN(num);

default:

return false;

}

}

如果 NaN 也合法,处理 "string" 类型的时候会更伤心,因为需要先判断是否数字,用正则表达式判断

case "string":

return /^\d+$/.test(num);

// 如果要判断浮点数

// return /^\d+(?:\.\d+)?$/.test(num);

当然,如果只是做数字判断的话,NaN 不合法的情况下,用下面这个 case "string" 代替上面那个也是没问题的。


回答:

使用null或undefined,num == null

双等判断下,undefined和null相等,0和空字符串、false相等


回答:

方法1: 编写isNil函数判断

function isNil(value) {

return value === null || value === undefined

}

if (isNil(num)) {

...

}

方法2:用Lodash

import {isNil} from 'lodash'

if (isNil(num)) {

...

}

方法3:用新语法,双问号 ??

saveRow (record) {

// 将错误提示的逻辑用箭头函数(一定要箭头函数,为了this能穿透到上一级作用域)包装

const tip = ()=> {

this.tableLoading = false

this.$message.error('请填写完整信息。')

return

}

const { num, id } = record

num ?? tip() // ?? 操作符只会在 num 为null或undefined 执行 ?? 后面的语句

}


回答:

if (num || num === 0) {}


回答:

看你的变量命名,知道值是个number类型,或许可以换个思路
if (typeof num === 'number')
毕竟false, 空字符串,null,undefined类型各异
当然,要是值没限制类型,那还是别用了


回答:

多加一些空值判断,类似这样的

num === '' || num == null || num == undefined


回答:

isNaN(num) 数字返回false 或 if(!num && num!=0)


回答:

if判断
其值为 0、-0、null、""、false、undefined 或者 NaN,那么if判断 false ,其他为true


回答:

虽然上面有很多大佬已经给出了各种方案,但我还是要吐槽一番,因为我也是0的受害者。而且是深受其害,接口字段定义太随便,枚举也都是从0开始定义,导致各种function有意无意的过滤掉,恶心的要死,只能是用全等去解决,但还是有0和"0"的区别的地方,总之一旦有0,就得针对性的去改代码。。。加油


回答:

自己封装一个方法

export function isEmpty(v) {

if (v === '' || v === undefined || v === null) {

return true

}

if (typeof v === 'object') {

if (Array.isArray(v)) {

return v.length === 0

} else {

return Object.keys(v).length === 0

}

}

return false

}


回答:

是0,不过是'0',所以变成false了


回答:

const { num, id } = record
判断record是否有某个字段?

Reflect.has(record, 'num')

以上是 if判断是否有值,但是这个值为0,它也判了不过请问怎么写呢 的全部内容, 来源链接: utcz.com/p/935690.html

回到顶部