JavaScript点表示法

时间:2010-01-04 18:47:31

标签: javascript syntax

以下一行显然是用点表示法编写的。我正在尝试清理我的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']最好用点符号写成。

9 个答案:

答案 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版本的复杂性成本的一个很好的示例:

alt text

答案 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分也不错。