document.onmousemove = mousePos;
document.onmousedown = mouseClicked;
我只需返回真正的布尔语句,当我运行此代码时,它可以工作。但是,我很困惑,因为我的“if语句”将起作用,无论是b!== true还是b!== false。有人可以解释一下这两种方式的原因吗?
答案 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)
... $^