所以,基本上我有这个:
Array.prototype.toString = function() {
return ("[" + this.map(thing => thing = '"' + thing + '"').join(', ') + "]")
}
我打电话的时候:
['foo', 'bar'].toString()
返回
“[”foo“,”bar“]”
现在,这将完美地运作。这个(带有花括号)似乎不像我想要的那样工作:
Array.prototype.toString = function() {
return ("[" + this.map(thing => {thing = '"' + thing + '"'}).join(', ') + "]")
}
然后它返回:
[,]
有人可以告诉我区别吗?我不知道为什么[] .map的工作原理如下。
答案 0 :(得分:2)
您不会在arrow function
的阻止声明中返回任何内容() => {
// code
return 42; // return is required in block statment
}
() => 42 // return is implicit
Array.prototype.toString = function() {
return ("[" + this.map(thing => { return thing = '"' + thing + '"'}).join(', ') + "]")
};
console.log(['foo', 'bar'].toString())

更短,未分配到thing
Array.prototype.toString = function() {
return ("[" + this.map(thing => '"' + thing + '"').join(', ') + "]")
};
console.log(['foo', 'bar'].toString())

答案 1 :(得分:2)
这与数组或map方法无关。它完全取决于箭头功能的工作原理。
当您在右侧给出单个语句时,将对该语句进行评估并在函数内返回。
foo => bar
相当于:
function (foo) { return bar; }
当您在右侧放置一个块时,该块只是因为函数体。
foo => { bar }
相当于:
function (foo) { bar; }
在第二个版本中,您没有return
语句,因此该函数返回undefined
。
如果使用块,则需要使return语句显式。
foo => { return bar; }
答案 2 :(得分:0)
没有花括号(或使用常规曲线括号),它会直接返回单个值,而花括号会执行多行代码。如果您希望此代码返回一个值,则必须在大括号内显式返回它。
答案 3 :(得分:0)
因为当您添加{}
时,它会将它从纯函数式箭头函数转换为普通函数,只是它具有箭头语法。如果要从此返回值,则需要在结尾处明确写入return thing;
:
Array.prototype.toString = function() {
return ("[" + this.map(thing => {thing = '"' + thing + '"'; return thing;}).join(', ') + "]")
}
纯箭头函数工作的原因是因为语句thing = '"' + thing + '"'
实际返回结果,因此是函数的返回值。如果不重新分配thing
:
Array.prototype.toString = function() {
return ("[" + this.map(thing => '"' + thing + '"').join(', ') + "]")
}