ブラウザーごとに DOM の実装が異なります。ユーザーではなく実装がこの属性を担当していることに注意してください。ただし、ユーザーは属性のデフォルト値を変更できます。
Chrome 54.0.2840.71 に関しては、すべての attribute.specified を true にします。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>
だから私は「衰退に向かっている」ことに同意します。
"attribute.specified" は、DOM level3 と DOM level2 の仕様で異なります。
1.同点
この属性がインスタンス ドキュメントで明示的に値を与えられた場合は true、それ以外の場合は false。アプリケーションがこの属性ノードの値を変更した場合 (最終的にデフォルト値と同じ値になったとしても)、true に設定されます。
2.相違点
「DOM-Level2」では「attribute.specified」が真か否かの判定条件がより複雑になります。
「DOM-Level3」と言う
実装では、他のスキーマのデフォルト値を持つ属性を同様に処理できますが、アプリケーションは Document.normalizeDocument() を使用して、この情報が最新であることを保証する必要があります。
https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-637646024
対https://www.w3.org/TR/DOM-Level-2-Core/specified of type boolean, readonly
で検索core.html#ID-862529273