前言
ECMAScript 标准定义了 7 种数据类型: Number,String,Boolean,Null,Undefined,Object,Symbol(ES6新增) 。其中,Number,String,Boolean,Null,Undefined,Symbol为原始数据类型,Object为对象数据类型。
普通的JavaScript对象是“命名值”的无序集合,JavaScript同样定义了一种特殊对象——数组(array),表示带编号的值的有序集合。
JavaScript还定义了另一种特殊对象——函数。函数是具有与它相关联的可执行代码的对象,通过调用函数来运行可执行代码,并返回运算结果。
一、转换为字符串类型
1、 toString() :此方法不可转换null以及undefined,否则报错!
var a = 5;
console.log(a.toString()); //"5"
var b = null;
console.log(b.toString()); //Uncaught TypeError: Cannot read property 'toString' of null
var c = undefined;
console.log(c.toString()); //Uncaught TypeError: Cannot read property 'toString' of undefined
2、String() :可以把任意值转换成字符串。
var a = null;
console.log(String(a)); //"null"
var b = undefined;
console.log(String(b)); //"undefined"
3、隐式转换:[num+""]
var a = 5;
var b = 5 + "";
console.log(b); //"5"
二、转换为数值类型
1、Number():可以把任意值转换成数值,如果要转换的字符串中有一个不是数值的字符,则返回NaN。
var a = "5";
console.log(Number(a)); //5
var b = "51cd";
console.log(Number(b)); //NaN
// 常见值转换
console.log(Number("")); //0
console.log(Number(true)); //1
console.log(Number(false)); //0
console.log(Number(undefined)); //NaN
console.log(Number(null)); //0
2、parseInt():解析一个字符串参数,并返回一个指定进制的整数 。语法:parseInt(string, radix)。
// 返回8进制数
console.log(parseInt("17", 8)); //15
// 返回10进制数
console.log(parseInt("015", 10)); //15
// 返回16进制数
console.log( parseInt(" F", 16)); //15
// 如果第一个字符是数字会解析直到遇到非数字结束
var a="10.5cd";
console.log(parseInt(a)); //10
//如果第一个字符不是数字或者符号就返回NaN
var b="ef10.5";
console.log(parseInt(b)); //NaN
3、parseFloat():解析一个字符串参数并返回一个浮点数,如果给定值不能被转换成数值,则会返回 NaN。
● 如果 parseFloat 在解析过程中遇到了正号(+)、负号(- U+002D HYPHEN-MINUS)、数字(0-9)、小数点(.)、或者科学记数法中的指数(e 或 E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数。
● 第二个小数点的出现也会使解析停止(在这之前的字符都会被解析)。
console.log(parseFloat('314e-2')); //3.14
console.log(parseFloat('0.0314E+2')); //3.14
console.log(parseFloat(' 3.14some ')); //3.14
console.log(parseFloat('some3.14')); //NaN
4、隐式转换:[string-0]或者[+string]
console.log('123'-0); //123
console.log(+'456'); //456
三、转换为Boolean类型
1、Boolean():可以将任意类型的值转为布尔值。
console.log(Boolean(1)); //true
console.log(Boolean(0)); //false
console.log(Boolean('1')); //true
console.log(Boolean('0')); //true
console.log(Boolean( )); //false
console.log(Boolean('')); //false
console.log(Boolean(null)); //false
console.log(Boolean(undefined)); //false
2、!! :可以将任意类型的值转为布尔值。(此方法不适用于空格)
console.log(!!1); //true
console.log(!!0); //false
console.log(!!'1'); //true
console.log(!!'0'); //true
console.log(!!''); //false
console.log(!!null); //false
console.log(!!undefined); //false
复制代码
发现一个有意思的事情:!代表取反,!!代表转换为Boolean类型,那!!!或者更多的!代表什么呢?
奇数的!代表取反,偶数的!代表转为Boolean类型;或者!>2都是在取反;或者可以说其实一个!是取反,两个!!是取反的取反,然后叠加的!也是一直在取反。
console.log(!1); //false
console.log(!!1); //true
console.log(!!!1); //false
console.log(!!!!1); //true
参考资料
1、MDN JavaScript 标准内置对象
2、JS 几种数据类型及其转换
3、JavaScript权威指南(第6版)