Javascript 语法:AngularJS 过滤器

Javascript Syntax: AngularJS Filter

我在 AngularJS here 中找到了应用过滤器的优秀代码。它按预期工作,虽然我有点不确定缩短使用的是什么! ?和 : 在这种情况下将取代。

根据经验,它看起来像 ?和 : 是一个三元运算符,虽然我不完全确定 !有。

环顾Whosebug,似乎!根据上下文有多种功能,即 3755606.

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

!logical NOT operator:它将其参数强制转换为布尔值,然后反转该值(例如,true 变为 false,false 变为 true)。 if (!value) 检查 value 是否有错误值。什么是 "falsey" 值?强制为布尔值时变为假的任何值。那是 nullundefined""NaN0,当然还有 false.

test ? one_thing : another_thingconditional operator。如果正在测试的值是真值,则计算 ? 之后的表达式并且条件表达式采用该结果;如果不是,则计算 : 之后的表达式,条件表达式采用 that 结果。 (您有时会听到称为 "ternary" 运算符的条件运算符。它确实是 a 三元运算符 [接受三个操作数的运算符],并且它是目前 JavaScript 中唯一的三元运算符,但它的专有名称是 'conditional operator'。理论上,有一天可以将其他三元运算符添加到该语言中...)

所以最终结果:

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

是:

  • 强制 value 为布尔值:Falsey 值变为 false,所有其他值变为 true.

  • 反转布尔值。

  • 如果反转布尔值是true,return '';否则,评估 value.replace(/ /g, '') 和 return 结果。

我的猜测是 value 始终是一个字符串。如果是这样,那么简短的版本是: 如果 value"",return "";否则,return value 的内容删除了所有空格。


旁注:!value 周围的 () 完全没有必要。