2015-12-22 12 views
6

Czy jest tak, że możemy poradzić sobie z wartościami fałszerstw || operatorów, którzy są leniwie oceniani?Unikanie pułapek z przypisywaniem wartości Falsy w domyślnych ustawieniach?

Tak więc, na przykład, jeśli mamy:

function isOldEnough(age) { 
    age = age || 18; 
    return age; 
} 

isOldEnough(0) // returns 18 because 0 is falsy 

W ES6, można po prostu zadeklarować jak

function isOldEnough(age = 18) { ... } 

Czy istnieje anythning możemy zrobić w ES5 aby uniknąć tego problemu?

+2

użycie 'zerowych = value' rachunków zarówno'! undefined' i 'null' ale nie dla' false' lub '0' –

+0

Naprawdę używałbym tylko || jeśli wiem, że obiekt jest przekazywany. Być może lepiej sprawdzić, czy wiek jest równy niezdefiniowanemu? –

+0

z drugiej strony, jeśli chcesz obsłużyć 'undefined',' null', 'false',' 0', puste ciągi/tablice jednolicie jako 'false' używają' !! value', przekształcą 'value' na boolean obsługa pustych/niezdefiniowanych wartości oraz –

Odpowiedz

3

Coś (jeśli dobrze zrozumiałem):

function isOldEnough(age) { 
    var age = typeof age === "number" ? arguments[0] : 18; 
    return age; 
} 

isOldEnough(null) // returns 18 
isOldEnough("") // returns 18 
isOldEnough(undefined) // returns 18 
isOldEnough(0) // returns 0 

mógłby ulec dalszej poprawie z sprawdzenie czy wiek jest równa lub większa niż zero itp

+1

co się stanie, jeśli użyjesz 'isOldEnough (new Number (3))? ;) –

+0

@NikosM. to! http://goo.gl/0FkOiQ – lifetimes

+1

ooooops !!!!!, :) –

Powiązane problemy