gog*_*net 0 javascript evaluation
你好JS家伙的瘾君子.有人可以向我解释以下评估变量真实性的方法之间的区别吗?
var q1Var1 = "hello",
q1Var2 = 0,
q1Var3 = true,
q1Var4 = "false",
q1Var5 = -1,
q1Var6 = undefined,
q1Var7 = null,
q1Var8;
// What is the difference between this block of code:
console.log( !q1Var1 );
console.log( !q1Var2 );
console.log( !q1Var3 );
console.log( !q1Var4 );
console.log( !q1Var5 );
console.log( !q1Var6 );
console.log( !q1Var7 );
console.log( !q1Var8 );
// and this block?
if( q1Var1 === true ){ console.log( "true" ) } else { console.log( "false" ) };
if( q1Var2 === true ){ console.log( "true" ) } else { console.log( "false" ) };
if( q1Var3 === true ){ console.log( "true" ) } else { console.log( "false" ) };
if( q1Var4 === true ){ console.log( "true" ) } else { console.log( "false" ) };
if( q1Var5 === true ){ console.log( "true" ) } else { console.log( "false" ) };
if( q1Var6 === true ){ console.log( "true" ) } else { console.log( "false" ) };
if( q1Var7 === true ){ console.log( "true" ) } else { console.log( "false" ) };
if( q1Var8 === true ){ console.log( "true" ) } else { console.log( "false" ) };
Run Code Online (Sandbox Code Playgroud)
我期望找到第二个块只是第一个块的反转(换句话说,值只会切换),但是,看起来只有设置为非串"true"的变量实际上返回true.为什么是这样?两个评估之间的根本区别是什么:
!q1Var1
vs.
true === q1Var1
Run Code Online (Sandbox Code Playgroud)
这说明了JavaScript 中"虚假"值的概念.例如,undefined变得与false布尔上下文(例如if条件)中的相同.但是,undefined === false是不是真的.以下是所有"假的"值:
falseundefinednullNaN该===运营商表示"严格相等"(见这里,例如); 它抑制了自动类型转换.
==运营商的类型转换规则(来自上面的第二个链接)是:
如果两个操作数的类型不同,则JavaScript转换操作数,然后应用严格比较.如果操作数是数字或布尔值,操作数将尽可能转换为数字; 否则,如果任一操作数是字符串,则另一个操作数将转换为字符串(如果可能).如果两个操作数都是对象,则JavaScript比较内部引用,当操作数引用内存中的同一对象时,这些内部引用相等.
严格的比较规则是:
特别要注意的是,!var它不一样var == false(并且当然不一样,var === false因为var它不是一个开头的布尔值).非空字符串是"truthy"(!"..."总是false用于任何非空的"..."),但非空字符串在转换为数字(例如"0")时计算为0 == false.
| 归档时间: |
|
| 查看次数: |
4330 次 |
| 最近记录: |