2015-05-22 3 views
11

Neugierig Überprüfung zu wissen, ob irgendein Teil ES6 es, dass diese Art von Kontrollen etwas prägnanter macht:ES6 Stenografie Objektschlüssel

componentWillReceiveProps(nextProps) { 
    if(nextProps && nextProps.filterObj && nextProps.filterObj.area){ 
     // go ahead 
    } 
} 
+0

Wollen Sie es oder ändern lesen? Zum Lesen können Sie es zerstören. – zerkms

+0

Kurze Antwort ist nein. Ich verstehe nicht, wie Destrukturierung helfen wird. 'var {filterObj: {area}} = nextProps;' gibt den gleichen Fehler zurück wie 'nextProps.filterObj.area'. –

Antwort

11

Nein, keine Existenz Betreiber haben es in ES6 gemacht; es ist still discussed jedoch.

Sie können jede der existing methods, natürlich verwenden, wie

if (((nextProps||{}).filterObj||{}).area) { 
    // go ahead 
} 

Sie können auch Destrukturierung und Standardwerte versuchen:

function componentWillReceiveProps({filterObj: {area} = {}} = {}) { 
    if (area) { 
     // go ahead 
    } 
} 
+0

Das Problem mit diesem Ansatz ist, dass es Nullen, leere Strings und Arrays schlucken wird. Der richtige Weg ist der Vergleich mit "undefined", aber der Code ist viel zu sperrig. –

+0

@ lolmaus-AndreyMikhaylov: Ich sehe nicht, warum es Nullen und leere Strings schlucken würde, erwarten Sie diese sowieso nicht, wenn Sie auf eine andere Eigenschaft auf den Wert zugreifen möchten? Wenn Sie für den '.area' meinen, können Sie sicherlich einen'! == undefinierten 'Vergleich anhängen. Und nein, es wird sicher keine Arrays verschlingen. – Bergi

+0

Zum Beispiel möchten Sie, dass '3' ein Standardwert ist, aber' 0' ist auch ein gültiger Wert. Wenn Sie "Wert || 3" eingeben, ist es unmöglich, eine Null zu übergeben. –