=== 与函数调用的含义

Meaning of === with function call

我一直在研究 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,包括两者的类型而不仅仅是值。

可是为什么会被这么用呢??

请解释一下它的用法。

这是 link 我从哪里得到的。 http://es6-features.org/#RestParameter

f(1)===50 检查 f(1) 是否等于 50。如果此表达式的计算结果为 true,,则此表达式的结果为 true。否则就是false。因为你没有把这个值赋给一个变量,所以你不能在任何地方使用它。

形式上,=== 称为严格相等运算符。欲了解更多信息,请查看 here.

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

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

代码

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

是扩展参数处理的一个例子。 ...a 变量长度 属性 等于 3 因此测试确认在 xy.

之后传递给函数的参数数量

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

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

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

identity (===) 运算符的行为与 equality (==) 运算符的行为相同,只是没有进行类型转换, 类型必须相同才能被视为相等

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

也许这个例子对你来说会更清楚:

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.

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

按照我的说法,你几乎是对的。

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

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

就是这样。

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

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

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

祝一切顺利!