2015-04-15 5 views
10

Was bedeutet diese Zeile parent && (this.parent.next = this);? Es sieht einfach so aus, als würde man dort sitzen, nichts tun, keine if-Aussage oder ein Versprechen oder irgendetwas. Gibt es einen Namen für diese Art der Codierung?Was bedeutet Ausdruck && Ausdruckssyntax?

var Particle = function(i, parent) 
{ 
    this.next = null; 
    this.parent = parent; 
    parent && (this.parent.next = this); 
    this.img = new Image(); 
    this.img.src = "http://www.dhteumeuleu.com/images/cloud_01.gif"; 
    this.speed = speed/this.radius; 
} 

Es ist an mehreren Stellen in dieser Animationsdatei, die ich sehe. Hier ist ein weiteres Beispiel .. (!touch && document.setCapture) && document.setCapture();

this.down = function(e, touch) 
{ 
    e.preventDefault(); 
    var pointer = touch ? e.touches[0] : e; 
    (!touch && document.setCapture) && document.setCapture(); 
    this.pointer.x = pointer.clientX; 
    this.pointer.y = pointer.clientY; 
    this.pointer.isDown = true; 
+0

Siehe auch [Was ist‚x && foo()‘?] (http://stackoverflow.com/q/6970346/1048572) und [Ist && statement() dasselbe wie if () statement()?] (http://stackoverflow.com/q/12664230/1048572) – Bergi

Antwort

16

Es ist eine Abkürzung für

if (parent) { 
    this.parent.next = this 
} 
+2

A sehr wartungsfreundliche Abkürzung dazu. –

+4

nicht wirklich viel kürzer – Legends

+0

Noch cool, wusste ich nicht darüber. – Scott

7

wenn Eltern falsch ist dann nicht auswerfen (this.parent.next = this), Beispiel:

parent = false; 
parent && alert("not run"); 

Kurz -Circuit Auswertung:

Da logische Ausdrücke von links nach rechts ausgewertet werden, heißt "sho rt-Schaltung“Auswertung

variable && (anything); // anything is evaluated if variable = true. 
variable || (anything); // anything is evaluated if variable = false 

ist es möglich, für die Zuordnung von Variablen zu verwenden:

var name = nametemp || "John Doe"; // assignment defaults if nametemp is false 
var name = isValid(person) && person.getName(); //assignement if person is valid