+ !!是什么意思在JavaScript中?

时间:2015-05-29 09:13:21

标签: javascript

我最近遇到了这行代码,想了解它的意义和作用,因为我的javascript-foo不是很热:

if ((+!!config.template) + (+!!config.templateUrl) !== 1) {}

从我可以收集的内容中,检查是否设置了任一选项(因此必须设置模板或templateUrl,而不是两者都设置或不设置)

所以,如果设置了config.template,

  • + config.template不起作用(模板不是数字)
  • !config.template将返回false(-1)
  • !! config.template将返回true(0)
  • + !! config.template因此会返回1

如果未设置config.template,

  • !config.template将返回true(0)
  • !! config.template将返回false(-1)
  • + !! config.template因此会返回0

如果那时你将它应用于config.templateUrl,如果设置则最终为1,否则为0

所以最后的测试是查看config.template和config.templateUrl的总和是否为1(即设置了一个或另一个)

这是有效的推理吗?

1 个答案:

答案 0 :(得分:3)

将bool值强制转换为Number,前缀为+。

上面代码中的

!!检查template上是否存在属性config。如果找不到模板,!!通常会返回false,但是通过预先+,它会返回0。两个+!!语句都返回数字,当它们一起添加时,它们将为0或1.

如果两个或都没有设置/为真(!== 1

,则最终检查将返回true