javascript不同类型数据之间的运算的转换方法
这篇文章主要介绍了javascript不同类型数据之间的运算的转换方法,需要的朋友可以参考下
js中不同类型的基础数据之间可以转换,这种转换是有规则可寻的,并非随意的随机的。在js中有5种基础类型数据:string、number、boolean、null、undefined,其中,常用于计算或者比较的类型是前面三种。
基础数据之间的转换
原始数据类型 | 目标类型Number |
---|---|
undefined | NaN |
null | 0 |
false | 0 |
true | 1 |
数字串 | 相应的数字 |
不能转化的字符串 | NaN |
原始数据类型 | 目标类型Number |
---|---|
undefined | undefined |
null | null |
false | false |
true | true |
数字 | 数字字符串 |
//如果username是null、undefined、false、0、""或者NaN,那么给它赋一个新值
if(!username)username="John Doe";
if(username==null)//如果username是null或者undefined
username="John Doe";//对其进行定义
不同类型的基础数据之间的加法,数据先转换为number,然后转换为string(如果有string类型数据参与运算)
null + undefined // 0+NaN
null + false // 0+0
1 + true // 1+1
1 + '1' //'11';数字与字符串相加结果是字符串
1 + 2 + '3' //'33';(1+2)的结果然后与'3'相加;这里要把每一步加法单独拆开来看,否则变成和下面一样的结果了.
1 + (2 +'3') //'123';先运算2+'3',然后1+'23'
's' + null //'snull'
's' + undefined // 'sundefined'
's' + true //'strue'
1 + true + undefined + 's' // 1+1+NaN+'s'=2+NaN+'s'=NaN+'s'=NaNs
类型转换——不同数据类型比较
[] == 0;=============================================================true
[] ==false; ==========================================================true
[] == undefined;======================================================false
[] ==null; ===========================================================false
[] == '';=============================================================true
0 ==false; ==========================================================true
0 == undefined;======================================================false
0 ==null; ==========================================================false
0 == '';=============================================================true
false == undefined; ===================================================false
false == null; ========================================================false
false == ''; ==========================================================true
false == 'false'; =======================================================false
undefined == null; =====================================================true
undefined == ''; =======================================================false
undefined == 'undefined';================================================false
null == ''; ============================================================false
两个不同类型数据比较时隐式转换规则
1) 数字和字符串、布尔类型、数组进行比较时,字符串(或布尔类型、或数组)先转换为数字(Number),再进行比较;数组转数字请参看后文。
123 == '123asd';//false
123 == '123';//true
123 ==false; //false
123 ==true; //false
使用 if(num) 和 if(num == true) 结果不一样
。前者使用Boolean()转换Num, 后者使用Number转换true。
var num = 123;
if(num) {
console.log(1); //输出1
}
if(num == true) {
console.log(2); //无输出
}
var str = "qwe";
if(str) {
console.log(1); //输出1
}
if(str == true) {
console.log(2); //无输出
}
- 字符串和布尔类型比较,看完下面的代码我疯了。如果一定要给一个解释,那么一定是进行比较的两个数据同时经过Number()的洗礼后再进行比较。数组和布尔类型的比较也如此。
"qwe" ==false; //false
"qwe" ==true; //false
"" ==false; // true
"" ==true; //false
[] == false; //true
[0] ==false; //true
[00] ==false; // true
[0,0] ==false ; //false
- undefined 除了和null进行非全等比较返回true,其它均返回false。null 除了和 undefined进行非全等比较返回true,其它均返回false。
- 数组(或对象)和字符串进行比较时,数组(或对象)会转换成字符串再进行比较。
[] == "";//true
[0] == "";//false
[0] == "0";//true
var obj = {a: 1};
obj == ""; //false
obj == "[object Object]";//true