【问题标题】:Meaning of === with function call=== 函数调用的含义
【发布时间】:2016-12-30 08:55:39
【问题描述】:

我一直在使用 ES6,假设切换到 EcmaScript 2017 会很容易。

在浏览过程中,我对这段代码感到困惑

function f (x, y = 7, z = 42) {
    return x + y + z
}
f(1) === 50

ES5 等价物

function f (x, y, z) {
    if (y === undefined)
        y = 7;
    if (z === undefined)
        z = 42;
    return x + y + z;
};
f(1) === 50;

我确实从中了解了默认参数。

但是f(1)===50 在这两个代码中的含义是什么?它有什么用?

这是另一个例子

function f (x, y, ...a) {
    return (x + y) * a.length
}
f(1, 2, "hello", true, 7) === 9

f(1, 2, "hello", true, 7) === 9 是什么意思?

我了解=== 用于比较运算符的 LHS 和 RHS,包括两者的类型而不仅仅是值。

但为什么会这样使用呢??

请解释一下它的用法。

这是我得到这个的链接。 http://es6-features.org/#RestParameter

【问题讨论】:

  • === operator 并不新鲜,它从一开始就存在于 JavaScript 中。
  • 如果您的意思是“为什么要进行比较而不是将其分配给变量或在循环中使用它”,那可能只是要在控制台中显示的测试代码。
  • 如果你把它包装起来,它是有道理的:console.log(f(1) === 50);
  • 我认为这里使用它只是为了显示执行后返回的函数。在生产代码中这样使用它没有任何意义。
  • 是的@ÁlvaroGonzález 我知道。我想知道为什么它与函数调用一起使用。

标签: javascript jquery equality function-call triple-equals


【解决方案1】:

这是一个严格的比较测试函数f(x,y,z),当使用x参数值1调用时返回值50。当添加到x的值的默认参数值是7和42时,这是正确的.

这些函数调用和比较纯粹是为它们调用的函数提供使用示例和可能的测试示例。

代码

function f (x, y, ...a) {
    return (x + y) * a.length
}
f(1, 2, "hello", true, 7) === 9

是扩展参数处理的一个示例。 ...a 变量长度属性等于 3,因此测试确认在 xy 之后传递给函数的参数数量。

【讨论】:

    【解决方案2】:

    按照我的说法,你几乎把它拿对了。

    只需将该函数调用与三个等号一起放入if 条件即可。

    if ( f(1) === 50 ){
        console.log(true);
    }
    else {
        console.log(false);
    }
    

    就是这样。

    三元组等于只是一个比较运算符。三元组等于运算符一侧的函数调用表示从该函数返回的值。

    因此,只需将其视为 javascript 中的任何其他 comparison operator

    如果我误解了你的问题,请纠正我。!

    一切顺利!

    【讨论】:

      【解决方案3】:

      f(1)===50 检查 f(1) 是否等于 50。如果此表达式的计算结果为 true,,则此表达式的结果为 true。否则为false。由于您没有将此值分配给变量,因此您不能在任何地方使用它。

      形式上,=== 称为严格相等运算符。如需更多信息,请查看here

      【讨论】:

      • @ÁlvaroGonzález 当然你可以在控制台中看到这个,但是你不能在任何地方使用这个值。这是我的观点。在控制台中,您只会看到评估结果。
      • 正确。正如 Maxx 指出的那样,这在生产代码中没有用。但它可以帮助开发。
      • @ÁlvaroGonzález 当然,这是真的 :)
      【解决方案4】:

      这里的重点是它的示例代码。他们向您展示了使用这些参数调用该函数的结果等于某个值。表达式本身不会做任何事情,除非您将其粘贴到控制台中。

      他们可以很容易地使用评论。

      f(1, 2, "hello", true, 7) // 9
      

      【讨论】:

        【解决方案5】:

        标识 (===) 运算符的行为与相等 (==) 运算符相同,只是没有进行类型转换,并且 类型必须是相同被视为相等

        在您的示例中,如果您将所有三个数字类型的参数放入,您将得到数字作为结果,然后要检查结果是否具有正确的类型,您必须使用 === 运算符。

        也许这个例子在你的情况下会更清楚:

        f(1,1,1)   // returns 3 - numeric type
        f(1,1,"1") // returns "111" - string type
        //so now if you will write
        f(1,1,1) == "3" // true
        f(1,1,1) == 3 // true
        f(1,1,1) === "3" // false, because the result is 3 not "3" as string.
        f(1,1,1) === 3 // true
        f(1,1,"1") == "111" // true
        f(1,1,"1") == 111 // true
        f(1,1,"1") === "111" // true
        f(1,1,"1") === 111 // false, because the result is string "111" not 111 number.
        

        因此,在您的情况下,此 === 运算符用于仔细检查结果是否真的符合您的预期。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-01
          • 1970-01-01
          • 2012-08-14
          • 1970-01-01
          • 2015-11-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-22
          相关资源
          最近更新 更多