关键字:是否为NaN JavaScript TypeScript ArkTS 鸿蒙开发 HarmonyOS开发 判断数字类型
正文
开发当中我们经常遇到这样的问题:获取一个字符串转数字的结果。
但是如果这个字符串不是纯数字,使用parseInt( value )方法获取的数字为NaN。
我们想要判断这个数字是否为NaN,只能通过isNaN( )的方法,不能使用 if(value == NaN) 来判断,即使编译器检查不出来错误
根据官方文档我们可以得知isNaN的使用方法以及定义:
isNaN()返回一个布尔值,表示一个值是否为保留值NaN(非数字)。 函数定义如下:
function isNaN(number:number): boolean {
return Number.isNaN(number);
}
以下为一些示例:
我们想要根据文本框中的内容设置图片的宽度大小,先要获取输入框中的内容
// 正确示范如下:
TextInput({placeholder:'图片大小默认显示在这里',text:this.pictureWidth.toFixed()})
.backgroundColor('gray')
.width(280)
.type(InputType.Number)
.onChange( value =>{
// value是字符串类型,parseInt()将其转换为数字
let intValue: number = parseInt(value)
// 以下为判断是否为数字
if (isNaN(intValue)) { // 此处使用isNaN()方法返回一个布尔值
this.pictureWidth = 0
}else {
this.pictureWidth = intValue
}
})
如果我们将转换数字的方法替换为:
if(typeof(parseInt(value)) === 'number'){
}
或者
if(parseInt(value) == NaN){
}
编译器均不会报错,但是还是无法准确判断出数字是否真的是NaN
在JavaScript中,NaN(Not a Number)是一个特殊的值,表示非数字。在鸿蒙开发当中使用的ArkTS也具有类似的性质。当一个数字被赋值为NaN后,它将无法再被改变。这是因为NaN具有一些特殊的性质:
- 唯一性:NaN是唯一一个不等于自身的值。任何比较操作符(如==、!=、=、!)都会返回false,包括NaN与自身进行比较。
- 不变性:NaN与其他任何值的运算结果都是NaN。例如,NaN + 5、NaN - 3、NaN * 0等都会得到NaN作为结果。
- 无法判断相等性:NaN与任何值(包括NaN本身)的比较都会返回false。例如,NaN === NaN会返回false。
由于这些特殊性质,一旦一个数字被赋值为NaN,它就无法再通过常规的算术运算或比较操作来改变其值了。