===与函数调用的含义

8

我一直在学习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是什么意思?

我知道===用于比较操作符左右两侧的类型和值。

但是为什么要这样使用呢?

请详细解释一下它的用法。

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


如果你的意思是“为什么要进行比较而不将其分配给变量或在循环中使用”,那很可能只是测试代码,用于在控制台中显示。 - Álvaro González
1
如果你将它包装起来,它就有意义了:console.log(f(1) === 50); - mplungjan
5
我认为这里使用它只是为了显示执行后函数返回的结果。在生产代码中没有使用它的意义。 - Maxx
1
是的,@ÁlvaroGonzález,我知道。我想知道为什么它与函数调用一起使用。 - Tirthraj Barot
"我一直在学习ES6,以为很容易转换到EcmaScript 2017,也许你应该先学习ES3。" - dfsq
显示剩余3条评论
5个回答

3

这是一个严格的比较测试,用于检验当函数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
f(1)===50检查f(1)是否等于50。如果此表达式被计算为true,那么此表达式的结果是true。否则,它是false。由于您没有将此值分配给变量,因此您无法将其用于任何地方。
严格相等运算符称为===。有关更多信息,请参见此处

@ÁlvaroGonzález 当然你可以在控制台中看到这个值,但你无法在其他地方使用它。这就是我的观点。在控制台中,你只能看到评估的结果。 - Christos
正确。正如Maxx所指出的那样,在生产代码中没有用处。但它可以在开发中有所帮助。 - Álvaro González
@ÁlvaroGonzález 当然没问题,这是真的 :) - Christos

2

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

他们也可以使用注释来说明。

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

2

根据我的理解,你几乎以正确的方式处理了它。

只需要将该函数调用与三个等号符一起放在if条件语句中即可。

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

就是这样。

三个等号只是一个比较运算符。而在三个等号运算符的一侧进行的函数调用意味着从该函数返回的值。

因此,只需将其视为javascript中的任何其他比较运算符。

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

祝一切顺利!


1
身份( === )运算符与相等性( == )运算符的行为完全相同,除了不进行类型转换,而且必须具有相同的类型才被认为是相等的
在您的示例中,如果将所有三个参数设置为数字类型,则会得到数字作为结果,然后要检查结果是否具有正确的类型,必须使用 === 运算符。
也许在您的情况下,这个例子会更清楚:
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.

所以在您的情况下,这个 === 运算符用于双重检查结果是否真正符合您的预期。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接