2012-01-11 2 views
1

j'ai une question de comprendre une syntaxe JavaScript, ci-dessous:Conditionals/syntaxe confusion

var myObject = { 
    value: 0; 
    increment: function (inc) { 
     this.value += typeof inc === 'number' ? inc : 1; 
    } 
}; 
myObject.increment(); 
document.writeln(myObject.value); // 1 
myObject.increment(2); 
document.writeln(myObject.value); // 3 

Plus précisément:

this.value += typeof inc === 'number' ? inc : 1; 

Est-ce la ligne en disant que si:

typeof inc === 'number' 

alors:

this.value += inc 

Toute bonne façon de penser à ceci ou à une ressource pour aider à comprendre serait appréciée.

+0

Ce dit que si "inc" est un nombre valide alors utilisez-le pour incrémenter, sinon utilisez 1. Vous pouvez aussi écrire: this.value + = (isNaN (inc)? 1: inc); –

Répondre

1

C'est exact, c'est ce qu'on appelle un opérateur ternaire. Si l'instruction se résout à true, elle fait la première option sinon elle résout la seconde. Il peut être décomposé en une simple if/else

if (typeof inc === 'number') this.value += inc; 
else this.value++; 
+0

merci pour votre réponse – zallarak

1

Il est en effet de dire que si typeof inc === 'number' puis d'ajouter inc-this.value, et par ailleurs d'ajouter 1-this.value. Le modèle est un exemple de l'opérateur ternaire, qui renvoie le côté gauche du : si la condition est vraie et le côté droit du : si faux.

opérations ternaires sont un peu plus couramment utilisés pour l'affectation comme:

// Assign the greater of y and z to x (or z if they're equal) 
var x = y > z ? y : z; 

// equivalent to: 
if (y > z) { 
    var x = y; 
} 
else var x = z; 

Dans ce cas cependant, il est utilisé pour renvoyer un numéro à l'opérateur +=.

+0

Merci @michael, pour votre explication et l'exemple de code que vous avez écrit. – zallarak

1

C'est l'opérateur ternary.

this.value += typeof inc === 'number' ? inc : 1; 

est le même que

if (typeof inc === 'number') { 
    this.value += inc; 
} else { 
    this.value += 1; 
} 
+0

Merci! Y a-t-il un avantage de vitesse pour chaque variante? Je suppose que non, et si tel est le cas, comme quelqu'un vient d'entrer dans javascript je envisagerais d'adopter ce dernier comme un style. – zallarak

+0

Aucun avantage de vitesse, je voudrais utiliser ce dernier aussi bien. C'est juste plus lisible. – Joe

+0

C'est l'opérateur conditionnel, qui est un exemple d'opérateur ternaire. –

1

L'opérateur ternaire est juste une version abrégée de if/else. Il est parfois utile de mettre l'expression conditionnelle à l'intérieur entre parenthèses pour mieux voir l'état testé:

this.value = (typeof inc === 'number') ? inc : 1; 

Donc, si typeof résultats inc dans « numéro » puis attribuez-lui à This.value inc, sinon assignez 1.

+0

merci, ça clarifie! – zallarak