条件

时间:2017-08-24 14:12:22

标签: javascript if-statement

我真的很困惑。也许有人可以帮助我? 问题如下:

var isSignInside = new Boolean(someCondition);

if (!isSignInside) {
    //doStuff
}
else {
    //doOtherStuff
}

现在,如果isSignInsidefalse(调试器告诉我),脚本仍会跳转到//doOtherStuff。怎么会这样? 其余的片段并不重要,但如果被问及我可以分享。 当然有一个我不明白的简单解释。提前致谢。 修改 someCondition确实是一个自定义方法“强制”返回bool而不是(否则)返回一个字符串。 修改:直接在if中使用该功能。需要一些棘手的paranthesis,但现在工作。感谢(布尔)对象永远不能===到静态布尔基元的提示。地狱这个论坛很快。

3 个答案:

答案 0 :(得分:4)

创建布尔对象时,它是对象。对它的引用,无论它表示的布尔基元值如何,都将像任何其他非空对象引用一样进行测试。

构造像这样的布尔实例一般没有意义:

var isSignInside = !!someCondition;

那将给你一个布尔原语,反映你病情的真实/虚假状态。

答案 1 :(得分:2)

if(new Boolean(false)) alert("hehe");

实际上, isSignedInside 不是布尔值,而是布尔对象(感谢 new )。您可能希望获得其原始值以进行比较:

if( (new Boolean(false)).valueOf() ) alert("hehe");

甚至更容易,直接取值。

答案 2 :(得分:1)

那不是那样做的。您想使用布尔基元。你正在尝试做的就是这样:

var isSignInside = (someCondition);
if (isSignInside === false) {
   //doStuff
}
else {
    //doOtherStuff
}

https://jsfiddle.net/catbadger/pxrteq59/