JS中的NaN、undefined、null
2016-03-22 15:56
543 查看
在知乎上看到一个将数字转换成中文输出的函数,其中有i~~(i/=10);看代码是要进行转换成数字。
查了一下果然如此,~~在JS中是进行数字转换,将符号转换成数字类型,例如:
由此联想到js中NaN相关的问题。
一、
在JavaScript中,有6大数据类型,分别包括string,number,boolean,undefined,null和object,
而对于JS来说,整数和浮点数都统称为number类型,除此之外,number类型还有一个很特殊的值,即NaN, 它是用来表示是否属于number类型的一种状态: 是或否。而不是一个确切的值。
(1) 一个表达式中如果有减号(-)、乘号(*) 或 除号(/) 等运算符时,JS引擎会在计算之前试图将运算符两边的变量转化为number类型,如果转化失败,表达式将返回NaN
(2) 直接使用 parseInt, parseFloat 或 Number 将一个非数字的值转化为数字时,表达式返回NaN
"abc"
- 3
//
NaN
parseInt("abc") //
NaN
parseFloat("abc")
//NaN
Number("abc") //NaN
如果非要说NaN是一个值得话,那么 NaN 就是除过数字的任意值,但绝不是确切的某一个值!
所以 NaN != NaN , 因为它是一个范围,而不能代表一个确定的值
二、
此之外,与NaN相关的还有一个函数,即 isNaN() , 它是用来判断某一个变量是不是数字或能否转化为数字,仅此而已。
isNaN(123)
//false
isNaN("123")
//false
isNaN("abc")
//true
isNaN("ab3")
//true
有的朋友可能对NaN理解有偏差,想不明白下面这个问题:
既然
isNaN("abc")
//true
那么
"abc"
== NaN 也应该为true,
三、undefined 、 null
undefined是JavaScript中6种数据类型中的一种,该类型只有一个值,也就是undefined。 undefined意为未定义,即当使用var声明了变量但未进行赋值时,这个变量的值就是undefined。undefined产生的原因有两种:
(1)访问对象不存在的属性或方法
(2)声明了变量但从未赋值
var
v1,obj
= {};
console.log(v1);
//undefined
console.log(obj.get);
//undefined
typeof
v1;
//
"undefined"
typeof
v2;
//
"undefined"
typeof
obj.get;
//
"undefined"
和NaN不同的是,undefined虽然也代表变量的一个状态,但这个状态值是确定唯一的,即当一个变量声明了但没有赋值时,它的状态就是undefined,因此下面表达式是成立的:
var
b;
b
== undefined;
//true
四、
理解了undefined以后,再理解null就容易多了,null类型也只有一个值:null , 表示一个变量中没有包含有效数据。null在这里意为空值、空对象的意思,更确切的说,一个被赋值为null的变量没有保存有效的数值、字符串、布尔、数组或对象等,可以通过给一个变量赋值为null来清空变量中的内容。产生null的原因只有一个:即对一个变量显式的赋值为null 。
var
p
= null;
console.log(p);
//null
typeof
p
;
//
"object"
typeof
null;
//
"object"
还是和NaN来比较,null也是一个确定切唯一的状态值,当一个变量被赋值为null时,那么它就和null相等,因此下面表达式也是成立的:
var
obj
= null;
obj
== null;
//true
function convert(i) { var r, n, x = 0, zero = i % 10 === 0; var unit = ['','','十','百','千','万']; var n2c = ['零','一','二','三','四','五','六','七','八','九']; while (i > 0) { x++; n = i % 10; i = ~~(i /= 10); if (n === 0 && i % 10 === 0) continue; r = (r ? n2c + (n ? unit[x] : '') + r : n2c ); } return zero ? r.substr(0, r.length - 1) : r; } alert(convert("12345"));
查了一下果然如此,~~在JS中是进行数字转换,将符号转换成数字类型,例如:
<pre name="code" class="javascript">~~true == 1 ~~false == 0 ~~"" == 0 ~~[] == 0 ~~undefined ==0 ~~!undefined == 1 ~~null == 0 ~~!null == 1
由此联想到js中NaN相关的问题。
一、
在JavaScript中,有6大数据类型,分别包括string,number,boolean,undefined,null和object,
而对于JS来说,整数和浮点数都统称为number类型,除此之外,number类型还有一个很特殊的值,即NaN, 它是用来表示是否属于number类型的一种状态: 是或否。而不是一个确切的值。
(1) 一个表达式中如果有减号(-)、乘号(*) 或 除号(/) 等运算符时,JS引擎会在计算之前试图将运算符两边的变量转化为number类型,如果转化失败,表达式将返回NaN
(2) 直接使用 parseInt, parseFloat 或 Number 将一个非数字的值转化为数字时,表达式返回NaN
"abc"
- 3
//
NaN
parseInt("abc") //
NaN
parseFloat("abc")
//NaN
Number("abc") //NaN
如果非要说NaN是一个值得话,那么 NaN 就是除过数字的任意值,但绝不是确切的某一个值!
所以 NaN != NaN , 因为它是一个范围,而不能代表一个确定的值
二、
此之外,与NaN相关的还有一个函数,即 isNaN() , 它是用来判断某一个变量是不是数字或能否转化为数字,仅此而已。
isNaN(123)
//false
isNaN("123")
//false
isNaN("abc")
//true
isNaN("ab3")
//true
有的朋友可能对NaN理解有偏差,想不明白下面这个问题:
既然
isNaN("abc")
//true
那么
"abc"
== NaN 也应该为true,
三、undefined 、 null
undefined是JavaScript中6种数据类型中的一种,该类型只有一个值,也就是undefined。 undefined意为未定义,即当使用var声明了变量但未进行赋值时,这个变量的值就是undefined。undefined产生的原因有两种:
(1)访问对象不存在的属性或方法
(2)声明了变量但从未赋值
var
v1,obj
= {};
console.log(v1);
//undefined
console.log(obj.get);
//undefined
typeof
v1;
//
"undefined"
typeof
v2;
//
"undefined"
typeof
obj.get;
//
"undefined"
和NaN不同的是,undefined虽然也代表变量的一个状态,但这个状态值是确定唯一的,即当一个变量声明了但没有赋值时,它的状态就是undefined,因此下面表达式是成立的:
var
b;
b
== undefined;
//true
四、
理解了undefined以后,再理解null就容易多了,null类型也只有一个值:null , 表示一个变量中没有包含有效数据。null在这里意为空值、空对象的意思,更确切的说,一个被赋值为null的变量没有保存有效的数值、字符串、布尔、数组或对象等,可以通过给一个变量赋值为null来清空变量中的内容。产生null的原因只有一个:即对一个变量显式的赋值为null 。
var
p
= null;
console.log(p);
//null
typeof
p
;
//
"object"
typeof
null;
//
"object"
还是和NaN来比较,null也是一个确定切唯一的状态值,当一个变量被赋值为null时,那么它就和null相等,因此下面表达式也是成立的:
var
obj
= null;
obj
== null;
//true
相关文章推荐
- JavaScript中的原型与原型链
- JavaScript中闭包解析
- javascript仿京东导航左侧分类导航下拉菜单效果
- JS中多种方式创建对象详解
- js--属性和方法(私有/公有)
- js返回
- JavaScript关于闭包
- 利用JavaScript生成随机数字!
- js中的计时器的应用
- JSP验证码
- javascript的几种继承方法介绍
- 在页面加载后运行js
- Ajax多重List解析Json
- 基于javascript实现文字无缝滚动效果
- WebApi(一)-实现跨域返回格式支持json
- js调用.net后台事件、后台调用前台以及js调用服务器控件
- js实现去重字符串
- js 获取cookie 值
- 利用should.js进行测试
- 关于如何在jsp通过javascript获取表单中的值,以及为什么登陆界面刷新以后图片都不见了得原因