Javascript 为什么是';0';==当';0';==假的
这个问题说明了我的理解!!假=假 那么如果Javascript 为什么是';0';==当';0';==假的,javascript,Javascript,这个问题说明了我的理解!!假=假 那么如果 0 == false // true '0' == false // true 为什么 字符串零('0')是真实值 !!”0'==true !'0' -> !false -> true 那么你真的在做什么 true==true字符串零('0')是真实值 !!”0'==true !'0' -> !false -> true 那么你真的在做什么 true==true看起来您偶然发现了==操作符的重要性 '0' == fal
0 == false // true
'0' == false // true
为什么
字符串零('0')是真实值
!!”0'==true
!'0' -> !false -> true
那么你真的在做什么
true==true
字符串零('0')是真实值
!!”0'==true
!'0' -> !false -> true
那么你真的在做什么
true==true
看起来您偶然发现了==
操作符的重要性
'0' == false; // true
'0' === false; // false
Boolean('0'); // true
typeof('0'); // string
typeof(!'0'); // boolean
!'0' === false; // true
!!'0' === false // false
看起来您偶然发现了
==
操作符的重要性
'0' == false; // true
'0' === false; // false
Boolean('0'); // true
typeof('0'); // string
typeof(!'0'); // boolean
!'0' === false; // true
!!'0' === false // false
第一个否定通过调用抽象函数
ToBoolean
将字符串'0'
转换为布尔值。根据JavaScript
,只有7个值被计算/强制/转换为false,即为false:
null
,未定义
,NaN
,空字符串,+0
,-0
,和false
所以,'0'
被评估为真实的,!'0'
到错误
和将0'
设置为true
PS:在OP在下面的评论中提出原始问题后,提出了另一种情况,说明为什么'0'==false
被评估为true
。尽管与原始帖子无关,但以下是解释:
在规范中,部分内容为:“当计算x==y
时,如果y
的类型为Boolean
,则首先将y
转换为数字
,然后再次进行比较”
因此
Number(false)
的计算结果为0
。在下一次比较运行中,字符串'0'
与数字0
进行比较,即'0'==0
。规范要求将字符串转换为数字,然后再次进行比较:0==0
第一个否定通过调用抽象函数ToBoolean
将字符串'0'
转换为布尔值。根据JavaScript
,只有7个值被计算/强制/转换为false,即为false:
null
,未定义
,NaN
,空字符串,+0
,-0
,和false
所以,'0'
被评估为真实的,!'0'
到错误
和将0'
设置为true
PS:在OP在下面的评论中提出原始问题后,提出了另一种情况,说明为什么'0'==false
被评估为true
。尽管与原始帖子无关,但以下是解释:
在规范中,部分内容为:“当计算x==y
时,如果y
的类型为Boolean
,则首先将y
转换为数字
,然后再次进行比较”
因此
Number(false)
的计算结果为0
。在下一次比较运行中,字符串'0'
与数字0
进行比较,即'0'==0
。规范要求将字符串转换为数字并再次进行比较:0==0
'0'
是非空字符串,因此它是true
@heyza22它不是true
,该语句记录了false
。我的理解可能不正确。当您使用==比较两个不同类型的值时,javascript会将两个操作数转换为同一类型,然后进行严格比较('=='),因此'0'==false应转换为0==0,这是真的。'0'
本身的计算结果为true
'0'==false
也是真的
,因为为了比较它们,=
会将两者强制转换为相同的类型,在本例中为int。因此'0'
变为0
,而false
也变为。不过,这个问题是重复的,已经标记为重复。dupe中的答案解释了这一点。代码>在比较之前应用。这取决于操作顺序2+3==5
变成5==5
,而不是2+false
'0'
是一个非空字符串,所以它是true
@heyza22它不是true
,该语句记录false
。以下是我的理解,可能不正确。当您使用==比较两个不同类型的值时,javascript会将两个操作数转换为同一类型,然后进行严格比较('=='),因此'0'==false应转换为0==0,这是真的。'0'
本身的计算结果为true
'0'==false
也是真的
,因为为了比较它们,=
会将两者强制转换为相同的类型,在本例中为int。因此'0'
变为0
,而false
也变为。不过,这个问题是重复的,已经标记为重复。dupe中的答案解释了这一点。代码>在比较之前应用。这取决于操作顺序2+3==5
变为5==5
,而不是2+false
。我没有否决投票,但控制台中的'0'==false。log('0'==false)给出true。所以它不被视为一个不空的世界string@heyza22当您使用=
时,它试图将两个值都强制为同一类型,因此当它强制0
为布尔值时,它是错误的,因此您将'0'==false
作为true,但为什么相同的逻辑不适用于!!'0'==false,则它给出false@heyza22因为
的优先级高于=
,因此首先计算它,然后再计算=
什么是真的
?我没有否决投票,但控制台中的'0'==false。log('0'==false)给出true。所以它不被视为一个不空的世界string@heyza22当您使用=
时,它会尝试将两个值强制为同一类型,因此当它强制0
为布尔值时,它是错误的,因此您将'0'==false
作为true,但为什么相同的逻辑不适用