javascript - js中if判断条件为一个赋值语句
迷茫
迷茫 2017-04-10 16:41:10
[JavaScript讨论组]

代码如下:

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

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(6)
PHP中文网

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

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

PHPz

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

伊谢尔伦

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

PHPz
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');
}
PHP中文网

这段代码绝对的有问题。

首先变量没有声明,浏览器环境会没问题,但是在应用严格模式的环境下会是undefined,其不可复制,导致你后面全是有问题的,报不报错晚上回去实验,如果不保存的话,最执行if中的代码。

天蓬老师
tag = false
if(!tag){
}else{
}

应该和这个没区别吧。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号