2015-02-08 5 views
0

Я нашел этот отличный код для применения фильтра в AngularJS here. Он работает так, как ожидалось, хотя я немного не уверен в том, что используется сокращение! ? и: в этом контексте заменит.Javascript Синтаксис: AngularJS Filter

Из опыта, похоже, что? и: являются тройными операторами, хотя я не совсем уверен, какая функция! есть.

От взгляда вокруг stackoverflow, кажется, что! имеет несколько функций в зависимости от контекста, то есть 3755606.

app.filter('myFilterName', function() { 
 
    return function (value) { 
 
     return (!value) ? '' : value.replace(/ /g, ''); 
 
    }; 
 
    });

+1

The '!'оператор делает только одно, действительно. – Pointy

ответ

2

The ! является logical NOT operator: Это принуждает свой аргумент в логическое значение, то это значение инвертирует (например, истинное становится ложным и ложным становится истинным). if (!value) проверяет, имеет ли значение value значение. Что такое «ложная» ценность? Любое значение, которое становится ложным при принуждении к логическому. То, что null, undefined, "", NaN, 0, и, конечно, false.

test ? one_thing : another_thing является conditional operator. Если тестируемое значение является правдивым, выражение после ? оценивается, и условное выражение принимает этот результат; если нет, выражение после : оценивается и условное выражение принимает , что результат. (Иногда вы слышите условный оператор, называемый оператором «тройной». Это правда, что это a ternary operator [оператор, который принимает три операнда], и это единственный тернарный оператор, который в настоящее время работает в JavaScript, но его собственное имя 'условный оператор' в теории, когда-нибудь другие тройные операторы могут быть добавлены к языку ...)

Так чистый результат:.

return (!value) ? '' : value.replace(/ /g, ''); 

является:

  • Coerce value to boolean: значения Falsey становятся false, все остальные значения становятся true.

  • Invert that boolean.

  • Если инвертированное булево значение: true, return ''; в противном случае, оцените value.replace(/ /g, '') и верните результат.

Мое предположение, что value - это всегда строка. Если да, то короткая версия: Если value is "", return ""; в противном случае верните содержимое value, удалив все пробелы.


Side Примечание: () вокруг !value совершенно ненужными.

+1

спасибо, очень полезно :) –