!variable
一般的なJavascriptの知識(または実際には任意のプログラミング言語)は、それがブール値である(または条件付きでブール値に変換されるなど)場合、使用は反対の値に等しいことを教えてくれます。
私はこのJavascriptを持っています:
$(document).ready(function () {
var addEvent = function (element, myEvent, fnc) {
return ((element.attachEvent) ? element.attachEvent('on' + myEvent, fnc) : element.addEventListener(myEvent, fnc, false));
};
var openBar = false;
addEvent(document.getElementById('toggle'), 'click', function (event) {
var toggler = event.currentTarget,
barWrap = document.getElementById('left-wrap'),
newSize = (!openBar) ? 20 : 0;
$(barWrap).animate({
width: (newSize / 100 * window.innerWidth)
}, {
queue: false,
duration: 300,
step: function (now) {
toggler.style.right = now + 'px';
//barWrap.outerWidth = now;
document.body.style.marginRight = now + 'px';
},
complete: function () {
newSize = (newSize === 20) ? '20%' : '0%';
document.body.style.marginRight = newSize;
toggler.style.right = newSize;
barWrap.style.width = newSize;
}
});
return !openBar;
});
});
...私がこのJSFiddleに投げ込んだこと...これは、トグルバーを開いていることを示しますが、閉じていないことを示しています...たくさんのふわふわしたHTMLとCSSがあまりにもきれいです。
さて、一体なぜ最後の行から 3 行目までが反対の値を返さないのでしょうか? 私は以下を正常に使用しました:
return openBar = !openBar;
しかし、なんらかの理由で、ブラウザ、JSfiddle、および JShint は、代入ではなく条件または値を期待しているため、私がそうすると怒るのが好きです。しかし、ロードに失敗することはありません。私はまた、私が使用できることも知っています:
openBar = !openBar;
return openBar;
あるいは
openBar = !openBar;
return;
しかし、私はできる限り最小限に抑えるのが好きで、将来修正できるように、なぜこれが根本的にうまくいかないのかを理解したいだけです.
これは別のブラウザ (Chrome 30 および Firefox 25 を使用) と互換性がないのでしょうか、それとも予期しない場所でエラーが発生する可能性がありますか?
それとも、無視できる不便/警告のほうが多いのでしょうか (結果が数値にしかならないことがわかっているときに 0 を比較するときに、== の代わりに === を使用するように指示されているようなものです)?