布尔值(x)和!! x之间的差异

时间:2017-11-13 21:21:31

标签: javascript node.js

使用JavaScript,

之间有什么区别
library(openxlsx)    
read_excel_allsheets <- function(filename) {
  sheets <- names(loadWorkbook(filename))
  x <- lapply(sheets, function(X) readWorkbook(filename, sheet = X))
  names(x) <- sheets
  x
}

data <- read_excel_allsheets("file.xlsx")

Boolean(x)

2 个答案:

答案 0 :(得分:2)

它们都具有相同的输出,但您必须注意布尔对象与函数。布尔构造函数(使用new关键字)不是原始truefalse值。而!!运算符评估对象是否真实/虚假。

以下是MDN的引用:

  

任何值未定义或为null的对象,包括a   值为false的Boolean对象,传递给时计算结果为true   条件陈述。

因此以下评估为false:

new Boolean(false) === false

但以下评估结果为真:

Boolean(false) === false

答案 1 :(得分:2)

它们之间的一个有趣区别是,您可以在Boolean函数中明确地传递Array#filter作为回调,而如果您想使用!!,则可以首先必须设置一个回调函数,然后返回它。

.filter(Boolean)

.filter(!!)

.filter((x) => !!x) (可以简化,但是 - .filter((x) => x)