javascript - 替换 document.getElementById("demoID").style.color = "blue"; 是否安全 使用 demoID.style.color = "blue";
问题描述
考虑这里的 JavaScript 代码(在浏览器 JavaScript 中):
var x = document.getElementById("demoID");
x.style.color = "blue";
- 用这个工作代码替换它是否安全:
demoID.style.color = "blue";
HTML5:
<!DOCTYPE html>
<html>
<body>
<p id="demoID">Click the button to change the color of this paragraph.</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction() {
// var x = document.getElementById("demoID");
// x.style.color = "blue";
demoID.style.color = "blue";
}
</script>
</body>
</html>
- 与 相比,性能(速度)如何
document.getElementById
?
编辑:
我做了一个微基准测试,速度提高了document.getElementById
3.7 倍:
HTML:
<input type="checkbox" id="checkboxSigned" onchange="numberBase10changed()">Signed
<div id="div2"></div>
JavaScript:
let signed=false;
let t0 = performance.now();
for (let i=0; i<1000000; i++){
// signed = document.getElementById("checkboxSigned").checked; // 88ms to 116ms
signed = checkboxSigned.checked; // 369ms to 398ms
g++;
}
div2.innerText = g+"interval = " + Math.trunc( performance.now()-t0 ) + "ms";
结果为signed = document.getElementById("checkboxSigned").checked;
88ms to 116ms
结果为signed = checkboxSigned.checked;
369ms to 398ms
在此先感谢您的帮助。
解决方案
安全的?.. 是的。可读吗?.. 不。
首先,这是可行的,因为所有id
的 ' 都添加到了 window 对象中。所以JS
将继续向上遍历父级的范围,直到它碰到窗口。
虽然我认为这会影响可读性。目前尚不清楚在哪里demo
引用或初始化。因为您将寻找一个variable
您永远找不到的声明。
从 HTML 规范:
窗口[名称]
返回指定的元素或元素集合。
作为一般规则,依赖于此会导致代码脆弱。例如,随着新功能被添加到 Web 平台,哪些 ID 最终映射到此 API 可能会有所不同。取而代之的是,使用 document.getElementById() 或 document.querySelector()。
推荐阅读
- .htaccess - .htaccess /controller/action 模式调用两次 public/index.php
- python - 在控制台上使用 selenium python 运行测试时出错
- javascript - 需要使用 AJAX 动态更新 PHP 关联数组中的值而不更新其他值
- node.js - Nodejs SendGrid CORS 请求被阻止
- ruby - 每个循环中的索引为零(Ruby)
- xpath - 如何在不引入导航的情况下使用 XPath 提取列表项?
- resource-scheduling - 如何解决基于不同约束条件的人工调度问题?
- azure - Office365 是在 Microsoft 还是 Azure 上运行?
- c# - 在 RpcException 中查看 .NET CLR 错误详细信息
- python - 用于打开记事本并使用 pyautogui lib 编写的 Python 脚本