Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript点表示法_Javascript_Syntax - Fatal编程技术网

JavaScript点表示法

JavaScript点表示法,javascript,syntax,Javascript,Syntax,下面这行显然是用点表示法写得最好的。我正试图清理我的JavaScript代码,使其严格。这是什么意思 if (ie||ns6) { var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : ""; } 我在代码行中添加了一些上下文,以防这有所帮助? 我对这件事一无所知。我不想支持InternetExp

下面这行显然是用点表示法写得最好的。我正试图清理我的JavaScript代码,使其严格。这是什么意思

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”]
to
document.all.dhtmltoltip
如果你愿意的话。你可以,这是问题的核心。这个答案应该是一个注释…它甚至没有试图回答实际问题,只是在旁边给出一些格式建议。这与使用点符号有什么关系?所以这一行将取代我的整行,让它更轻,更时髦,但仍然工作相同的?只要你不关心支持IE 4和其他难以置信的古代浏览器。这与使用点状符号有什么关系?谢谢,这解释了!你似乎认为他的观点不一定是100%有效tho,有更好的方法然后jsLink验证我的代码吗?我不知道。我认为除了运行和测试JS代码之外,还有一种更好的方法来验证JS代码。我认为@David Dorward试图说明的一点是,两者都是有效的,这只是一个风格问题。大多数人更喜欢使用点符号,但使用方括号符号本身并没有错。谢谢让我首先使用JSLint的是w3验证程序,它说:
字符“&;“是分隔符的第一个字符,但作为数据出现
,所以我想我会检查整个脚本,但这个特定的错误甚至没有出现。如果我找不到方法,我将提出另一个问题!DN比SBN效率略高,通常可读性更高。有些情况下,我认为SBN更可读,但JSLint是一个不错的工具,不要把我答案的措辞当成是对它的批评,我的目的是避免提升或贬低它。标记验证器会发现与在HTML文档中表达JavaScript相关的问题。JSLint不会,它只关注JS,而不是它在文档中的表示。这一行是否完全取代了我的?是的,除非你想支持IE 4或更旧版本。