Que fait «:» (deux points) en JavaScript?


178

J'apprends JavaScript et en parcourant la bibliothèque jQuery, je vois :(deux points) être beaucoup utilisé. À quoi cela sert-il dans JavaScript?

// Return an array of filtered elements (r)
// and the modified expression string (t)
   return { r: r, t: t };

Réponses:


247
var o = {
    r: 'some value',
    t: 'some other value'
};

est fonctionnellement équivalent à

var o = new Object();
o.r = 'some value';
o.t = 'some other value';

14
Si similaire à la syntaxe d'initialisation d'objet C #. Merci!
Micah

Et s'il n'y a pas d'objet englobant?
theonlygusti

@ FranciscI.B si je devais deviner, je pense que c'est TypeScript, qui est un sur-ensemble de JavaScript. Il déclare une classe, avec un var nommé xMin, dont le type est un float. C'est assez sûr que ça veut dire.
Sal_Vader_808

96

Et aussi, un deux-points peut être utilisé pour étiqueter une instruction. par exemple

var i = 100, j = 100;
outerloop:
while(i>0) {
  while(j>0) {
   j++

   if(j>50) {
     break outerloop;
   }
  }
i++

}

1
LABEL A ((STATEMENT))
Muhammad Umer

4
Bienvenue sur Spagetti Code :)
Leo The Four

Un goto ne peut pas être déguisé: vous cassez simplement goto; et vous l'avez trouvé! ;)
Andrew

1
Page de référence MDN pour JS Label: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Peter

oui, c'est pourquoi a => {b: 2} ne lancera pas et ne retournera pas undefined
Pavlo D

70

Vous oubliez que les deux points sont également utilisés dans l'opérateur ternaire (bien que je ne sache pas si jquery l'utilise à cette fin).

l'opérateur ternaire est une forme d'expression (les expressions renvoient une valeur) d'une instruction if / then. il est utilisé comme ceci:

var result = (condition) ? (value1) : (value2) ;

Un opérateur ternaire pourrait également être utilisé pour produire des effets secondaires comme si / alors, mais c'est une pratique profondément mauvaise.


2
AKA "opérateur ternaire". Notez que l'OP pose strictement des questions sur le cas littéral de l'objet. Si nous voulons aller même au-delà de ce que demande l'OP, les deux points sont également utilisés dans les étiquettes.
Ates Goral

14
oui je voulais dire ça. Je devrais simplement rester en dehors d'Internet, vraiment, si je veux contourner de manière flagrante des concepts de programmation comme celui-là.
Breton

Ce serait génial de le voir utilisé pour les étiquettes et quoi que ce soit d'autre afin que l'utilisation ne soit jamais confondue @AtesGoral parce que je les recherche toujours sur Google en ce moment.
Shane

Il serait peut-être plus simple de lister les choses qui: ne sont pas utilisées en Javascript.
kingfrito_5005

45

Le «:» est un délimiteur pour les paires clé / valeur. Dans votre exemple, il s'agit d'une notation JavaScript Object Literal.

En javascript, les objets sont définis avec le signe deux-points délimitant l'identifiant de la propriété et sa valeur afin que vous puissiez avoir les éléments suivants:

