!!之间的区别 而且!在JavaScript中

Hus*_*man 4 javascript angularjs

我遇到了那些正在检查user.rank属性的运算符:

<div ng-show="!!user.rank">
    {{user.rank}}
</div>
<button ng-show="!user.rank"  ng-click="addRank(user)">Add Rank</button>
Run Code Online (Sandbox Code Playgroud)

它们有何不同,我们可以使用什么呢?

Jam*_*iec 15

单个bang(!)用于否定布尔值.

Double bang(!!)用于将truthy/falsey值强制转换为布尔值true或false.

例如

var x = 0; // a falsey value
console.log(x); // logs 0
console.log(!x)// logs true
console.log(!!x)// logs false

var y = "Hello world"; // a truthy value
console.log(y); // logs "Hello world"
console.log(!y)// logs false
console.log(!!y)// logs true
Run Code Online (Sandbox Code Playgroud)

适用于您的具体案例

ng-show="!!user.rank"
Run Code Online (Sandbox Code Playgroud)

ng-show毫无疑问,期待一个实际的布尔值,user.rank显然要么是真实的,要么是假的 - 将它强制转换为布尔值可以恰当地满足你的角度指令.