我在这里读了一些关于boolean属性的东西,它表示对于布尔属性(在这个特定的例子中,loop属性<audio>),无论你设置什么值,它都会被识别为"true".为了真正设置为falsy,你不能像loop=falsejavascript那样设置它['loop']=false,但是必须删除属性,比如做removeAttribute('loop').这是真的?
我首先相信它,但就Chrome检查而言,设置['loop']=false实际上确实会让它被认为是假的.我不确定这个事实在跨浏览时是多么强大.浏览器之间有什么区别吗?
这里解释了布尔属性:
http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2
某些属性扮演布尔变量的角色(例如,OPTION元素的selected属性).它们出现在元素的开始标记中意味着属性的值为"true".他们的缺席意味着"虚假"的价值.
布尔属性可以合法地采用单个值:属性本身的名称(例如,selected ="selected").
因此,虽然某些浏览器可能会将字符串"false"解释为未设置该值,但其他浏览器可能无法决定(这是正确的行为).实际上,据我所知(或者想到),任何非空字符串通常都会将值设置为on/true(不管规范所说的是合法值).我相信这也是未定义的行为,所以这可能会改变或者从浏览器到浏览器不同(不要依赖它).
最重要的是,仅仅因为浏览器或两个浏览器可能偏离规范并不意味着你应该这样做.完全删除属性是要走的路.
附录:仔细观察你的评论和问题,我想你可能会对属性值感到困惑.在HTML中,attr=false并且attr="false"完全相同.任何版本的HTML都不需要引号(除非在值包含空格时需要删除歧义).例如:
<input class=required>
<!-- This is fine -->
<input class=title required>
<!-- this is fine too, but "required" will be parsed as an attribute -->
<input class="title required">
<!-- To have two classes, we need the quotes -->
Run Code Online (Sandbox Code Playgroud)
所有属性值(在具有它们的元素上)都被视为字符串.换句话说,在HTML中没有像javascript 那样的真正的布尔值(或NULL值).