我一直在浏览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
答案 0 :(得分:3)
这是一个严格的比较测试,当使用x参数值1调用时,函数f(x,y,z)
是否返回值50.当默认参数值添加到x
的值时,这将是真的是7和42。
这些函数调用和比较纯粹是为了给它们调用的函数提供用法示例和可能的测试示例。
代码
function f (x, y, ...a) {
return (x + y) * a.length
}
f(1, 2, "hello", true, 7) === 9
是扩展参数处理的示例。 ...a
变量长度属性等于3,因此测试确认在x
和y
之后传递给函数的参数数量。
答案 1 :(得分:2)
f(1)===50
检查f(1)
是否等于50.如果此表达式计算为true,
,则此表达式的结果为true
。否则为false
。由于您没有将此值分配给变量,因此您无法在任何地方使用它。
正式地,===
被称为严格相等运算符。有关详细信息,请查看here。
答案 2 :(得分:2)
这里的重点是它的示例代码。他们向您展示,使用这些参数调用函数的结果等于某事。表达式本身不会做任何事情,除非您将其粘贴到控制台中。
他们可以轻松使用评论。
f(1, 2, "hello", true, 7) // 9
答案 3 :(得分:2)
根据我的说法,你几乎以正确的方式接受了它。
只需将该函数调用与if
条件中的三等号一起放入。
if ( f(1) === 50 ){
console.log(true);
}
else {
console.log(false);
}
多数民众赞成。
等于的三元组只是一个比较运算符。并且三元组等于运算符的一侧的函数调用意味着从该函数返回的值。
因此,只需将其视为javascript中的任何其他comparison operator
。
如果我误解了你的问题,请纠正我。!
一切顺利!
答案 4 :(得分:1)
标识( === )运算符的行为与等于( == )运算符完全相同,但不进行类型转换,类型必须为同样被视为相等。
在您的示例中,如果您将所有三个数字类型的参数放在一起,您将得到数字作为结果,然后检查结果是否具有正确的类型,您必须使用 === 运算符。< / p>
也许这个例子在你的案例中会更清楚:
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.
所以在你的情况下,这个 === 运算符用于仔细检查结果是否真的与你期望的结果相同。