以下一行显然是用点表示法编写的。我正在尝试清理我的JavaScript代码以使其严格。这是什么意思?
if (ie||ns6)
{
var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : "";
}
我在我的代码行中添加了一些上下文,以防这有用吗? 我对DOM一无所知。我不是要支持Internet Explorer 4,这不是我的代码,我自己也无法编写JavaScript。我只是试图让它符合规范,JSLint工具说明了这一行:
第17行的问题43:['dhtmltooltip']最好用点符号写成。
答案 0 :(得分:92)
有two ways to access properties of an object in JavaScript。
点符号
foo.bar.baz
方括号表示法
foo['bar']['baz']
您在代码的一部分中使用后者。
编写JSLint(一种提供该错误消息的工具)的道格拉斯·克罗克福德(Douglas Crockford)认为,尽可能使用点符号更好。答案 1 :(得分:16)
JSLint想要这个:
var tipobj= document.all ? document.all.dhtmltooltip
: document.getElementById
? document.getElementById("dhtmltooltip")
: "";
但现在假设document.getElementById
存在是完全安全的,它是在2000年DOM Level Core 2引入的。
document.all
已经死了,除非你试图支持像IE4这样的老浏览器(12岁!):
var tipobj = document.getElementById("dhtmltooltip");
以上两个代码段是支持非常old browser版本的复杂性成本的一个很好的示例:
答案 2 :(得分:1)
以下似乎更加用户友好。
var tipobj;
if (document.all)
tipobj = document.all["dhtmltooltip"];
else if (document.getElementById)
tipobj = document.getElementById("dhtmltooltip");
else
tipobj = "";
答案 3 :(得分:0)
正在使用功能检查来检索标识为dhtmltooltip
的元素,如果没有执行检索的功能,则返回空String
。
更新:正如其他人所指出的那样,getElementById
的检查应该是第一个,并且可能会被省略,因为任何可以直接称为“现代”的浏览器都有已经很久了。
UPDATE 2 :使用新的上下文,JSLint抱怨它不是document.all.dhtmltooltip
。你应该只重写整个事情:
var tipobj = document.getElementById("dhtmltooltip");
并完成它。
答案 4 :(得分:0)
Google快速搜索说document.all
仅用于支持IE4。它是一个允许浏览器访问DOM的不同部分的数组(请参阅here。)
您首先发布的代码会检查document.all是否存在。如果没有,则会将tipobj
设置为""
。现在,除此之外,除非你真的想要IE4支持,否则不值得破译你发布的行。由于很少有人仍然使用IE4,而且这段代码不符合任何现代标准,我只想放弃该行并将tipobj
设置为""
。
答案 5 :(得分:0)
看起来唯一真正的问题是格式化/语法。这应该完全相同,并符合JavaScript的最佳实践。主要区别在于使用javascript点表示法而不是括号表示法。
if (ie || ns6) {
var tipobj = document.all ? document.all.dhtmltooltip : document.getElementById ? document.getElementById("dhtmltooltip") : "";
}
答案 6 :(得分:0)
为什么不直接使用:
var tipobj = dhtmltooltip.id
不确定为什么需要长版本,除非点符号在所有浏览器中都不起作用?
答案 7 :(得分:0)
如果点符号有问题,您可以随时设置/ * jslint sub:true * /选项来覆盖它。
答案 8 :(得分:0)
Quentin both ways are valid回答说。
我更喜欢使用elem.bar
代替elem['bar']
的原因之一是它可以节省3个字符。当然这不是一个很大的进步,但是每次任务免费获得3分也不错。