我正在为他们的骨干应用程序阅读某人的源代码,并尝试找出这个切换功能。我理解切换的基本原理是它只是在一个设置之间来回切换。在下面的示例中,它设置模型上的收藏(指示它是否是最喜欢的,我假设)。我也理解使用!
(意思不是)。但是,我没有得到这个函数如何工作的逻辑。
toggle: function() {
this.save({favorite: !this.get("favorite")});
},
特别是,我没有得到
!this.get("favorite")
不是this.get("favorite")
返回一个字符串,即“最喜欢的”?或者是this.get(“favorite”)返回属性是一个布尔值吗?
有人可以用简单的英语解释这个函数的逻辑在每次调用时是如何工作的,在两个状态之间切换。
答案 0 :(得分:6)
!是一种否定。
该函数可能返回一个布尔值,然后该结果被反转。
所以在这种情况下,它会在真假之间切换favorite
答案 1 :(得分:4)
JavaScript !
运算符否定布尔结果:
!true == false
!false == true
阅读!作为“不”。
因此,发布的代码段会将favorite
设置为与当前设置的相反。
答案 2 :(得分: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强制”。的!将字符串强制转换为布尔值。关键字“this”指的是对象myobject。 this.getmystring(“favorite”)返回一个字符串。 !this.getmystring(“favorite”)将字符串'enceladus'强制转换为布尔值。填充的字符串变为true,因此相反的是false。 double bang将它翻转两次,回到原来是真的。
由于“类型强制”,Javascript为你提供了充足的绳索,由于过度热心的javascript解释器将1.4E10之类的内容转换为小数1.4,因此错误一直突然出现。任何东西都可以转换成任何东西,并且javascript因这种反直觉类型的强制而受到批评。观看这个简短的视频,他回顾了所有javascript类型强制的疯狂行为的方式:https://www.destroyallsoftware.com/talks/wat