Javascript错误:设置音频对象控件属性True = = False

我对此并不熟悉,也不知道如何报告错误,但我首先要确认它是一个错误,然后从那里继续。 但是,这就是我发现的:

1)创建音频对象控件属性时,controls属性将响应字符串,就像它是布尔值一样。 例如:

<button onclick="example()">Try this</button>
<script>

function example() {
    var aud = document.createElement("AUDIO");
        aud.setAttribute("src","example.mp3");
    aud.setAttribute("controls", "controls");
}

好的,我们已经把控制放在那里,因为它使得控制同等控制:事情是,你可以把任何旧的字符串放在那里,它可以很好地工作 - 苹果,香蕉,梨,任何东西。

2)这个值是不是布尔值? 那么当你尝试一个布尔值时,例如false,你仍然是真的。 (False == True)它的工作原理就像输入了true一样。

...如果你输入了除真或假以外的其他东西(只需输入除整数,字符串或真或假之外的任何值),就会出现错误(或者它不起作用)。 一切等于true,非字符串,非整数等于false(或者不起作用)。

最后,您甚至可以尝试在访问的音频元素上设置控件属性:

var aud = document.getElementById("idhere");
function accessAudioElement() { 
    aud.controls = false;
} 

至少在这里,true和false实际上工作为true和false,但是再一次,任何字符串或整数也会让你成为true,任何非字符串/非整数都会破坏代码。

有人可以帮助我,因为我不认为这是想以这种方式工作......如果这样做,当大多数其他工作都会起作用时,使用布尔值有什么意义?

当然,我仍然在学习,所以也许这不是一个错误,也许由于某种原因,这是假设以这种方式工作,但如果是这样的话,有人请与我分享这背后的逻辑。

我只是不理解。 谢谢魔术师


您可能想要阅读/搜索有关Javascript Truthy $ Falsey的更多信息。 这是非常重要的。

https://j11y.io/javascript/truthy-falsey/

在这里输入图像描述


这是@nnnnnn在评论中提出的延伸答案。

aud.controls = false; 不设置属性,它设置属性。

您需要使用setAttribute()方法将指定的属性添加到元素。

aud.setAttribute("controls", "controls");

并使用removeAttribute()方法从元素中删除指定的属性。

aud.removeAttribute("controls");

有关这些方法的更多信息,请查看附加的超链接。

  • Element.setAttribute()
  • Element.removeAttribute()
  • 何时在JavaScript中使用setAttribute vs .attribute =?
  • HTML - 属性与属性
  • 链接地址: http://www.djcxy.com/p/13025.html

    上一篇: Javascript Bug: set audio object controls attribute True = = False

    下一篇: Get the element availability status in boolean using protractor