繁体   English   中英

此JavaScript表达式的结构是什么,为什么将其评估为“真”? (HTML5音频标签和canPlayType()函数)

[英]What is the structure of this JavaScript expression and why does it evaluate to 'true'? (HTML5 audio tag and canPlayType() function)

我正在阅读一本JavaScript / HTML5书,遇到了一个我不理解的表达式。 该代码使用JavaScript的.canPlayType()函数来检查浏览器是否支持给定的HTML5音频格式(在这种情况下,它正在检查是否支持mp3)。 我感到困惑的特定表达式在第四行:

var audio = document.createElement('audio');
var mp3Support;
console.log(audio.canPlayType('audio/mpeg')); // returns probably
mp3Support = "" != audio.canPlayType('audio/mpeg');
console.log(mp3Support); // returns true

我正在使用支持mp3文件的Chrome,因此第三行返回“可能”。 但是,第五行返回“ true”。 在第四行中,将“可能”的值转换为“真”的情况是什么? 遵循此结构的表达式是否有名称?

!=使用抽象相等比较算法比较表达式,如果它们不同则返回true如果相等则返回false

11.9.2不等于运算符(!=)

生产EqualityExpression: EqualityExpression != RelationalExpression的评估如下:

  • lref为评估EqualityExpression的结果。
  • lvalGetValuelref )。
  • rref为评估RelationalExpression的结果。
  • rvalGetValuerref )。
  • r为执行抽象相等比较rval == lval的结果 请参见11.9.3 )。
  • 如果rtrue ,则返回false 否则,返回true

在您的情况下,空字符串""与字符串"probably" 因此,运算符返回true

您可能会感到困惑,因为您同时看到赋值运算符=和比较运算符!= (不等于)。 这些不一样。 本质上说:

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

可以简化为:

mp3Support = !(audio.canPlayType('audio/mpeg') == "")

并再次减少到您看到的内容:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM