众所周知JavaScript中有5种基本数据类型分别是字符串(String)、布尔值(Boolean)、数字(Number)、Null(空)、Undefined(未定义)。
一般我们使用Number、parseInt、parseFloat三种方法可以将String类型转换成number类型。
var a = "HelloWorld";
var b = Number(a);//number
var c = parseInt(a);//number
var d = parseFloat(a);//number
但是神奇的JavaScript还有一些隐藏的类型转换不知道您发现没?
01:if 判断转换
if的判断类型转换是括号内的转换成布尔类型进行判断
if(xxx){
}
平时使用if进行条件判断的时候我们都知道if后面的括号内放的是条件判断语句那么如果我们在里边放入JavaScript的其余数据类型会发生什么呢?JavaScript又是如何处理呢?
// 题目1:如下代码输出什么?
if ("hello") { //hello --> true
console.log("hello")
} //解析:"hello"为非空字符串string类型所以被转换为Boolean的true条件为真
// 题目2:如下代码输出什么?
if ("") { //"" --> false
console.log('empty')
}//解析:""为空字符串 被转换为false 条件为假
// 题目3:如下代码输出什么?
if (" ") {
console.log('blank')
}//解析:" "为空白字符串被转换为Boolean的true 条件为真
// 题目4:如下代码输出什么?
if ([0]) {
console.log('array')
}//解析: [0]为Object 转换为Boolean为true 条件为真
if('0.00'){
console.log('0.00')
}//解析 : '0.00'转换为Boolean为true
Lay-Buddhist01:
if(+0) {
console.log("+0");
}//解析 : 0为number +号运算符后跟一个数字参数的时候返回其正值所以+0为0 转换为Boolean为false
总结:可以看到括号内的表达式都被强制转换为布尔类型,否则后面的console.log("")是不会执行的。
原理:
数据类型 | 结果 |
---|---|
undefined | false |
null | fasle |
boolean | 直接判断 |
string | 空字符串为false,其他为true |
number | +0,-0或者NaN为false,其他为true |
Object | true |
02:== 的判断(基本上是转换成数字判断)
对于==的判断,js是怎么处理的?做几道题看看
题目
"" == 0 //题目1 //空字符串是false
" " == 0 //题目2 //
"" == true //题目3
"" == false //题目4
" " == true //题目5
答案及解释:
"" == 0 // true
//1-因为""是string类型 它和0 (number类型)比较被转换为number类型0,所以0 == 0;
" " == 0 //true
//2-同上
"" == true //false
//3-同上
"" == false //true
//4-同上
" " == true //false
//5-同上
题目
!" " == true //题目6
!" " == false //题目7
"hello" == true //题目8
//false "hello"转换成数字是NaN true转换成数字是1
"hello" == false //题目9
//false
"0" == true //题目10
//false "0"转换成数字是0
"0" == false //题目11
"00" == false //题目12
"0.00" == false //题目13
//true "0.00"转换成数字是0.00 == false
答案及解释:
!" " == true //true
//6-" " 转换成数字0 !0为1 true-->1
!" " == false //false
//7-同上
"hello" == true //
//8-false "hello"转换成数字是NaN true转换成数字是1
"hello" == false //
//9-false
"0" == true //
//10-false "0"转换成数字是0
"0" == false //true
//11-"0"转换为 0 false转换为0 0==0
"00" == false //true
//12-同上
"0.00" == false //题目13
//true "0.00"转换成数字是0.00 == false
题目
undefined == null //题目14
//true
{} == true //题目15
//true 转换成数字是1 {}因为没有ValueOf所以不相等
[] == true //题目16
//false []内默认有toString 转换成数字为0 所以不相等
[] == false // true
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]" //题目17
obj == 1 //题目18
obj == true //题目19
原理:
left == right
left | right | result |
---|---|---|
null | undefined | true |
Number | String | left == toNumber(right) |
Boolean | (any) | toNumber(left) == right |
Object | String or Number | toPrimitive(left) == right |
其他 | 其他 | false |
toNumber 转换成数字
type | result |
---|---|
undefined | NaN |
Null | 0 |
Boolean | true -->1 / false --> 0 |
String | “abc”–>NaN,“133” – > 133 |
toPrimitive
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果
最后总结:
注意:前面if判断的时候只要不是空字符串都转换为布尔类型的true也就是1
是但是在==判断的时候空字符串和空白都被转换为0 即false
1. 空字符串"“是0 false ,空白字符串” "是0
3. 其他字符串是true
4. 对象是true