JavaScript中的'::'(双冒号)是什么作用?

31

一些JavaScript API的文档展示了以下代码片段,作为调用某个函数的示例:

<button type="button" onClick="foo.DoIt(72930)">Click</button>

<button type="button" onClick="foo.DoIt(42342::37438)">Click</button>

::在这里显然是用来允许向函数传递一个或两个参数。

<button type="button" onClick="foo.Bar(72//893)">Click</button>

<button type="button" onClick="foo.Qux(425;1,34::)">Click</button>

至少//看起来很奇怪。

所以我猜这不是我不知道的一些花哨新语法,而是示例中可能缺少单引号或双引号将字符串参数括起来。


1
据我所知,那是一个打字错误。在那种用法中,双冒号没有意义。 - Robert K
你能告诉我们更多关于你正在使用的JavaScript API吗? - Xinus
抱歉,API及其文档不对外公开,因此我无法提供链接。 - dtb
8个回答

282

在你提问的时候这并不是事实,但现在 :: 是一个有效的 ES7 运算符。它实际上是一个 bind 的快捷方式。

::foo.bar

等同于

foo.bar.bind(foo)

点击这里查看示例的解释


1
如果我理解正确的话,那么在问题所给的上下文中它是无效的。问题中“::”的左侧和右侧都是数字。 - Quentin
58
这正是我在谷歌搜索 :: 的含义时想要找到的答案!谢谢。 - poshaughnessy
2
这个答案与问题无关,因为(1)ES7在2016年6月发布,不包含::运算符; (2)::运算符目前只是一个0级提案,很可能会被更改或删除; (3)在问题的上下文中,它不是有效的::运算符语法,即使正确的语法也无法在任何当前主流浏览器中工作。 - rhgb
6
问题标题与问题主体不符,尽管这个答案适用于标题问题,在我的情况下,正是我所寻找的。 - andrepaulo

15

什么都没有。这是一个语法错误。

>>> alert(42342::37438)
SyntaxError: missing ) after argument list

3
是的,除非开发者在使用 document.getElementsByTagName('button')[0].getAttribute('onclick') 解析 onclick 属性值并提取信息的时候,否则这是一个无效的 ECMAScript 表达式。 - meder omuraliev
1
@Brann - 在问题所给的上下文中,它似乎不是有效的。 - Quentin
@Pawel - 不是这样的。请看我的先前评论,了解问题的背景和上下文。 - Quentin

7

::与参数数量无关。在JavaScript中,您已经可以使用普通逗号实现这一点:

function SomeFunction(param1, param2) {
   //...
}

SomeFunction('oneParam'); // Perfectly legal

根据Tzury Bar Yochay的回答,您确定您不是在查看以下内容吗?

$('this::is all one::parameter'); // jQuery selector

我想你是对的,它缺少引号。我会向作者提交一个错误报告 :) - dtb

2

你在哪个例子中看到的?到目前为止,JavaScript没有双冒号运算符!

双冒号在CSS3中替换了伪元素的单冒号选择器,以明确区分伪类和伪元素。但这是CSS3,不是JavaScript!完全不一样!


鉴于此,听起来他可能正在查看一个jQuery选择器,并省略了参数周围的引号。 - Joel Coehoorn
无论如何,这个问题引起的关注远远超出了我的预期。 - Tzury Bar Yochay

1

这一定是一个打字错误

<button type="button" onClick="foo.DoIt('72930')">Click</button>

<button type="button" onClick="foo.DoIt('42342::37438')">Click</button>

1

0
也许这是一个打字错误,整个内容应该放在引号中。

0

我猜测 foo.DoIt() 的参数列表是由代码生成的,其中一个值为空。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接