ばかげた質問をしたことで誰かが私に答えて叩きつける前に。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です!ビットごとの演算子に相当しますか?
編集:2回目の試み
「!!」を使ってみた like が提案され(ブール値を取得するために)、何も変更されていないことがわかりました。コードと出力は次のとおりです。
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 の場合、出力は変化しません!!! それはまだ偽、真、偽です。何が起こっている?!
編集:3回目の試みで、変数と関係があることがわかりました。方法はわかりませんが、設定方法に関係しています。わかりました、準備してください。これからお話しすることは、あなたの心を吹き飛ばし、キーボードでの入力方法を変える可能性があります. それは信じられないほどです:
//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 が設定された方法であるということです。