js中if判断条件为一个赋值语句

代码如下:

tag = false
if(tag = !tag){
}else{
}

这个if判断不是应该是恒为true吗?

阅读 15k
6 个回答

1、首先,这个判断恒为true,运行顺序为
1.1、!flag --> 得到 true
1.2、flag = !flag 将true 赋值给flag,flag的值变成true
1.3、if(flag=!flag) ,flag的值为true,于是恒成立

2、其次,这是段有问题的代码,请不要怀疑

这个不一定恒为true.
因为在if判断中,tag = !tag,会改变tag的值。
如果你第二次运行的时候,tag = false与if语句同时执行,那么就恒定为true,
而如果第二次执行的时候,仅仅只是执行了if语句,tag的值会在true与false之前切换,if的判断结果也会切换

恒为true...没看懂这个代码的意思,你确定这是一段逻辑没问题的代码?

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中的代码。

tag = false
if(!tag){
}else{
}

应该和这个没区别吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