Что делает ‘::’ (двойное двоеточие) в JavaScript? - PullRequest
24 голосов
/ 05 октября 2009

В документации некоторых API-интерфейсов JavaScript приведены следующие фрагменты в качестве примера вызова некоторой функции:

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

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

::, очевидно, используется здесь, чтобы разрешить передачу одного или двух аргументов в функцию.

Что :: делает в JavaScript?

А как функция узнает, были ли переданы одно или два значения? Как он их читает?


При ближайшем рассмотрении примеры показывают другие странные вещи, такие как

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

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

По крайней мере, // выглядит просто неправильно.

Так что я предполагаю, что это не какой-то необычный новый синтаксис, о котором я не знаю, но, возможно, в примерах просто отсутствуют кавычки вокруг одного строкового аргумента.

Ответы [ 8 ]

224 голосов
/ 02 июля 2015

Во время вашего вопроса это было, конечно, не так, но сейчас :: является действующим оператором ES7. Это на самом деле ярлык для bind.

::foo.bar

эквивалентно

foo.bar.bind(foo)

См. Объяснение здесь для примеров:

17 голосов
/ 05 октября 2009

Ничего. Это синтаксическая ошибка.

>>> alert(42342::37438)
SyntaxError: missing ) after argument list
7 голосов
/ 05 октября 2009

:: не имеет ничего общего с количеством параметров. Вы можете сделать это уже в JavaScript с обычной запятой:

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

SomeFunction('oneParam'); // Perfectly legal

Кроме того, основываясь на ответе Цури Бар Йохая, вы уверены, что не смотрите на что-то подобное?

$('this::is all one::parameter'); // jQuery selector
2 голосов
/ 05 октября 2009

В каком примере вы это видели? Пока что в JavaScript нет оператора с двойным двоеточием!

Двойное двоеточие заменило селекторы с одним двоеточием для псевдоэлементов в CSS3, чтобы сделать явное различие между псевдоклассами и псевдоэлементами. Но это CSS3, а не JavaScript! НЕ ВСЕ!

1 голос
/ 28 января 2013

Возможно, используется ECMAScript для XML ( ECMA-357 стандарт ), что подразумевает, что двойные кавычки являются оператором XPath.

См. ECMAScript для XML

1 голос
/ 05 октября 2009

Это должна быть опечатка для

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

<button type="button" onClick="foo.DoIt('42342::37438')">Click</button>
0 голосов
/ 05 октября 2009

Я предполагаю, что список параметров для foo.DoIt () генерируется кодом, и одно из значений было пустым.

0 голосов
/ 05 октября 2009

Возможно, это опечатка, и ожидается, что все это будет в кавычках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...