描述
假如后端接口返回数据type,type取值为0,1,2,3,4(都是数字类型)这四个值是有效值,当type取不到值的时候返回null。
现在,前端请求接口获取到数据后,拿到type,当type为null时,需要给一个默认值2,那么你会怎么赋值?
// 接口返回的报文体假如是这样的
const res = {
success: true,
data: {
type: null
}
}
// 前端变量type
const type = res.data.type || 2
如果你是这样赋值,那么如果res.data.type 等于0时会不会有问题呢?显然,如果为0,type会被赋值为2,这样就错了!
所以,首先要排除是不是null
// 前端变量type
let type
if (res.data.type === null) {
type = 2
} else {
type = res.data.type
}
这样是可以实现的,但是代码量比较多,也是比较普通的一种。
你也可能会想到,判断一下res.data.type是不是数字就行了。这样确实是一种思路,那么js中怎样判断是否是数字呢?最直接想到的应该就是isNaN了吧
// !isNaN(变量)返回true代表是数字,返回fasle代表非数字
// 前端变量
const type = !isNaN(res.data.type) ? res.data.type : 2
但是这样对吗???
控制台你可以试一下,
!isNaN(null) = true // !isNaN(null)返回true
这是为什么?
因为如果isNaN函数的参数不是Number类型, isNaN()会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断。null被转换成0了
那有没有好方法呢?我是这样做的
可以利用 NaN 与任何值(包括其自身)相比得到的结果均是 false,这一特性,再利用parseInt方法,具体代码如下
// parseInt(null) = NaN,而NaN和任何值比较都返回fasle
// 前端变量
const type = parseInt(res.data.type) >=0 ? res.data.type : 2
OK!