常见的 Javascript 知识(或任何编程语言)告诉我们,!variable
当它是布尔值(或在条件中转换为布尔值等)时, using 将等于相反的值。
我有这个 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 也为你们美化了它。
现在,到底为什么倒数第三行没有返回相反的值呢?我已成功使用以下内容:
return openBar = !openBar;
但由于某种原因,浏览器和 JSfiddle 和 JSHint 喜欢在我这样做时发疯,因为他们期望的是条件或值而不是赋值。但他们不会加载失败。我也知道我可以使用:
openBar = !openBar;
return openBar;
甚至
openBar = !openBar;
return;
但是我喜欢尽可能减少任何地方,并且真的只是想了解为什么这从根本上对我不起作用,以便我将来可以纠正它。
这是否与其他浏览器(使用 Chrome 30 和 Firefox 25)不兼容,或者可能会在我没有预料到的地方出错?
还是我可以忽略更多的不便/警告(例如当我知道结果只能是数字时,在比较 0 时告诉我使用 === 而不是 == 的那些东西)?