JavaScript中的数据类型转换
2017-07-06 本文已影响25人
JokerPeng
一、类型
最新的ECMAScript标准定义了7种数据类型:
-
原始类型:
undefined
,boolean
,number
,string
,null
,symbol
(es6新增)。 -
对象:
object
其中null
是一个比较特殊的,typeof null
得到的是object
,这是一个已经在js中存在近20年的bug,因为涉及很广,所以也就没更正了。
二、值
1、字符串和数组的相互转化
var a = "foo";
var b = ["f", "o", "o"];
a.split("") => b
Array.from(a) => b
b.join("") => a
2、number
42.toFixed(3); //SyntaxError
(42).toFixed(3); //"42.000"
0.42.toFixed(3); //"0.420"
42..toFixed(3); //"42.000"
42.toFixed(3);
是无效语法,因为.被当作常量42.的一部分,所以没有.属性访问运算符来调用tofixed方法。
42..toFixed(3);
第一个.被当作number的一部分
3、整数的检测
检测一个值是否是整数,可以用es6中的Number.isInteger(...)
方法:
Number.isInteger(42); //true
Number.isInteger(42.00); //true
Number.isInteger(42.1); //false
三、强制类型转换
1、显示强制类型转换
- (1) 字符串和数字:
Number(str)
和+str
将字符串类型转化为数字类型
如:
+'123' //123
Number('123') //123
- (2) 将数字类型转化为字符串类型
String(num)
和num.toString()
如:
String(123); //'123'
var a = 123;
a.toString() //'123'
- (3) 转化为布尔值(也是判断true或者false)
使用Boolean(value)和!!value来判断
如:
Boolean(123) //true
!!123 //true
当Boolean对原始数据类型进行转换时,以下都是false,其他都是true:
Boolean(undefined) // false
Boolean(null) // false
Boolean(NaN) // false
Boolean(0) // false
Boolean(-0) // false
Boolean(+0) // false
Boolean('') // false
Boolean([]) // true
-
(4) 日期转化为数字(时间戳)
常用+加上日期对象强制类型转换为数字或者是Date.now()
把当前时间转化为时间戳:
如:
+new Date() //1499325663800
等同于new Date().getTime()
Date.now() //1499325663800
-
(5) 奇特的~
~x大致等同于-(x+1)
如:
~12 //-13
2、隐式的强制类型转换
- (1) 数字类型转字符串类型
' '+num,num+' '
如:
' '+123 //'123'
123+' ' //'123'
2[1,2] + [3,4] //"1, 23, 4"
3 || 和 &&:
a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回a
a || b : 将a, b转换为Boolean类型, 再执行逻辑或, true返回a, false返回b
转换规则:
对象为true
非零数字为true
非空字符串为true
其他为false
四、比较偏的类型转换
[] + [] // ""
[] + {} // "[object Object]"
{} + [] // 0
{} + {} // Chrome中是 "[object Object][object Object]",Firefox中是NaN
1 + true // 2
1 + {a:1} // "1[object Object]"
五、判断数组是否为空
var a = [];
a === []; // false
所以不能通过a 和 [] 比较判断数组是否为空,需要通过数组的长度是否等于0来判断
var a = [];
a.length; // 0