Ostatnio dużo programowałem w Swift. Dzisiaj zrobiłem trochę pracy w JavaScipt, gdy pojawiło się pytanie:Opcjonalne łańcuchy w JavaScript
Czy jest coś podobnego do opcjonalnego łańcucha w JavaScript? Sposób na zapobieżenie undefined is not an object
bez żadnych zmiennych?
przykład:
function test(){
if(new Date() % 2){
return {value: function(){/*code*/}};
}
}
test().value();
zawiedzie połowie czasu, ponieważ czasami test
powraca nieograniczony.
Jedynym rozwiązaniem można myślę, jest funkcją:
function oc(object, key){
if(object){
return object[key]();
}
}
oc(test(), 'value');
Chciałbym móc zrobić coś takiego:
test()?.value()
Część po znaku zapytania jest wykonywana tylko wtedy, gdy test
zwrócił obiekt.
Ale to nie jest bardzo eleganckie. Czy jest coś lepszego? Magiczna kombinacja operatorów?
Edytuj Wiem, że mogę przepisać test
, aby zwrócić coś. Ale zastanawiam się, czy istnieje coś takiego jak opcjonalne połączenie. Nie interesuje mnie konkretne rozwiązanie powyższego przykładu :. Coś, co mogę również użyć, jeśli nie mam kontroli nad funkcją zwracającą niezdefiniowaną.
co chcesz zwrócić wartość(), gdy test() zwraca niezdefiniowany? –
@ ZaheerAhmed false lub undefined. To nie ma znaczenia. – idmean
można zawinąć istniejącą funkcję, aby przywrócić domyślną wartość w przypadku niezdefiniowanej, bez przepisywania. możesz również użyć potrójnego (x? y: z)() lub domyślnego operatora (x || y)() w czasie połączenia. – dandavis