2018-06-26 (NaN)
2018-06-26 本文已影响0人
Mo_ham_med
NaN
NaN (not a Number) 不是 一个 数字 。
NaN (not a Number) 不是 一个 数字 。
是一个特殊的值,这个数值表示 本来 要 返回数值 的 操作数 未返回数值的情况 (这样就不会抛出错误了)。
比如在其他语言中
任何数值除以 0 都会 导致 错误 而 终止 程序执行。 但是 在 ECMAScript中,会返回出特殊的值,
因此 不会 影响 程序 的执行。
var box = 0/0; // NaN
var box = 12/0; // Infinity
var box = 12/0*0 // NaN;
可以通过 Number.NaN 得到 NaN 的值, 任何与 NaN 进行 运算 的 结果 均会为 NaN ,
NaN 与 自身不相等(NaN不与任何值 相等)。
alert(Number.NaN) // NaN
alert(NaN + 1) // NaN
alert(NaN == NaN) // false
isNaN () 函数 , 用来 判断 这个是不是 NaN, isNaN() 函数 在 接收到 一个值后,会尝试
将这个值 转换成 数值。
alert(isNaN(NaN)) // true
alert(isNaN(25)) // false 25 是一个数值
alert(isNaN('25')) // false '25' 是一个字符串数值,可以转换为数值
alert(isNaN('Lee'))// true 'Lee' 是个 字符串 , 不能 转化 为 数值
alert(isNaN(true)) // false true 可以 转化成 1
有 三个函数 可以 把 非数值 转换 成 数值 : Number() 、 parseInt() 和
parseFloat()。 Number() 是 转换型 函数, 可以用于 任何 数据类型,而 另外 两个则,
专门 用于 把 字符串 转换 成 数值。
alert(Number(true)) // 返回 值 1 Boolean 类型的 true 和 false 分别 转换成 1 和 0
alert(Number(25)); // 25 , 数值类型直接返回。
alert(Number(null)); // 0 , 空对象 返回 0 ;
alert(Number(undefined)); // NaN , undefined 返回 NaN 如下
var vmp
alert(Number(vmp)); // NaN
// 声明变量 vmp 没有 赋值 , 没有 赋值 就是 默认值,变量未定义之前,默认值是 undefined
// undefined 返回 NaN, 所以, 用 Number() 函数 转化 为 数值,所以是,NaN;
如果是 字符串 增寻 以下 规则:
1. 只 包含 数值的 字符串, 会直接 转换成 十进制 数值, 如果 包含 前面 有 0,即会 自动 去掉。
alert(Number('456')); // 456
alert(Number('070')); // 70
2. 只包含 浮点数值 的 字符串,会直接 转换 成 浮点数值, 如果 包含前导 和 后导 0 ,即会自动去掉。
alert(Number('08.50')); // 8.5
3. 如果 字符串 为 空, 那么 直接 转换 成 0 ;
alert(Number('')) // NaN
4. 如果 不是 以上 三种 字符串类型, 则 会 返回 NaN。
alert(Number('lee123')) // NaN
由于 Number() 函数 在 转换 字符串 时 比较 复杂 切 不够合理, 因此 在处理整数的时候,
更常用的是,parseInt()。
alert(parseInt('456lee')); // 456 , 返回 整数 部分。
alert(parseInt('lee456lee')); // NaN , 如果 第一个 不是数值, 就会 返回 NaN。
alert(parseInt('12Lee56Lee')); // 12 , 从第一个数值 开始取,到 最后 一个连续数值结束。
alert(parseInt(56.12)); // 56 , 小数点不是数值, 会被 去掉。
alert(parseInt('')); // NaN, 空 返回 NaN
parseInt() 除了 可以 识别 十进制数,开可以 识别 八进制 和 十六进制。
alert(parseInt('0xA')); //10,十六进制
alert(parseInt('070')); //56,八进制
alert(parseInt('0xALee')); //100,十六进制,Lee被自动过滤
ECMAScript 为 parseInt() 提供了 第二参数, 用于解决 各种 进制转换。
alert(parseInt('0xAF')); //175,十六进制
alert(parseInt('AF',16)); //157,第二参数指定十六进制,可以去掉0x前导
alert(parseInt('AF')); //NaN,这里看作字符串,理所当然NaN
alert(parseInt('101010101',2)); //314,二进制转换
alert(parseInt('70',8)); //56,八进制转换
parseFloat() 是用于 浮点数值的转换, 和 parseInt() 一样, 从 第一位解析到 浮点数值位置。
alert(parseFloat('123Lee')); // 123 , 去掉不能 识别的部分。
alert(parseFloat('0xA')); // 0 , 不认识 十六进制
alert(parseFloat(123.4.5)) // 123.4 只认识 一个小数点
alert(parseFloat(0123.400)) // 123.4 去掉 前后导
alert(parseFLoat('1.234e7')); // 12340000 , 把科学计数法 转换成 普通 数值。