分享一下前两天发现的一个有趣的东西。
众所周知,javascript可以通过 var ElementId = document.getElementById("id"); 来精准定位页面元素。这个方法会返回一个表示该元素的对象。
但是!!!
如果我们将 var ElementId = document.getElementById("id"); 这段代码注释掉,是否会报错?
上码!
function rightUName() {
let userName = document.getElementById("userName");
let rule = new RegExp("[a-zA-Z0-9_\u4e00-\u9fa5]{6,18}");
let labr = document.getElementById("labr");
// let labf = document.getElementById("labf");
if (rule.test(userName.value)) {
labr.style.display = "inline-block";
labf.style.display = "none";
labf.
numU = 1;
}
else {
labf.style.display = "inline-block";
labr.style.display = "none";
numU = 0;
}
}
这个方法想实现的功能是获取输入框中的数据,判断是否正确,如果正确则绿勾元素显示,红色叹号元素隐藏,反之红色叹号显示,,绿勾隐藏。
按照以往的逻辑,我们需要先定义变量来接收通过document.getElementById()方法返回的元素对象。但是,在这里我把 labf 变量声明与获取元素对象的代码注释掉了,理论上来说这里应该报错,实际上却没有报错,且能完美运行。
查看 labf 的类型,出乎我的意料,labf 是any。
什么是any类型?在 TypeScript 中,any类型用于表示任意类型,即不希望为其指定明确类型的值。在使用any类型时,编译器会忽略该值的类型检查。这意味着,可以将任何类型赋值给 any类型的变量,或从 any类型的变量中获取任何类型的值,而不会收到编译器的类型检查错误。
既然这个值是any类型,那么为什么还能精准找到我们希望他定位的对象呢?
我将我想要定位的对象的id设的值也是labf。如果我将前面的 labf 改变一下(比如改为labg),这个labf 在运行之后就不能精准定位到 id 为labf 的元素。因此,我猜测,这个labf是通过元素的 id 来精准定位到这个元素的。
当然,这样能定位到准确的元素,也是因为当前页面其他元素的id没有一样的。