当我将花括号与javascript一起使用时,我得到了意外的结果。我正在寻找是否有人可以帮助我了解发生了什么事情?
const ages = [3, 10, 18, 20]
let x
x = ages.some( (a) => a===18) // x is true
x = ages.some( (a) => {a===18}) // x is false
奇怪为什么我添加花括号时x结果为false。有人可以帮忙解释吗?
答案 0 :(得分:1)
箭头函数有一些叫做隐式返回的东西。
因此,如果您将表达式写为箭头函数的主体,它将自动返回结果。
因此,对于x = ages.some( (a) => a===18)
,支票a === 18
作为结果自动返回。就像您写过x = ages.some( (a) => { return a === 18; })
一样。
对于带有方括号的版本,您无需添加返回值,因此即使a等于18,它也始终会返回未定义的值。您需要显式返回才能使其正常工作,如上所示。
如果至少一个元素为回调返回true
,则 Array.some()函数将返回true
。如此写,不用括号,您将为第三个数组元素返回true,为其他数组元素返回false,从而为变量true
返回x
。
在带括号的版本中,由于该函数不返回任何内容,因此始终返回undefined
。对于所有值,Undefined都将强制转换为false,因此最终结果是变量x
也为false。
答案 1 :(得分:0)
没有花括号,您的函数体将被限制为单个表达式,并且返回值将自动成为该表达式的结果。
但是使用{
}
时,该函数的行为类似于任何其他代码块:除非您使用显式的{{,否则它不会隐式返回值(即其值为undefined
)。 1}}语句。
return
等效于(x) => x + 1
。
答案 2 :(得分:0)
使用花括号时,必须返回结果,否则返回未定义,这意味着{a===18}
将始终被视为false。
您应该写
x = ages.some( (a) => {return a===18})
答案 3 :(得分:0)
=>
不带花括号,它返回a===18
布尔值
但是在第二种情况下,您需要返回该值,例如x = ages.some( (a) => {return a===18})
答案 4 :(得分:0)
这是一个很好的示例,说明了可以用JS编写函数的不同方式以及它们如何工作。基本上请记住,箭头功能没有,花括号只是return
的简写。
() => { return 'foo'; }
与() => 'foo';
//regular function with no return value
var a = 'bar';
const myFunc1 = function() { a = 'foo'; }
console.log(myFunc1(), a);
//regular function with a return value
a = 'bar';
const myFunc2 = function() { return a = 'foo'; }
console.log(myFunc2(), a);
//arrow function with a return value
a = 'bar';
const myFunc3 = () => { return b = 'foo'; }
console.log(myFunc3(), a);
//arrow function with no return value
a = 'bar';
const myFunc4 = () => { b = 'foo'; }
console.log(myFunc4(), a);
//arrow function using shorthand, which has an implicit return value
a = 'bar';
const myFunc5 = () => b = 'foo';
console.log(myFunc5(), a);