if判断和==也有数据类型转换的功能!

本文揭示了JavaScript中if判断和==运算符背后的隐式数据类型转换。if判断会将括号内的表达式转换为布尔类型,而==则会尝试将左右两边的值转换为数字进行比较。在==的判断中,空字符串和空白字符串被视为0,即false,其他字符串、非空对象则被视为true。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知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("")是不会执行的。

原理:

数据类型结果
undefinedfalse
nullfasle
boolean直接判断
string空字符串为false,其他为true
number+0,-0或者NaN为false,其他为true
Objecttrue

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

leftrightresult
nullundefinedtrue
NumberStringleft == toNumber(right)
Boolean(any)toNumber(left) == right
ObjectString or NumbertoPrimitive(left) == right
其他其他false

toNumber 转换成数字

typeresult
undefinedNaN
Null0
Booleantrue -->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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值