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"` 代替上面那个也是没问题的。