一行上的JavaScript赋值和条件

一行上的JavaScript赋值和条件,javascript,Javascript,我正在关注HTML5游戏书中的一些代码,不明白这行代码是如何工作的- mp3Support = "" != audio.canPlayType('audio/mpeg'); 我发现它的意思和- if(audio.canPlayType('audio/mpeg') != "") { mp3Support = audio.canPlayType('audio/mpeg'); } 但我似乎不知道这是怎么回事。如何将mp3Support变量分配给空字符串,然后测试它是否不等于同一行中的某个

我正在关注HTML5游戏书中的一些代码,不明白这行代码是如何工作的-

mp3Support = "" != audio.canPlayType('audio/mpeg');
我发现它的意思和-

if(audio.canPlayType('audio/mpeg') !=  "") {
    mp3Support = audio.canPlayType('audio/mpeg');
}

但我似乎不知道这是怎么回事。如何将
mp3Support
变量分配给空字符串,然后测试它是否不等于同一行中的某个值?我以前从未遇到过这种情况,这让我感到困惑。

mp3Support
最终要么是真的,要么是假的,就像
x!=y
返回true或false

效果相同,但比文字短

if(audio.canPlayType('audio/mpeg') !=  "") mp3Support = true;
else mp3Support = false;
mp3Support=”“!=canPlayType('audio/mpeg')

可以写成

mp3Support=(“”!=audio.canPlayType('audio/mpeg')


最后一部分返回true或false。

代码=运算符不是赋值运算符,它是一个。因此,在
=
的右侧(总是在
=
操作符赋值之前执行),代码将
audio.canPlayType('audio/mpeg')
的返回值与空字符串进行比较。如果返回值是空字符串(或任何其他假值,但您应该阅读上面的比较运算符链接以了解详细信息),则
=
语句右侧的计算结果为
false
。否则,右侧将计算为
true
。然后将该比较产生的布尔值指定给
mp3Support

,如果使用
mp3Support=(“”!=audio.canPlayType('audio/mpeg'),它可能有助于您进行读取顺便说一句,你的两个例子不一样。第一个设置
mp3Support
为真/假,而第二个设置
mp3Support
为“可能”或“可能”。我会使用
var mp3Support=!!音频播放类型(“音频/mpeg”)
,它根据
audio.canPlayType(“audio/mpeg”)
不是空字符串,将
mp3Support
设置为真/假。感谢所有的答案,我现在明白了,并看到了两个代码块之间的差异,干杯。如果你指的是我删除的评论,我错读了OP。对我来说,首先,我不会使用该代码-我认为您需要
audio.canPlayType('audio/mpeg')
的结果,而不仅仅是如果它不等于
”。不管怎样,我的bad@Bergi我认为代码应该使用后一个操作数。但这不取决于我或OP。我只是过多地研究了它的含义,而不是代码的实际内容。此外,我也不知道为什么,但我希望
canPlayType
返回真/假(即使OP与
”),但它返回“可能”或“可能”(意思是“是”),或“”(意思是“否”)。因此OP中的代码修复了我最初担心的问题:)