javascript .filter()真正的布尔值

时间:2015-05-03 17:06:47

标签: javascript filter boolean

document.onmousemove = mousePos;
document.onmousedown = mouseClicked;

我只需返回真正的布尔语句,当我运行此代码时,它可以工作。但是,我很困惑,因为我的“if语句”将起作用,无论是b!== true还是b!== false。有人可以解释一下这两种方式的原因吗?

6 个答案:

答案 0 :(得分:30)

我正在解决类似的问题并想出了这个:

public class MyTestBase extends WithApplication {
    @Override
    protected Application provideApplication() {
        Application application = new GuiceApplicationBuilder()
                .configure("db.default.driver", "org.h2.Driver")
                .configure("db.default.url", "jdbc:h2:mem:play")
                .configure("play.http.router", "my.test.Routes")
                .build();
        return application;
    }
}

答案 1 :(得分:5)

最简单的方法:

function bouncer(arr) {
    return arr.filter(x => !!x);
}

答案 2 :(得分:3)

这是因为你返回了值。 filter函数应返回true或false,如下所示:

function bouncer(arr) {
    return arr.filter(function(x) { console.log(x === true)
       return x !== false;
    });
}

或更短:

nat(0).
nat(s(X)) :- nat(X).
divide(0,_,0).
divide(X,Y,D) :- X@<Y, D is 0.
divide(X,s(0),X).
divide(_,0,undefined) :- !.

答案 3 :(得分:2)

显然, .filter 是在ES5中引入的。这无疑帮助我确定了这里发生的事情。希望对您有帮助!

基本上是写作

arr.filter(Boolean)

和写作一样

arr.filter( function(x) { return Boolean(x); }); 

因为布尔值也是一个在true时返回true,在false时返回false的函数!

来源:here

答案 4 :(得分:1)

你的函数行为是因为布尔比较中的JavaScript值是“truthy”或“falsey”。在布尔上下文中使用时,非布尔值被强制为布尔值(比较,if语句等)

如果我理解你的意图,你可以修改你的功能以获得你想要的输出:

function bouncer(arr) {
  // Don't show a false ID to this bouncer.
    function a(b) {
      if(typeof(b) === 'boolean' && !b) {
        return new Boolean(b);
      }
    }

    arr = arr.filter(a);
    return arr;
}

bouncer([7, 'ate', '', false, 9, true]);

答案 5 :(得分:0)

我遇到了这个练习,并且正在做一些练习。最终帮助我更好地理解了它,因此,如果可以的话,我将对该保镖功能添加一些清晰度。

OBJ_FILES += $(patsubst %.cpp,$(OBJ_DIR)/%.o,$(notdir $(SRC_FILES)))

all: $(OBJ_FILES)
    ... $^