用 '!' 说明从字符串转换为布尔值的 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