代码如下:
tag = false
if(tag = !tag){
}else{
}
这个if判断不是应该是恒为true吗?
这个不一定恒为true.
因为在if判断中,tag = !tag
,会改变tag的值。
如果你第二次运行的时候,tag = false
与if语句同时执行,那么就恒定为true,
而如果第二次执行的时候,仅仅只是执行了if语句,tag的值会在true与false之前切换,if的判断结果也会切换
tag = false
if(tag = !tag){
}else{
}
以上是你的代码,这个代码是没问题的
tag = false;
那么:!tag肯定为true
然后:tag = !tag
所以:tag = true
也就是说:if(tag = !tag) 得到的tag值为true
好了,解释了这么多,我来说一下这种用法的方便之处,例如:
var is_window = function() {
if(window == undefined) {
return false;
} else {
return window;
}
}
if(win = is_window()) {
console.log(win);
} else {
console.log('不存在window');
}
这段代码绝对的有问题。
首先变量没有声明,浏览器环境会没问题,但是在应用严格模式的环境下会是undefined,其不可复制,导致你后面全是有问题的,报不报错晚上回去实验,如果不保存的话,最执行if中的代码。
10 回答11k 阅读
6 回答2.9k 阅读
5 回答4.7k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1、首先,这个判断恒为true,运行顺序为
1.1、!flag --> 得到 true
1.2、flag = !flag 将true 赋值给flag,flag的值变成true
1.3、if(flag=!flag) ,flag的值为true,于是恒成立
2、其次,这是段有问题的代码,请不要怀疑