AngularJS中的真值和假值是什么?

时间:2016-03-03 15:33:50

标签: angularjs

我认为会在closeng-show的背景下考虑?还有其他情况吗?看起来真的和纯粹的JavaScript略有不同 - 但到目前为止我所知道的唯一一个例外是ng-class - 这在JavaScript中是真实的,但在AngularJS中是假的。

(实际上,我尝试使用AngularJS 1.2.1并且[]是假的,而在AngularJS 1.4.8和1.5.0上,[]是真实的。请参阅https://jsfiddle.net/6ayaLhbk/,{{ 3}}和https://jsfiddle.net/6ayaLhbk/1/

我认为有一个问题可能认为[]ng-show="ctrl.foo"相同,但在Angular 1.2.1的情况下则不然。要在Angular 1.2.1中获得纯JavaScript的相同结果,我们似乎可以使用ng-hide="!ctrl.foo" https://jsfiddle.net/6ayaLhbk/2/

如果它是Angular 1.2.1中的ng-show="!!ctrl.foobar",那么它似乎又回到了纯粹的JS真理和虚假规则:https://jsfiddle.net/6ayaLhbk/3/

3 个答案:

答案 0 :(得分:2)

以下值始终是假的:

  • 0(零)
  • "" (空字符串)
  • 未定义
  • NaN(一个特殊的数字值,意思是非数字!)
  

所有其他值都是真实的,包括" 0" (引号为零)," false"   (引号中为false),空函数,空数组和空对象。

var a = !!(0); // variable is set to false
var b = !!("0"); // true

比较虚假值 Falsy值遵循一些略微奇怪的比较规则,这可能导致程序逻辑错误。

虚假值false,0(零)和"" (空字符串)都是等价的,可以相互比较:

var c = (false == 0); // true
var d = (false == ""); // true
var e = (0 == ""); // true

虚假值null和undefined不等于除了它们之外的任何东西:

var f = (null == false); // false
var g = (null == null); // true
var h = (undefined == undefined); // true
var i = (undefined == null); // true

最后,假值NaN并不等同于任何东西 - 包括NaN!

var j = (NaN == null); // false
var k = (NaN == NaN); // false

您还应该知道typeof(NaN)返回"数字"。幸运的是,核心JavaScript函数isNaN()可用于评估值是否为NaN。

如果有疑问...... 在truthy或falsy值可能导致逻辑错误的情况下,使用严格相等(===)和严格不等于(!==)。这些运算符确保按类型和值比较对象。

var l = (false == 0); // true
var m = (false === 0); // false

答案 1 :(得分:0)

Angular表达式就像JavaScript表达式,但有以下不同之处:

上下文:根据全局窗口评估JavaScript表达式。在Angular中,表达式是根据范围对象进行评估的。

原谅:在JavaScript中,尝试评估未定义的属性会生成ReferenceError或TypeError。在Angular中,表达式求值是对undefined和null的宽容。

过滤器:您可以在表达式中使用过滤器来格式化数据。

无控制流语句:您不能在Angular表达式中使用以下内容:条件,循环或异常。

无函数声明:即使在ng-init指令内,也无法在Angular表达式中声明函数。

没有使用文字表示法创建RegExp :您无法在Angular表达式中创建正则表达式。

使用新运算符无法创建对象:您不能在Angular表达式中使用new运算符。

无按位,逗号和无效运算符:您不能在Angular表达式中使用Bitwise,或void运算符。

Source

答案 2 :(得分:0)

在Angular 1.2.7之前,

  

表达式,它是一个带有一个或多个参数的函数   true,但零参数的函数计算为false。

     

这种行为似乎无意无意。这个补丁发挥作用   无论其争论的数量多少都是真实的。

请找到github链接:https://github.com/angular/angular.js/commit/01c5be4681e34cdc5f5c461b7a618fefe8038919