首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个JavaScript表达式的结构是什么?为什么它要计算为“真”?(HTML5音频标记和canPlayType()函数)

这个JavaScript表达式的结构是什么?为什么它要计算为“真”?(HTML5音频标记和canPlayType()函数)
EN

Stack Overflow用户
提问于 2015-05-26 23:12:18
回答 2查看 64关注 0票数 1

我正在阅读一本JavaScript/HTML5 5书,并遇到了一个我不明白的表达式。代码使用JavaScript的.canPlayType()函数来检查浏览器是否支持给定的HTML5音频格式(在本例中是检查mp3支持)。我感到困惑的具体表达是在第四行:

代码语言:javascript
复制
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

我使用的是Chrome,它支持mp3文件,所以第三行返回“可能”。然而,第五行返回“true”。将“可能”的值转换为“真”的第四行发生了什么?是否有符合此结构的表达式的名称?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-26 23:23:11

您可能会感到困惑,因为您看到赋值运算符=和比较运算符!= (不等于)。这些是不一样的。它的主要意思是:

代码语言:javascript
复制
if (audio.canPlayType('audio/mpeg') == "") 
    mp3Support = false;
else 
    mp3Support = true;

可简化为:

代码语言:javascript
复制
mp3Support = !(audio.canPlayType('audio/mpeg') == "")

再一次沦为你所看到的:

代码语言:javascript
复制
mp3Support = "" != audio.canPlayType('audio/mpeg');
票数 1
EN

Stack Overflow用户

发布于 2015-05-26 23:19:44

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

11.9.2不等于运算符( != ) 产品EqualityExpression : EqualityExpression != RelationalExpression的评估如下:

  • 让lref成为评估EqualityExpression的结果。
  • GetValue(参考文献)。
  • 让rref成为评估RelationalExpression的结果。
  • 让rval是GetValue(rref)。
  • 让r是执行抽象相等比较rval == lval的结果。(见11.9.3)。
  • 如果r是true,则返回false。否则,返回true

在您的示例中,空字符串""与字符串"probably"不同。所以操作符返回true

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30470535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档