以下显示"0"在Javascript 中为false:
>>> "0" == false
true
>>> false == "0"
true
Run Code Online (Sandbox Code Playgroud)
那么为什么以下打印"ha"?
>>> if ("0") console.log("ha")
ha
Run Code Online (Sandbox Code Playgroud) 我以为我知道==JavaScript中的怪癖以及所有奇怪的类型转换,但是今天我偶然发现了一件对我没有任何意义的事情:
'\t' == false
// => true
Run Code Online (Sandbox Code Playgroud)
这是为什么?
显然,'\t'它不是一个虚假的值,如果将其与预期值结合使用,||则:
'\t' || 42
// => '\t'
Run Code Online (Sandbox Code Playgroud)
另一方面,toString也未调用a false,请参见:
'\t' == 'false'
// => false
Run Code Online (Sandbox Code Playgroud)
这使我想到选项卡可能会转换为布尔值,但是:
Boolean('\t') == false
// => false
Run Code Online (Sandbox Code Playgroud)
所以,问题是:为什么呢?
给出以下代码:
if ("string") {
console.log('true!');
}
//logs "true" to the console
if ("string"==true) {
console.log('true!');
}
//doesn't log anything
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我以为"string"是被转换成一个数字,就像布尔一样.因此true变得1和"string"变NaN.第二个if语句有意义,但我不明白为什么第一个语句会导致内部循环被评估.这里发生了什么?
我是JavaScript的新手,我正试图从互联网资源中学习它.虽然我知道,有很多将CR*P物质,有一点大多数人似乎都同意是事物在JS的感实性(只是为了给一个例子去这里)
现在我在实验中发现了这个奇怪的东西:
(true == 2)是false.为什么?
据我所知,2是一个非零数字,所以它应该被评估为true.
将任何值转换为Booleanreturn false或true.例如:
> Boolean (false)
false
> Boolean (null)
false
> Boolean (undefined)
false
> Boolean ("")
false
Run Code Online (Sandbox Code Playgroud)
但是0很特别,因为它是一个数字.我认为是一个有效的假值:
> Boolean (0)
false
Run Code Online (Sandbox Code Playgroud)
还有其他有效的错误值吗?
我最近if( ... == true)在JavaScript中使用时发现了一些奇怪的东西.该==运营商应该尝试转换给定的数据类型是相同的.但有些情况似乎没有像我们预期的那样做:
if ( 42 == true ) // false ( Only 1 is true )
if ( "Hello World" == true ) // false ( false for any string )
Run Code Online (Sandbox Code Playgroud)
虽然如果我将它们自己转换!!成两者42并且"someString"结果是true:
if ( !!42 === true ) // Shows that 42 cast to a boolean is true.
if ( !!"Hello World" === true ) // Same for strings
Run Code Online (Sandbox Code Playgroud)
请注意,如果我切换它if( true == ... ),结果是相同的.我想知道这里到底发生了什么,为什么 …