2009-10-05 20 views
18

La documentazione di alcune API JavaScript mostra i seguenti frammenti come un esempio di come richiamare qualche funzione:Cosa fa '::' (double colon) in JavaScript?

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

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

:: è ovviamente utilizzato qui per consentire uno o due argomenti da passare alla funzione.

Che cosa fa :: in JavaScript?

E come fa la funzione sapere se uno o due valori sono stati passati? Come li legge?


a ben guardare, gli esempi mostrano altre cose strane come

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

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

Almeno la // sembra proprio sbagliato.

Quindi immagino non si tratti di una nuova sintassi di fantasia di cui non sono a conoscenza, ma forse gli esempi mancano di virgolette attorno a un argomento di una singola stringa.

+1

quanto ne so, questo è un errore di battitura. Il doppio colon in quell'uso non ha senso. –

+0

puoi dirci di più sull'API javascript che stai utilizzando .. – Xinus

+0

Link a detta documentazione? –

risposta

13

Niente. È un errore di sintassi.

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

Sì, a meno che per qualche ragione non ragionevole lo sviluppatore stia effettivamente analizzando l'onclick valore attributo con 'document.getElementsByTagName ('button') [0] .getAttribute ('onclick')' ed estraendo tale informazione, che è un'espressione ECMAScript non valida. –

+1

@Brann - Non sembra valido nel contesto indicato nella domanda. – Quentin

+0

@Pawel - No, non lo è. Vedi il mio commento precedente. Vedi il contesto della domanda. – Quentin

2

In quale esempio l'hai visto? Finora, JavaScript non ha un doppio operatore di due punti!

I doppi punti hanno sostituito i selettori a punto singolo per gli pseudo-elementi in CSS3 per fare una distinzione esplicita tra pseudo-classi e pseudo-elementi. Ma questo è CSS3, non JavaScript! Affatto!

+0

Dato questo, sembra che stia guardando un selettore jquery e ometta le virgolette attorno al parametro. –

+0

probabilmente. in ogni caso, questa domanda ha attirato molta più attenzione di quanto pensassi. –

1

Forse è un errore di battitura, e il tutto dovrebbe essere tra virgolette.

7

:: non ha nulla a che fare con il numero di parametri. Si può fare già in JavaScript con una virgola normale:

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

SomeFunction('oneParam'); // Perfectly legal 

Inoltre, in base alla risposta del Tzury Bar Yochay, sei sicuro che non stai guardando qualcosa di simile al seguente?

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

Immagino che tu abbia ragione e che manchi le virgolette. Presenterò un bug report all'autore :) – dtb

0

sto indovinando che la lista di parametri per foo.DoIt() viene generato dal codice, e uno dei valori era vuoto.

2

deve essere un errore di battitura per

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

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

Non era certamente il caso, al momento della sua domanda, ma in questo momento è un operatore :: ES7 valida. In realtà è una scorciatoia per il bind.

::foo.bar 

è equivalente a

foo.bar.bind(foo) 

Vedere una spiegazione here ad esempio:

+1

Se sto leggendo correttamente, allora non è valido nel contesto dato nella domanda. LHS e RHS di '::' nella domanda sono numeri. – Quentin

+24

Questa è la risposta che stavo cercando quando ho cercato su Google per cosa significa: però! Grazie – poshaughnessy

+2

Questa risposta non ha nulla a che fare con la domanda, perché (1) ES7, che è pubblicato a giugno 2016, non contiene l'operatore '::'; (2) L'operatore '::' è attualmente solo una proposta di stage 0, che è altamente probabile che venga cambiata o rimossa; (3) Nel contesto della domanda, non è una sintassi dell'operatore '::' valida, e anche la sintassi corretta non funzionerà in nessuno dei principali browser correnti. – rhgb