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

发布于 2022-09-13 00:33:47 字数 237 浏览 11 评论 0

    // row保存
    saveRow (record) {
      const { num, id } = record 
      if (!num) { // 这里为0也走了,怎么判断单纯有没有值
        this.tableLoading = false
        this.$message.error('请填写完整信息。')
        return
      }
    },

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(12

嗫嚅 2022-09-20 00:33:47

这里先要搞明白 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" 代替上面那个也是没问题的。

可是我不能没有你 2022-09-20 00:33:47

使用null或undefined,num == null

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

橘寄 2022-09-20 00:33:47

方法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 执行 ?? 后面的语句
}
空城之時有危險 2022-09-20 00:33:47
if (num || num === 0) {}
梦归所梦 2022-09-20 00:33:47

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

轻拂→两袖风尘 2022-09-20 00:33:47

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

num === '' || num == null || num == undefined
↙厌世 2022-09-20 00:33:47

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

写给空气的情书 2022-09-20 00:33:47

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

雨的味道风的声音 2022-09-20 00:33:47

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

a√萤火虫的光℡ 2022-09-20 00:33:47

自己封装一个方法

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
}
╰沐子 2022-09-20 00:33:47

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

一世旳自豪 2022-09-20 00:33:47

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

Reflect.has(record, 'num')

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文