在有人跳出来回答我并问我一个愚蠢的问题之前,我很生气;我知道not运算符的作用,至少在其他语言中,它应该将结果从true转换为false,反之亦然。我坚持的是我不时得到的奇怪行为。即我的代码中有这个。它没有按照我的预期去做。
_checkOnOff: function(inst) {
return (!$.suggestBox.onOff || !$.suggestBox._get(inst, 'onOff')) ? false : true;
},
我在这里处理的'onOff'变量的实际值为0和1。我假设'!'操作员将其反转。
但是,直到我将函数更改为显式声明“ == 0”,我才能使它起作用,就像这样...
_checkOnOff: function(inst) {
return ($.suggestBox.onOff == 0 || $.suggestBox._get(inst, 'onOff') == 0) ? false : true;
},
编辑:添加的信息$ .suggestBox.onOff和$ .suggestBox._get(inst,'onOff')均为0或1。
我的问题是,当$ .suggestBox.onOff等于0时,为什么$ .suggestBox.onOff不产生true?是Javascript!等价于按位运算符?
编辑:第二次尝试
我尝试使用'!!'有人建议这样做(弄个傻瓜),但没有发现任何变化。这是代码和输出:
console.log('val: ' + $.suggestBox.onOff); // outputs: 0
console.log('! : ' + !$.suggestBox.onOff); // outputs: false
console.log('!! : ' + !!$.suggestBox.onOff); //outputs: true
console.log('!!! : ' + !!!$.suggestBox.onOff); //outputs: false
如果$ .suggestBox.onOff为1或0,则输出不会更改!它仍然是错误的,真实的,错误的。到底是怎么回事?!
编辑:第三次尝试,我发现它与我的变量有关。我不知道如何做,但它与设置方式有关。好吧,准备好自己,我要告诉您的内容,可能会打动您的头脑并改变您在键盘上键入的方式。真是不可思议:
//this.onOff = 0;
console.log('this.onOff: ' + this.onOff); //output: 0
console.log('! : ' + ! this.onOff); //output: false
console.log('!! : ' + !! this.onOff); //output: true
如果我取消注释'this.onOff = 0',从而显式地将this.onOff分配给文字,它将输出更改为:
0
真正
假
我才发现原因。我会在答案部分写下来。一个小提示是设置$ .suggestBox.onOff变量的方式。
最佳答案
看来$.suggestBox.onOff
是用"0"
作为字符串设置的,在JavaScript中这始终是真实的。
由于"0"
是真实的,而0
是虚假的,因此您希望0 == "0"
为假,但事实并非如此。
在控制台中尝试以下操作:
!! "0"; // true
!! 0; // false
0 == "0"; // true
奇怪的?是。欢迎来到尴尬的JavaScript世界!
要解决此问题,您应该使
$.suggestBox.onOff
为实际数字,或者即时将其转换为:_checkOnOff: function(inst) {
return !! ( +$.suggestBox.onOff && +$.suggestBox._get(inst, 'onOff') );
}
更新:由于您在注释中指出您是通过文本值设置它的,因此在设置它时请使用它,以便始终将其设置为数字:
$.suggestBox.onOff = +$(this).val();