2015-02-02 3 views
0

В этом простом javascript-коде метод проверки возвращает строку, если условия не совпадают, иначе неопределенные. Я использую неопределенное значение в разделе «if». Является ли это обычной/приемлемой практикой программирования javascript?Лучшая практика Javascript для использования неопределенной в качестве булевой оценки?

if (verify(text)) { 
    alert(text + " is not bar"); 
} 

function verify(foo) { 
    if (foo + "" != "bar") return "foo is not same as bar"; 
} 
+0

Почему бы не возвратить 'true', если foo не является бар? –

+0

Метод проверки должен возвращать логическое значение. – Bergi

+0

Да, в идеале, функция должна быть 'return foo +" "! =" Bar ";' (esp, если у пользователя есть Java-фон), но я вижу этот код как нечто, с которым кто-то играет, чтобы посмотреть, как новый язык работает. – Shomz

ответ

1

Да, так как вы знаете, что результаты проверки будут либо truthy (непустая строка) или falsy (не определено), это прекрасно, чтобы использовать его как это.

Вот список truthy и falsy значения в JS, вы можете найти их под рукой: http://www.sitepoint.com/javascript-truthy-falsy/

0

Это обычная практика, но в моем опыте лучше быть явным. Например, я предпочитаю:

verify(text) === undefined 

Как я хотел бы предложить, чтобы сделать «проверить», чтобы вернуть булево значение. Причина этого заключается в том, что по какой-либо причине у вас есть метод проверки, который возвращает 0 (ноль), и вы делаете if (verify), условие будет ложным, но 0 фактически является подтвержденным значением.

Я надеюсь, что это поможет.

0

Хотя это технически возможно и прекрасно работает в большинстве случаев, я лично считаю его более удобным для проектирования функций, чтобы они всегда возвращали один и тот же тип. Мой IDE предупреждает меня о несовместимых функций:

enter image description here

и это предупреждение следует воспринимать всерьез. В частности, это помогает избежать неприятных сюрпризов при тестировании вашего приложения:

// hmm... 
function isZero(n) { 
    if(n == 0) 
     return true; 
} 

// let's test it 
describe("test", function() { 
    it("isZero", function() { 
     expect(isZero(0)).toBe(true); 
     expect(isZero(1)).toBe(false); // FAILURE! 
    }); 
}); 
Смежные вопросы