我认为会在close
或ng-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/
答案 0 :(得分:2)
以下值始终是假的:
所有其他值都是真实的,包括" 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运算符。
答案 2 :(得分:0)
在Angular 1.2.7之前,
表达式,它是一个带有一个或多个参数的函数 true,但零参数的函数计算为false。
这种行为似乎无意无意。这个补丁发挥作用 无论其争论的数量多少都是真实的。
请找到github链接:https://github.com/angular/angular.js/commit/01c5be4681e34cdc5f5c461b7a618fefe8038919