return { 
    Property1 : 125,
    Property2 : "something",
    Method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

puis utilisez-le comme:

var o =  { 
    property1 : 125,
    property2 : "something",
    method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

alert(o.property1); // Will display "125"

Un sous-ensemble de cela est également connu sous le nom de JSON (Javascript Object Notation), ce qui est utile dans les appels AJAX car il est compact et rapide à analyser dans les langages côté serveur et Javascript peut facilement désérialiser une chaîne JSON en un objet.

// The parenthesis '(' & ')' around the object are important here
var o = eval('(' + "{key: \"value\"}" + ')');

Vous pouvez également mettre la clé entre guillemets si elle contient une sorte de caractère spécial ou d'espaces, mais je ne le recommanderais pas car cela rend simplement les choses plus difficiles à travailler.

Gardez à l'esprit que la notation littérale d' objet JavaScript dans le langage JavaScript est différente de la norme JSON pour la transmission de messages. La principale différence entre les 2 est que les fonctions et les constructeurs ne font pas partie du standard JSON , mais sont autorisés dans les littéraux d'objet JS.


2
En lisant votre réponse, je pensais que je voterais pour, mais vous avez ensuite dit que "Il est également connu sous le nom de JSON". Les littéraux d'objet et JSON ne sont certainement pas la même chose, en effet vos exemples avant de mentionner JSON ne sont pas des JSON valides.
nnnnnn

@nnnnnn La différence entre les 2 est très subtile, mais néanmoins importante. J'ai mis à jour ma réponse pour être plus précise à ce sujet.
Dan Herbert le

1
Je vois la mise à jour. Agréable. Notez que JSON nécessite que les noms de clé soient entre guillemets.
nnnnnn

Pourquoi devez-vous mentionner tout cela deux fois? Quand vous avez dit "et ensuite utilisez-le comme"
Harsha

17

Cela fait partie de la syntaxe littérale de l'objet. Le format de base est:

var obj = { field_name: "field value", other_field: 42 };

Ensuite, vous pouvez accéder à ces valeurs avec:

obj.field_name; // -> "field value"
obj["field_name"]; // -> "field value"

Vous pouvez même avoir des fonctions comme valeurs, vous donnant essentiellement les méthodes de l'objet:

obj['func'] = function(a) { return 5 + a;};
obj.func(4);  // -> 9

1
Génial car cela m'a donné le terme pour rechercher et trouver plus d'informations.
johnny

13

Il peut être utilisé pour lister des objets dans une variable. En outre, il est un peu utilisé dans la sténographie d'une phrase if:

var something = {face: 'hello',man: 'hey',go: 'sup'};

Et l'appelant comme ça

alert(something.man);

Aussi la phrase if:

function something() {  
  (some) ? doathing() : dostuff(); // if some = true doathing();, else dostuff();
}

10

N'oublions pas l'instruction switch, où deux points sont utilisés après chaque "case".


10

Ce sont généralement les scénarios où deux points ':' est utilisé dans JavaScript

1- Déclaration et initialisation d'un objet

var Car = {model:"2015", color:"blue"}; //car object with model and color properties

2- Définition d'une étiquette (non recommandé car il en résulte une structure de contrôle et un code Spaghetti compliqués)

List: 
while(counter < 50)
{
     userInput += userInput;
     counter++;
     if(userInput > 10000)
     {
          break List;
     }
}

3- In Switch Statement

switch (new Date().getDay()) {
    case 6:
        text = "Today is Saturday";
        break; 
    case 0:
        text = "Today is Sunday";
        break; 
    default: 
        text = "Looking forward to the Weekend";
}

4- En opérateur ternaire

document.getElementById("demo").innerHTML = age>18? "True" : "False";

1
Un simple deux-points peut également être utilisé pour l'évaluation des courts-circuits au lieu de ||. Exemple: var a = false, b = a || 'Default value';équivaut àvar a = false, b = a : 'Default value';
Shaun Cockerill

7

C'est JSON ou JavaScript Object Notation. C'est un moyen rapide de décrire un objet ou une carte de hachage. La chose avant les deux points est le nom de la propriété, et la chose après les deux points est sa valeur. Donc, dans cet exemple, il y a une propriété "r", dont la valeur est ce qui est dans la variable r. Idem pour t.


3
JSON n'est qu'un sous-ensemble de la syntaxe d'initialisation d'objet JavaScript. '{a: k ()}' où k est une fonction n'est pas JSON, mais c'est parfaitement la syntaxe d'initialisation d'objet JavaScript.
yfeldblum

12
Pour être pédant, non, ce n'est pas "JSON". Cela ressemble à JSON. C'est la syntaxe littérale d'objet qui est native de JavaScript et qui peut apparaître directement dans le code. JSON, quant à lui, est un format de sérialisation / d'échange de données. JSON est JSON uniquement lorsqu'il est "aérien", c'est-à-dire en transit ou lorsqu'il n'est pas encore analysé en un objet réel.
Ates Goral

3
+1 pour Ates Goral, mais notez que l'exemple donné ne ressemble même pas à JSON: les noms devraient être entre guillemets pour que la syntaxe JSON soit valide.
NickFitz

3

Une erreur stupide que j'ai faite il y a quelque temps qui pourrait aider certaines personnes.

N'oubliez pas que si vous utilisez ":" dans un événement comme celui-ci, la valeur ne changera pas

var ondrag = (function(event, ui) {
            ...

            nub0x: event.target.offsetLeft + event.target.clientWidth/2;
            nub0y = event.target.offsetTop + event.target.clientHeight/2;

            ...
        });

Ainsi "nub0x" s'initialise avec le premier événement qui se produit et ne changera jamais sa valeur. Mais "nub0y" changera lors des prochains événements.


Je suis tombé sur ceci, et pour info ce qui se passe ici, c'est que vous utilisez une étiquette avant votre déclaration. Aucune affectation n'est effectuée, mais l'instruction event.target.offsetLeft + event.target.clientWidth/2;s'exécute chaque fois que votre méthode ondrag est appelée, mais n'attribue jamais la valeur ànub0x
kketch

En fait, cela est utilisé comme une évaluation, et le :est traité comme s'il s'agissait d'un fichier ||. Par conséquent, event.target.offsetLeft + event.target.clientWidth/2;ne déclenchera que chaque fois que fourni nub0xéquivaut à faux.
Shaun Cockerill

1

Une autre utilisation de deux points en JavaScript consiste à renommer une variable, c'est-à-dire:

const person = { 
    nickNameThatIUseOnStackOverflow: "schlingel",
    age: 30,
    firstName: "John"
};
const { nickNameThatIUseOnStackOverflow: nick } = person; // I take nickNameThatIUseOnStackOverflow but want to refer it as "nick" from now on.
nick = "schling";

Ceci est utile si vous utilisez une bibliothèque tierce qui renvoie des valeurs ayant des noms de variables maladroits / longs que vous souhaitez renommer dans votre code.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.