首先要了解 NaN 是什么:Not a number ( 非数值 )
当语句中需要判断一个变量值是否为数值时,可以用isNaN()方法,得到true则表示不是数值。
var val = "abc"alert(isNaN(val))//结果为:true
虽然语句中碰到产生NaN错误还会继续往下一句解析执行,但还是应该用判断语句处理一下:
if(isNaN(val)){alert("val值 为 非数值")
//其他处理语句,如重新获取、从其他地方获取
}
什么是NaN:
NaN 就是在发生类型强制转换的时候会产生 NaN ,也就是把其他类型转换成 Number 类型时,不能转换而返回的结果。
几种转换为 Number 类型的方法及可能出现NaN情况:
第一种转换函数:parseInt / parseFloat
console.log(parseInt(" 我是谁 ")) console.log((" 我是谁 "))
以上两种转换函数的结果就会返回 NaN 因为转换的不是一个有效数字啊。
第二种强制转换类型: Number()
console.log(Number("12px"))返回 NaN 因为不是一个有效数字,后面有文字
第三种变量弱类型转换:
var str = '012.345 ' var x = str - 0 console.log(x, typeof x) // 这就是正常的了
那在JS中不管是什么都会有个类型,那 NaN 是个啥类型呢?
这里可以看到,NaN 的类型是 Number,那既然是 Number 类型,那我用它来比较是不是 数字类型 可不可以勒,那咱们就来看一下。
那这里怎么返回的都是 false 呢? 并且自己连自己都不等于,NaN的英文翻译是:Not a number (不是一个数字的缩写),那居然你不是一个数字 比喻是A,我也不是一个数字 比喻是B,那么 A == B 嘛?你会发现并不相等 返回 false。
那我想判断一个 变量是不是数字类型,不能使用NaN方法,那就有了 isNaN 的出现,请看下方用法:
isNaN 返回值是 如果你是有效数字,就是返回false,这里为啥是false 请看上面 NaN 英文的翻译 ,如果你返回的不是一个有效数字就是 true。
原理相当于是:
这里你会发现,判断的时候通过Number进行了一波隐式转换,才得到最终结果 false。
说到在项目中真实的用处,目前还没有遇到,但是如果你了解这个方法,遇到相关处理数据需要判断时,你就会想到它啦,以上就是本人对 NaN 及 isNaN 的相关介绍, 还有那句话:如有不对之处及不周之处请大佬们指出,也希望对一些人有所帮助,咱们下次再会!
方法如下。function convertImgToBase64(url, callback, outputFormat)
{var canvas = document.createElement('CANVAS'),
ctx = canvas.getContext('2d'),
img = new Image
img.crossOrigin = 'Anonymous'
img.onload = function(){canvas.height = img.height
canvas.width = img.width
ctx.drawImage(img,0,0)
var dataURL = canvas.toDataURL(outputFormat || 'image/png')
callback.call(this, dataURL)
canvas = null}
img.src = url}