Ответ 1
Потому что [] !== false
. Вместо значения boolean
можно привязать значение длины к boolean
.
<div ng-hide="!!emptyArray.length">emptyArray is falsy, so do not hide this.</div>
<div ng-show="!!!emptyArray.length">!emptyArray is truthy, so show this.</div>
Отредактировано:
Директива AngularJS hide
или show
зависит от функции toBoolean()
для оценки переданного значения. Вот исходный код toBoolean():
function toBoolean(value) {
if (value && value.length !== 0) {
var v = lowercase("" + value);
value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
} else {
value = false;
}
return value;
}
И вы можете проверить следующий код в консоли JS:
>var emptyArray = [];
>toBoolean(emptyArray)
false
>toBoolean(!emptyArray)
false
Вот почему. Поскольку, когда emptyArray
передается непосредственно в toBoolean()
, он вычисляет правильный результат false
. Однако, когда !emptyArray
передается в toBoolean()
, он не оценивает значение true
, так как !emptyArray
сам false
.
Надеюсь, что это поможет.