这个JavaScript表达式的结构是什么?为什么它的求值为'true'?(HTML5音频标签和canP
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
我使用Chrome,它支持mp3文件,所以第三行返回'probably'。然而,第五行返回'true'。在第四行中发生了什么,将"probably"的值转换为"true"?这个结构后面的表达式有名字吗?
!=
使用抽象相等比较算法对表达式进行比较,如果不同则返回true
,如果相等则返回false
。
11.9.2 Does-not-equals操作符(! =)
生成的EqualityExpression: EqualityExpression
!=
RelationalExpression按如下方式求值:
- 设lref为EqualityExpression的求值结果。
- 让 lval 是GetValue ( lref )。
- 让rref为RelationalExpression求值的结果。
- 让 rval 是GetValue ( rref )。
- 设r为执行抽象相等比较的结果rval == lval。(见11.9.3)。
- 如果r 真正,返回假。否则,返回true
在您的示例中,空字符串""
与字符串"probably"
不同。所以运算符返回true
您可能会感到困惑,因为您同时看到了赋值操作符=
和比较操作符!=
(不等于)。这是不一样的。实际上它在说:
if (audio.canPlayType('audio/mpeg') == "")
mp3Support = false;
else
mp3Support = true;
可简化为:
mp3Support = !(audio.canPlayType('audio/mpeg') == "")
再次还原为你看到的:
mp3Support = "" != audio.canPlayType('audio/mpeg');
相关文章:
- 如何播放部分音频文件
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- 音频控件在mouseover上显示,在mouseout上淡出
- HTML5音频加载和播放获胜'我不能在iPad上工作
- AngularJS-使用'true'属性
- 是否可以在浏览器中使用纯JavaScript保存音频流
- JavaScript-切换“;全部检查”;复选框true/false
- angular不会更改json的音频源
- location.reload(true)崩溃浏览器选项卡
- 指令的模板必须只有一个根元素:With restrict E&替换true
- 通过幻灯片更改事件停止使用jquery的音频
- JavaScript:只有当数组中的所有项都为true时才执行函数
- 音频和动画在javasctipt循环中同步
- 对于loop.if-仅在经过所有间隔后返回true
- if(foo!==null)的计算结果为true,即使foo为null
- ngIf的计算结果始终为true
- 使用jQuery控制来自图像的音频
- 调整<音频>元素
- 如果函数返回True,则显示Javascript按钮
- 这个JavaScript表达式的结构是什么?为什么它的求值为'true'?(HTML5音频标签和canP