set / getAttribute比较只适用于字符串?

时间:2015-03-04 20:03:55

标签: javascript html boolean setattribute getattribute

我想将span节点的visited属性设置为truefalse,具体取决于是否已访问过。{/ 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工作?

FIDDLE

3 个答案:

答案 0 :(得分:4)

这是因为getAttribute返回类型是字符串而不是bool

返回值:一个字符串,表示指定属性的值

  

注意:如果该属性不存在,则返回值为null或   空字符串("")

答案 1 :(得分:0)

===运算符检查值和类型(没有类型的隐式强制)。

由于getAttribute返回一个字符串值,因此与字符串" true"相比,比较仅为true。而不是与true的布尔值进行比较时。

换句话说,当使用===运算符...

true === 'true' // false
'true' === 'true' // true
true === true // true

答案 2 :(得分:-1)

以下是HTML标准定义的属性定义:

  

3.2.3.1 Attributes

     

除非另有说明,HTML elements上的属性可能有   任何字符串值,包括空字符串。除非明确说明   声明,对于可以指定的文本没有限制   属性。

因此,要重复已经说明的内容,HTML属性始终是字符串。