数据类型分类
-
基本数据类型
Number | String | Boolean | Null | Undefined | Symbol
-
复合数据类型
Object
数据类型转换
1. 显示类型转换
Number() | String() | Boolean()
1-1. Number()
-
基本数据类型
Number(123); //123
Number('123'); //123
Number('123a'); //NaN
Number('abc'); //NaN
Number(true); //1
Number(false); //0
Number(null); //0
Number(undefined); //NaN
Number(NaN); //NaN
Number(''); //0
Number(' '); //0
Number
在进行字符串转数字时,相当于先调用trim
,再进行Number
的转换。
- 复合数据类型
复合类型的Number强制转换,会先调用其本身的valueOf方法,这个方法默认会返回其本身,如果改写了这个方法,且其返回值是基本类型,则直接对返回值进行Number强制转换,如果返回值是复合类型,则再调用对象的toString方法,如果toString方法的返回值是基本类型,则对该方法的返回值调用Number方法,否则报错。
var a = { s: 1, valueOf: ()=>{return 3} };
Number(a); //3
var b = {};
Number(b); // NaN
var c = {s:1, toString:()=>{ return ' 123'}};
Number(c); //123
2-1. String()
- 基本数据类型
String(123); //"123"
String('123a'); //"123a"
String(true); //"true"
String(false); //"false"
String(null); //"null"
String(undefined); //"undefined"
String(NaN); //"NaN"
- 复合数据类型
复合类型的String强制转换,会先调用其本身的toString方法,这个方法默认会返回的是一个字符串,如果改写了这个方法,且其返回值是基本类型,则直接对返回值进行String强制转换,如果返回值是复合类型,则再调用对象的valueOf方法,如果valueOf方法的返回值是基本类型,则对该方法的返回值调用String方法,否则报错。
var a = {
toString:function(){
return 11;
},
valueOf:function(){
return 22;
},
t:3
};
String(a);//11
Number(a);//22
默认的toString
的转换如下
Object.prototype.toString.call(2); //"[object Number]"
Object.prototype.toString.call('abs');//"[object String]"
Object.prototype.toString.call(true); //"[object Boolean]"
Object.prototype.toString.call(null); //"[object Null]"
Object.prototype.toString.call(undefined);//"[object Undefined]"
Object.prototype.toString.call(NaN);//"[object Number]"
Object.prototype.toString.call( ()=>{} );//"[object Function]"
Object.prototype.toString.call( [] );//"[object Array]"
// HTML DOM 节点
var eles = document.getElementsByTagName("body");
document.writeln( eles.toString() ); // [object HTMLCollection]
document.writeln( eles[0].toString() ); // [object HTMLBodyElement]
所以这个toString
方法是不是很强大,但是有一点是需要注意的,Array
和Date
对象的toString
方法是重写了的。
var a = [1,2,3]; a.toString(); //1,2,3
3-1. Boolean()
- true
Boolean(1); //除零的任意数字
Boolean(' ');//除''的任意其他字符
Boolean([]); //任意对象都为真
Boolean({});
Boolean(-1);//true
- false
Boolean(0);
Boolean('');
Boolean(null);
Boolean(undefined);
Boolean(NaN);
2. 隐式类型转换
-
数学运算
"+"
有一个Strings时,将表达式的值转换为String
"-"
将表达式的值转换为Number
-
if条件
被隐式转换为boolean
-
"=="不严格比较
任意两种类型比较时,如果不是同一个类型比较的话,则按如下方式进行转换比较
对象 => 字符串 => 数值 数值 <= 布尔值