不同的浏览器对 DOM 有不同的实现,注意实现是负责这个属性的,而不是用户。但是,用户可以更改该属性的默认值。
至于 Chrome 54.0.2840.71,它使每个 attribute.specified 都为真,无论它是否在 DOM 规范中,它是否具有价值。例如,__test
指定的属性在 Chrome(版本 54)中始终为 true。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div __test></div>
<script>
var div=document.querySelector("div");
var attributes = div.attributes;
var attr_test=attributes[0];
attr_test.specified=false;// "specified" is not writable and Setting it silently fails.
console.log(attr_test.specified);
</script>
</body>
</html>
所以我同意“它正在被淘汰”。
DOM level3 中的“attribute.specified”与 DOM level2 规范不同。
1.同一点
如果该属性在实例文档中被显式地赋予了一个值,则为真,否则为假。如果应用程序更改了此属性节点的值(即使它最终具有与默认值相同的值),则将其设置为 true。
2.差异
“DOM-Level2”有更复杂的判断条件来判断“attribute.specified”是否为真。
“DOM-Level3”说
该实现可以类似地处理来自其他模式的具有默认值的属性,但应用程序应使用 Document.normalizeDocument() 来保证此信息是最新的。
specified of type boolean, readonly
在
https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-637646024
与https://www.w3.org/TR/DOM-Level-2-Core/中搜索
core.html#ID-862529273