// row保存
saveRow (record) {
const { num, id } = record
if (!num) { // 这里为0也走了,怎么判断单纯有没有值
this.tableLoading = false
this.$message.error('请填写完整信息。')
return
}
},
// row保存
saveRow (record) {
const { num, id } = record
if (!num) { // 这里为0也走了,怎么判断单纯有没有值
this.tableLoading = false
this.$message.error('请填写完整信息。')
return
}
},
function isNil(value) {
return value === null || value === undefined
}
if (isNil(num)) {
...
}
import {isNil} from 'lodash'
if (isNil(num)) {
...
}
??
saveRow (record) {
// 将错误提示的逻辑用箭头函数(一定要箭头函数,为了this能穿透到上一级作用域)包装
const tip = ()=> {
this.tableLoading = false
this.$message.error('请填写完整信息。')
return
}
const { num, id } = record
num ?? tip() // ?? 操作符只会在 num 为null或undefined 执行 ?? 后面的语句
}
看你的变量命名,知道值是个number类型,或许可以换个思路if (typeof num === 'number')
毕竟false, 空字符串,null,undefined类型各异
当然,要是值没限制类型,那还是别用了
虽然上面有很多大佬已经给出了各种方案,但我还是要吐槽一番,因为我也是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
}
11 回答7.7k 阅读
16 回答2.8k 阅读✓ 已解决
6 回答4.2k 阅读✓ 已解决
14 回答5.5k 阅读
11 回答2.7k 阅读✓ 已解决
9 回答3.2k 阅读
7 回答1.8k 阅读
这里先要搞明白
num
允许是哪些值。如果只能是数字的话,可以这样不过这样的话,
num
还有可能是NaN
,一般NaN
也需要过滤掉(要不要过滤看业务),所以接下来,如果逻辑可以保证
num
只会是数字,或者空(含undefined
),那么可以这样判断如果用新语法 Nullish Coalescing,会简单一些
如果
NaN
算是合法的,那就得找个不应该出现的值(只能是一个非数字值了,幸好 JS 不绑定类型)更复杂的情况,如果
"1234"
(表示数的字符串)这种也算合法,还是老实的用typeof
吧如果
NaN
也合法,处理"string"
类型的时候会更伤心,因为需要先判断是否数字,用正则表达式判断当然,如果只是做数字判断的话,
NaN
不合法的情况下,用下面这个case "string"
代替上面那个也是没问题的。