Skip to main content
 首页 » 编程设计

angularjs之为什么我从ng-show =“!emptyArray”和ng-hide =“emptyArray”得到不同的结果

2025年02月15日27xing901022

我一直以为ngShowngHide互相充当 bool(boolean) 对象。但是,当涉及到空数组时,ngShow的意外行为会撼动这一信念。

这是一个demo plunker。为什么ng-show="!emptyArray"的行为不像ng-hide="emptyArray"

请您参考如下方法:

因为[] !== false。您可以将长度值强制改为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的指令 hideshow取决于函数 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

希望能帮助到你。