我想将span
节点的visited
属性设置为true
或false
,具体取决于是否已访问过。{/ p>
test();
function test () {
var el = document.createElement("span");
el.setAttribute("visited", false);
el.setAttribute("visited", true);
alert(el.getAttribute("visited") === true); //False
alert(el.getAttribute("visited") === "true"); //True
}
我最初将属性“visited”设置为boolean false ,然后将布尔值设置为 true 。我注意到,当我检查属性是否为true
时,它返回false,但如果我检查了字符串true
,则返回true。
MSN Docs只讨论attributeName需要是字符串,而不是值。那么为什么不比较bool工作?
答案 0 :(得分:4)
这是因为getAttribute
返回类型是字符串而不是bool
返回值:一个字符串,表示指定属性的值。
注意:如果该属性不存在,则返回值为null或 空字符串("")
答案 1 :(得分:0)
===
运算符检查值和类型(没有类型的隐式强制)。
由于getAttribute
返回一个字符串值,因此与字符串" true"相比,比较仅为true
。而不是与true
的布尔值进行比较时。
换句话说,当使用===
运算符...
true === 'true' // false
'true' === 'true' // true
true === true // true
答案 2 :(得分:-1)
以下是HTML标准定义的属性定义:
除非另有说明,HTML elements上的属性可能有 任何字符串值,包括空字符串。除非明确说明 声明,对于可以指定的文本没有限制 属性。
因此,要重复已经说明的内容,HTML属性始终是字符串。