JavaScript点表示法
下面这行显然是用点表示法写得最好的。我正试图清理我的JavaScript代码,使其严格。这是什么意思JavaScript点表示法,javascript,syntax,Javascript,Syntax,下面这行显然是用点表示法写得最好的。我正试图清理我的JavaScript代码,使其严格。这是什么意思 if (ie||ns6) { var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : ""; } 我在代码行中添加了一些上下文,以防这有所帮助? 我对这件事一无所知。我不想支持InternetExp
if (ie||ns6)
{
var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : "";
}
我在代码行中添加了一些上下文,以防这有所帮助?
我对这件事一无所知。我不想支持InternetExplorer4,这不是我的代码,我自己也无法编写JavaScript。我只是想让它兼容,工具上说的是这一行:
第17行的问题字符43:['DHTMLTOLTIP']最好用点表示法书写
if (ie || ns6) {
var tipobj = document.all ? document.all.dhtmltooltip : document.getElementById ? document.getElementById("dhtmltooltip") : "";
}
以下内容似乎更方便用户使用
var tipobj;
if (document.all)
tipobj = document.all["dhtmltooltip"];
else if (document.getElementById)
tipobj = document.getElementById("dhtmltooltip");
else
tipobj = "";
它使用功能检查来检索id为
DHTMLTOLTIP
的元素,如果没有进行检索的功能,则返回到空的字符串
更新:正如其他人所指出的,应该首先检查getElementById
,并且可能会被忽略,因为任何可以称为“现代”的直面浏览器已经使用了很长时间
更新2:在新的上下文中,JSLint抱怨它不是文档.all.dhtmltooltip
。您可能应该将整个内容改写为:
var tipobj = document.getElementById("dhtmltooltip");
一个快速的谷歌搜索显示,文档。所有的只用于支持IE4。它是一个数组,允许浏览器访问DOM的不同部分(请参阅)
您首先发布的代码检查document.all是否存在。如果没有,则将tipobj
设置为”
。现在,除此之外,除非你真的需要IE4的支持,否则就不值得破译你的帖子。由于很少有人仍在使用IE4,而且这段代码不符合任何现代标准,因此我只需删除这一行,并将tipobj
设置为”
点表示法
foo.bar.baz
foo['bar']['baz']
方括号符号
foo.bar.baz
foo['bar']['baz']
您正在代码的一部分中使用后者
撰写JSLint(一种给出错误信息的工具)的Douglas Crockford认为,最好尽可能使用点符号。JSLint希望:
var tipobj= document.all ? document.all.dhtmltooltip
: document.getElementById
? document.getElementById("dhtmltooltip")
: "";
但是现在完全可以安全地假设document.getElementById
存在,它是在2000年引入的
document.all
都死了,除非你尝试支持像IE4(12岁!)这样的老浏览器:
上述两个片段是一个很好的例子,说明了支持非常多版本的复杂性成本:
看起来唯一真正的问题是格式/语法。这应该完全相同,并且符合javascript最佳实践。主要区别在于使用javascript点表示法而不是括号表示法
if (ie || ns6) {
var tipobj = document.all ? document.all.dhtmltooltip : document.getElementById ? document.getElementById("dhtmltooltip") : "";
}
为什么不直接使用:
var tipobj = dhtmltooltip.id
不确定为什么需要长版本,除非点符号在所有浏览器中都不起作用?如果点符号有问题,您可以始终设置/*jslint sub:true*/选项来覆盖它。正如Quentin所回答的那样
我喜欢使用elem.bar
而不是elem['bar']
的原因之一是它可以保存3个字符。当然,这不是一个很大的改进,但每个任务免费3比特也不错。你应该先测试.getElementById,因为有些浏览器伪造.all是为了向后兼容;byId是您真正想要的功能。如果有人想知道,使用任何一种表示法似乎都没有任何性能优势:如果您想找到使用a.b而不是['b']的原因,请检查my,也许它仍然使用方括号表示法,因此不回答问题。您可以更改document.all[“DHTMLTOLTIP”]
todocument.all.dhtmltoltip
如果你愿意的话。你可以,这是问题的核心。这个答案应该是一个注释…它甚至没有试图回答实际问题,只是在旁边给出一些格式建议。这与使用点符号有什么关系?所以这一行将取代我的整行,让它更轻,更时髦,但仍然工作相同的?只要你不关心支持IE 4和其他难以置信的古代浏览器。这与使用点状符号有什么关系?谢谢,这解释了!你似乎认为他的观点不一定是100%有效tho,有更好的方法然后jsLink验证我的代码吗?我不知道。我认为除了运行和测试JS代码之外,还有一种更好的方法来验证JS代码。我认为@David Dorward试图说明的一点是,两者都是有效的,这只是一个风格问题。大多数人更喜欢使用点符号,但使用方括号符号本身并没有错。谢谢让我首先使用JSLint的是w3验证程序,它说:
字符“&;“是分隔符的第一个字符,但作为数据出现
,所以我想我会检查整个脚本,但这个特定的错误甚至没有出现。如果我找不到方法,我将提出另一个问题!DN比SBN效率略高,通常可读性更高。有些情况下,我认为SBN更可读,但JSLint是一个不错的工具,不要把我答案的措辞当成是对它的批评,我的目的是避免提升或贬低它。标记验证器会发现与在HTML文档中表达JavaScript相关的问题。JSLint不会,它只关注JS,而不是它在文档中的表示。这一行是否完全取代了我的?是的,除非你想支持IE 4或更旧版本。