if里的逻辑判断为什么和 == 判断不一样?比如我这个例子

 var a = ""; // false
        var b = " "; // false
        var c = []; // false
        var d = [0]; // false
        var e = [1]; // true
        var f = {}; // false
        var g = {a:0}; // false
        var h = {b:1}; // false
        var j; // false
        var k = null; // false
        if (a) {console.log('a')}
        if (b) {console.log('b')} // 成功打印
        if (c) {console.log('c')} // 成功打印
        if (d) {console.log('d')} // 成功打印
        if (e) {console.log('e')} // 成功打印
        if (f) {console.log('f')} // 成功打印
        if (g) {console.log('g')} // 成功打印
        if (h) {console.log('h')} // 成功打印
        if (j) {console.log('j')}
        if (k) {console.log('k')}

当括号里面的值为0 空字符 false null undefined 的时候就相当于false 则不执行语句 除此之外的值就执行语句

没有不一样吧,都是括号内的内容为真的时候打印啊

 <script>
var b1=new Boolean("");
var b2=new Boolean(" ");
var b3=new Boolean([]);
var b4=new Boolean([0]);
var b5=new Boolean([1]);
var b6=new Boolean({});
var b7=new Boolean({a:0});
var b8=new Boolean({a:1});
var b9=new Boolean();
var b10=new Boolean(null);
document.write("b1:"+ b1 +"<br>");
document.write("b2:"+ b2 +"<br>");
document.write("b3:"+ b3 + "<br>");
document.write("b4:"+ b4+ "<br>");
document.write("b5:"+ b5 +"<br>");
document.write("b6:"+ b6 +"<br>");
document.write("b7:"+ b7 +"<br>");
document.write("b8:"+ b8 +"<br>");
document.write("b9:"+ b9 +"<br>");
document.write("b10:"+ b10 +"<br>");
</script>

结果:
b1:false
b2:true
b3:true
b4:true
b5:true
b6:true
b7:true
b8:true
b9:false
b10:false

你的那些注释是错的。。

在js中的if语句判断条件不仅可以写布尔表达式,还可以写任何的数据。括号中的判断的条件会发生自动类型转换
如: number:如果非0为true,0为false (不管是0,还是0.0都是假)
string:如果非null或非空为true,否则为false (对于字符串类型,只要有字符,即使是空格字符if判断也为真)
undefined:false
NaN: false
另外 已定义的函数 1.不带括号的,如果定义了就是真,没有定义会报错 2.带括号的,其实相当于调用函数,根据函数的返回值判断真假
function testfunction(){}
if(testfunction) //真
{
alert("true testfunction;");
}
else
{
alert("false testfunction;");
}
function testfunction(){}
if(testfunction())
{
alert("true testfunction;");
}
else
{
alert("false testfunction;");
}
假,因为函数没有定义返回值(返回值是undefined);
已定义的对象,未赋值时在if中则为假,赋值后是真。
.......还有很多 包括对象属性作为判断条件等等,总之,js中可以在if中作为判断的类型很多,但最终都可以看做这些类型的变形来进行判断,如上面的函数没有定义返回值情况下的返回值就是是undefined,所以带括号的函数作为if语句判断条件时为假。

js的弱类型让人感觉很多东西都比较迷惑,例如变量在if条件中到底是true还是false,如果在强类型语言中将一个非boolean类型的变量放在if条件中时,是需要进行类型转换的,但是js不需要,下面来进行测试,测试常见的变量类型在if条件中的表现

!function test1(){

var a,b=-1,c= 1,d= 0,e=null,f=undefined,g='',h="";
if(!a){
console.log('a='+a)
}
if(!b){
console.log("b="+b)
}
if(!c){
console.log("c="+c)
}
if(!d){
console.log("d="+d)
}
if(!e){
console.log("e="+e)
}
if(!f){
console.log("f="+f)
}
if(!g){
console.log("g="+g)
}
if(!h){
console.log("h="+h)
}

}()

设定了各种变量类型,分别放入if条件中

执行结果
a=undefined
d=0
e=null
f=undefined
g=
h=
i=false

js中的if()判断成立与否的条件是不是只有true跟false

if(){
语句
}
当括号里面的值为0 空字符 false null undefined 的时候就相当于false 则不执行语句 除此之外的值就执行语句

javascript中 if(变量)与if(变量=true)的不同

var a;//定义一个变量没有初始化if(a){alert(1)
return};//这里不会执行,因为a没有值,所以为false;a=0//这里给a赋值为0if(a){alert(1)
return};//在来执行这句话,因为a=0;0代表false,所以还是不执行;a=1或者a=“123”;if(a){alert(1)
return};//这里a=除0以为的数,或者字符或者obj都表示为真,这里的alert就会执行! 在来看第二种情况;
var
b;if(b=="")和if(b==null)这里谁会执行呢,当然是后面一种,因为b是没有定义值的,如果是var
b="",这样的话就会执行第一种;b =
1;if(b==1)和if(b=="1")这里哪一种会执行呢,答案是两种都会执行!因为js的==表示的是数值相等;谢谢,希望楼主可以理解!
还有就是楼主的这种情况:
var
c;c=0;if(c==false)会不会执行呢,答案是肯定的;c=1;if(c==true)也一样会执行!但是我们看下面这样会执行么?c=2或
者c="admin"if(c==true)alert(1)这句话会执行么,答案是否定的,因为默认表示的是,0为false而1为true,对于其他
的就没有这么定义,所以这里不会执行,当然如果你是这样if(c)那这里就会执行了!

如果操作数是一个对象,返回true
如果操作数是一个空字符串,返回false
如果操作数是一个非空字符串,返回true
如果操作数是数值0,返回false
如果操作数是任意非0数值(包括Infinity),返回true
如果操作数是null,返回false
如果操作数是NaN,返回false
如果操作数是undefined,返回false

是不一样,js就这样,记住就行
if判断的时候 0 ,"",null,undefied 判断是false
== 判断的时候会多些 " " ,[],[0],{} 也会判断为false

javascript判断中为假false的值