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