2015-05-22 16 views
11

curioso di sapere se c'è una qualsiasi parte del ES6 che rende questo tipo di controlli un po 'più conciso:ES6 chiave oggetto stenografia verifica

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

Vuoi leggere o modificare? Per leggerlo puoi destrutturarlo. – zerkms

+0

La risposta breve è no. Non capisco come la destrutturazione aiuterà. 'var {filterObj: {area}} = nextProps;' restituirà lo stesso errore di 'nextProps.filterObj.area'. –

risposta

11

No, nessun operatore esistenziale ha fatto in ES6; è still discussed tuttavia.

È possibile utilizzare una qualsiasi delle existing methods, naturalmente, come

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

Inoltre si può provare destrutturazione e valori di default:

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

Il problema con questo approccio è che inghiottirà zero, stringhe e array vuoti. Il modo corretto è confrontarsi con 'undefined' ma rende il codice troppo voluminoso. –

+0

@ lolmaus-AndreyMikhaylov: Non vedo perché dovrebbe inghiottire zero e stringhe vuote, sicuramente non ti aspetti comunque quando vuoi accedere ad un'altra proprietà sul valore? Se intendi per '.area', puoi sicuramente aggiungere un confronto'! == undefined'. E no, certamente non ingoierà gli array. – Bergi

+0

Ad esempio, si desidera che '3' sia un valore predefinito, ma' 0' è anche un valore legit. Se fai 'valore || 3', sarà impossibile passare uno zero. –