常见的 Javascript 知识(或者实际上是任何编程语言)告诉我们,使用 !variable
将等于 bool 值(或在条件中转换为 bool 值等)时的相反值。
我有这个 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;
});
});
...我把它扔进了this JSFiddle ...这将显示它打开了切换栏但没有关闭它...有很多蓬松的 HTML 和 CSS 太美化了你们。
现在,到底为什么倒数第 3 行没有返回应有的相反值?我已经成功地使用了以下内容:
return openBar = !openBar;
但由于某些原因浏览器和 JSfiddle 和 JShint 喜欢在我这样做时生气,因为他们期望条件或值而不是赋值。但它们不会加载失败。我也知道我可以使用:
openBar = !openBar;
return openBar;
甚至
openBar = !openBar;
return;
但我喜欢尽量减少所有可能的地方,真的只是想了解为什么这从根本上对我不起作用,以便我可以在将来改正它。
这是否与其他浏览器(使用 Chrome 30 和 Firefox 25)不兼容,或者可能会在我没有预料到的地方出错?
还是我可以忽略更多的不便/警告(比如那些告诉我在比较 0 时使用 === 而不是 == 而我知道结果只能是数字的事情)?
最佳答案
据我所知,您必须显式地重新分配原始的 openBar
变量才能使其正常工作。我很想看看是什么让你不这么认为的例子。我做了这个小修改并删除了返回:
newSize = (openBar = !openBar) ? 20 : 0;
http://jsfiddle.net/a9NPG/1/ (虽然我读到你对此并不真正感兴趣。)
关于javascript - 在一行中返回相反的 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19887582/