JavaScript:作为参数传递给if块的函数

时间:2010-08-26 12:24:03

标签: javascript function

在下面的代码中,如何将栏传递为

 function (n) { return n; } 

在if块中foo评估为true?

 function foo(bar) {

    if (bar) {
       // true
    } else {
       // false
    }
 }

这令我感到困惑,所以非常感谢任何帮助。

4 个答案:

答案 0 :(得分:6)

如果bar绑定到匿名函数,那么它就是一个对象。 JavaScript中的对象是“真实的”。

JavaScript中唯一的'falsy'值是:

  • false
  • null
  • undefined
  • ''(空字符串)
  • 0(数字为零)
  • NaN

其他一切都是“真实的”,包括功能对象。

如果您打算调用匿名函数,则执行if (bar(5))会使用参数5调用您的匿名函数。然后你的匿名函数将返回n(在这种情况下为5)。由于5不是假对象,因此也会转到true分支。执行if (bar(0))会进入else分支,因为0是假的。

答案 1 :(得分:5)

null0false,空字符串或undefined的任何内容将在true语句中评估为if(something),这就是JavaScript中弱类型的工作方式。

如果您想要更具体,您可能需要查看typeof operator来检查您期望的类型,或者使用另一个更强的支票:

if(bar === true) {

使用===检查值类型等价。

答案 2 :(得分:0)

如果你想知道它返回什么类型

,你可以使用typeof()

答案 3 :(得分:0)

它总是返回true,因为bar不为null。如果if语句中的表达式不是逻辑表达式(例如if(x <7))则执行null检查。如果为null,则返回false,否则为true。

在您的示例中,您已将bar定义为函数{returns n;},因此这就是if语句评估为true的原因。

如果bar返回bool(true或false),则需要调用该函数并获取结果,而不是传递对函数的引用 - 这是使用括号完成的:

var exampleA = bar(false); // executes function bar and returns the result (false) in exampleA
var exampleB = bar; // stores a reference to the function bar in variable exampleB