2

我正在阅读某人的主干应用程序的源代码,并试图找出这个切换功能。我了解切换的基本原理是它只是在设置之间来回切换。在下面的示例中,它在模型上设置了收藏夹(表明它是否是收藏夹,我假设)。我也理解!(意思是不)的使用。但是,我不明白这个函数是如何工作的逻辑。

 toggle: function() {
      this.save({favorite: !this.get("favorite")});
    },

特别是,我不明白

!this.get("favorite")

不是this.get("favorite")返回一个字符串,即“最喜欢的”吗?还是 this.get("favorite") 返回布尔属性?

有人可以用简单的英语解释一下这个函数的逻辑是如何在每次被调用时工作的,在两种状态之间切换。

4

3 回答 3

6

!是否定的。

该函数可能返回一个布尔值,然后将其结果反转。

所以在这种情况下,它会favorite在真假之间切换

于 2012-04-15T18:20:14.593 回答
4

JavaScript!运算符否定布尔结果:

!true == false
!false == true

读 !作为“不”。

因此,发布的代码片段设置favorite为与当前设置的相反。

于 2012-04-15T18:21:16.427 回答
0

用 '!' 说明从字符串转换为布尔值的 Javascript 代码 和 '!!'

<script type="text/javascript">

var myobject = {
    getmystring : function(){
      return "enceladus";
    },
    getmyboolean : function(key){
      return true;
    },
    toggle: function() {
          document.write(this.getmystring());  //enceladus
          document.write(!this.getmystring()); //false
          document.write(!!this.getmystring()); //true
          document.write(this.getmyboolean()); //true
          document.write(!this.getmyboolean()); //false
          document.write(!!this.getmyboolean()); //true
    }
}
myobject.toggle();
</script>

造成您混淆的概念是“javascript coercion”。这 !将字符串强制转换为布尔值。关键字“this”指的是对象 myobject。this.getmystring("favorite") 返回一个字符串。!this.getmystring("favorite") 将字符串 'enceladus' 强制转换为布尔值。填充的字符串变为真,因此相反的是假。double bang 将其反转两次,回到原来的状态,这是正确的。

由于“类型强制”,Javascript 为您提供了很多可吊死自己的绳索,由于过度热心的 javascript 解释器将诸如 1.4E10 之类的东西转换为十进制 1.4,因此错误一直出现。任何东西都可以转换为任何东西,而 javascript 因这种反直觉的类型强制而受到批评。观看这个简短的视频,他以 1/3 的方式回顾了 javascript 类型强制的所有疯狂:https ://www.destroyallsoftware.com/talks/wat

于 2012-04-15T19:00:34.643 回答