首页 > 试题广场 >

结果输出是什么?

[问答题]
var a=[0];
if(a){
    console.log(a==true);
}
else{
    console.log("wut");
}
结果输出是什么?
布尔值为false的五种情况:数字0、特殊值的 null、NaN、undefined、字符串"",其他均为true

所以 if(a)等价 if(true)

‘==’隐式类型转换

一、首先看双等号前后有没有NaN,如果存在NaN,一律返回false。

二、再看双等号前后有没有布尔,有布尔就将布尔转换为数字。(false是0,true是1)

三、接着看双等号前后有没有字符串, 有三种情况:

1、对方是对象,对象使用toString()或者valueOf()进行转换;
2、对方是数字,字符串转数字;
3、对方是字符串,直接比较;
4、其他返回false
四、如果是数字,对方是对象,对象取valueOf()或者toString()进行比较, 其他一律返回false

五、null, undefined不会进行类型转换, 但null==undefined




编辑于 2017-08-25 17:13:38 回复(1)
var a=[0];
if(a){                      //该语句等效于 if (Boolean([0])),  Boolean([0])结果为 true; 
    console.log(a==true);   //执行该语句, 其等效于console.log(Number(a)==Number(true))--> 0==1 --> false 
}
else{
    console.log("wut");  //不执行
}
发表于 2017-08-09 19:14:14 回复(1)
==类型不同会进行类型转换,这是对象与非对象之间的类型转换,boolean值true被强制转换为数字1,ToPrimitive([0])="0",进而转换为数字0,则0==1返回false
发表于 2017-07-29 20:37:00 回复(0)
'use strict'vararr = [0]; varbl = true; console.log("arr[0]:"+typeofarr[0]+"    arr:"+typeofarr); console.log("arr:"+arr+"   valueOf:"+arr.valueOf()+"    toString:"+arr.toString());//数组在进行==比较时在valueOf不是数值的时候,调用toString进行转换 console.log("TYPEOF=>arr:"+typeof arr+"   valueOf:"+typeof arr.valueOf()+"    toString:"+typeof arr.toString()); console.log("FALSE=> arr:"+(arr == false)+"   bl:"+ (bl === false)); console.log("TRUE=> arr:"+(arr == true)+"   bl:"+ (bl === true));
 
//运行结果
arr[0]:number    arr:object
arr:0   valueOf:0    toString:0
TYPEOF=>arr:object   valueOf:object    toString:string
FALSE=> arr:true   bl:false
TRUE=> arr:false   bl:true

双等号,涉及的是数据值的比较,并不比较数据类型。所以在等号两边类型不相同时,会出现隐式类型转换。
1.对象类型除了Date类型外,均采用先valueOf再toString进行比较。
2.布尔类型的数据,true转换为1,false转换为0


发表于 2017-09-17 21:51:49 回复(0)
a==true
发表于 2020-05-13 21:24:51 回复(0)
输出结果:false
a是一个对象,任何对象转换为布尔值都是true
于是进入if语句
但是==不会进行类型转换,所以a==true 输出为false
发表于 2019-09-12 10:15:36 回复(0)
false
发表于 2017-10-04 19:52:59 回复(0)
false 因为a的类型是对象
发表于 2017-08-28 22:02:26 回复(0)
false  
发表于 2017-08-28 22:02:21 回复(0)
false
发表于 2017-08-15 12:08:45 回复(0)
false
发表于 2017-08-05 16:07:28 回复(0)
[0]转化为Boolean类型为1
==比较符,有一个操作符是Boolean类型,先将其转换为0或1,再比较。所以为false
发表于 2017-07-29 17:49:00 回复(0)
false
发表于 2017-07-28 17:57:11 回复(0)
false
发表于 2017-07-28 15:35:22 回复(1)