Javascript JS类型强制是如何工作的?
我正在学习Javascript JS类型强制是如何工作的?,javascript,equality,coercion,Javascript,Equality,Coercion,我正在学习===与===的对比,并且发现了这一点,这对理解这个概念非常有帮助。然而,我想知道其中一个例子: '0' == false // true 这可能有道理,因为==不会检查类型。但随后我在控制台中尝试了一些可能的强制操作,并发现以下情况: Boolean('0') // true String(false) // "false" 我本以为'0'==false与'0'==String(false)具有相同的真值,但事实似乎并非如此 那么强制到底是如何起作用的呢?是
===
与===
的对比,并且发现了这一点,这对理解这个概念非常有帮助。然而,我想知道其中一个例子:
'0' == false // true
这可能有道理,因为==
不会检查类型。但随后我在控制台中尝试了一些可能的强制操作,并发现以下情况:
Boolean('0') // true
String(false) // "false"
我本以为'0'==false
与'0'==String(false)
具有相同的真值,但事实似乎并非如此
那么强制到底是如何起作用的呢?是否缺少更基本的类型?“0”是一个包含字符0的字符串,它不是数值0
。计算结果为false
的唯一字符串类型值是“
”
“0”
是
定义如何将不同类型转换为布尔类型:
参数类型结果
未定义的错误
空-假
布尔值:结果等于输入参数(无转换)。
Number如果参数为+0,则结果为false,−0,或NaN;否则
结果是真的。
字符串如果参数为空字符串(其长度为
零);否则,结果是正确的。
对象真实
但是,只有在使用==
进行比较时,才严格遵循这一点
使用布尔('0')
时,您正在将值'0'
转换为布尔值(这与使用!!'0'
相同)。将'0'
与false
进行粗略比较时,布尔值将转换为一个数字(如定义的)false
在转换为数字时变为0
。这意味着最终的计算是'0'==0
,这等于true
要总结以上ECMAScript规范链接部分的相关部分,请执行以下操作:
'0'
和y=false
var x = '0', // x = "0"
y = false; // y = false
if (typeof y === "boolean") {
y = +y; // y = 0
}
console.log( x == y ); // "0" == 0
->true
为了让编程界的全新事物更加混乱:
Boolean('false')
true
Boolean('true')
true
我认为使用更简单、更直观由于某种原因,代码>运算符。我不知道我是否理解,但我从未使用过Boolean()
回答这个问题时,我发现线程很有用:String(false)返回false的字符串表示形式,而Boolean('0')将字符串“0”转换为true(因为非空字符串是truthy)回答了您在这里可以找到的所有问题:一开始有点难读,但您会受益匪浅,如果你花点时间通读。一些。对不起,我还是很困惑。如果“0”是真的,那么'0'==false
怎么可能是真的呢?请看下面的答案:谢谢@james donnelly!这个链接正是我想要的,但我并不知道:)@LucyBain我在我的答案中添加了一个小的更新,希望能让一切都清楚。ECMAScript规范的关键部分是,特别是第6点和第7点。@LucyBain一天的工作很慢,因此我还添加了一个JavaScript方法,说明如何应用ECMAScript的定义,即如何使用==
进行比较。这就是我从哪里得到示例的问题,但我无法理解它是如何工作的。现在我将坚持使用=
:)