我现在正在读《发现流星》, 第7章有代码:
Posts.allow({
insert: function(userId, doc) {
// only allow posting if you are logged in
return !! userId; ///// <<==== what does "!!" means?
}
});
谢谢
Tom Ritter 精彩地总结为
// Maximum Obscurity:
val.enabled = !!userId;
// Partial Obscurity:
val.enabled = (userId != 0) ? true : false;
// And finally, much easier to understand:
val.enabled = (userId != 0);
因此先转换为布尔值,然后进行双重否定
!会将任何正值、true 或现有变量(例如字符串和数组)转换为 false,并将任何负值、未定义、null 或 false 转换为 true。 !!涂抹两次。
在此上下文中,如果变量 userId 存在且不为空、null 或 false,则返回 true。
就像你将变量类型更改为布尔值
!! userId;
// same as
userId ? true:false;