3

我想将span节点的visited属性设置为truefalse基于它是否已被访问。

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

}

我最初将属性“已访问”设置为 boolean false,然后将 boolean 设置为true。我注意到,当我检查属性是否为 时true,它返回 false,但如果我检查字符串true,它返回 true。

MSN Docs只讨论 attributeName 需要是字符串,而不是值。那么为什么不与布尔值进行比较呢?

小提琴

4

3 回答 3

6

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

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

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

于 2015-03-04T20:09:30.750 回答
0

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

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

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

true === 'true' // false
'true' === 'true' // true
true === true // true
于 2015-03-04T20:09:44.837 回答
-1

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

3.2.3.1 属性

除非另有说明,否则HTML 元素上的属性可以具有任何字符串值,包括空字符串。除非明确说明,对这些属性中可以指定的文本没有任何限制。

所以,重复一下已经说过的话,HTML 属性总是字符串。

于 2015-03-04T20:15:56.967 回答