为什么要使用这个javascript箭头函数,或者有什么区别?
我偶然发现了这个相对简单的箭头函数:为什么要使用这个javascript箭头函数,或者有什么区别?,javascript,arrow-functions,Javascript,Arrow Functions,我偶然发现了这个相对简单的箭头函数: varx=([a,b]=[1,2],{x:c}={x:a+b})=>a+b+c; console.log(x())第一个表示法将具有属性x的对象作为第二个参数。它被解构,x被提取为c。如果未定义,则使用具有属性x的默认对象: console.log(x([1, 2], {x: 5})); 而第二个参数采用一个简单的参数基元参数(在本例中可能是一个数字): 因此,唯一的区别是输入函数的第二个参数。第一个表示法将具有属性x的对象作为第二个参数。它被解构,x被
varx=([a,b]=[1,2],{x:c}={x:a+b})=>a+b+c;
console.log(x())
第一个表示法将具有属性x
的对象作为第二个参数。它被解构,x
被提取为c
。如果未定义,则使用具有属性x
的默认对象:
console.log(x([1, 2], {x: 5}));
而第二个参数采用一个简单的参数基元参数(在本例中可能是一个数字):
因此,唯一的区别是输入函数的第二个参数。第一个表示法将具有属性
x
的对象作为第二个参数。它被解构,x
被提取为c
。如果未定义,则使用具有属性x
的默认对象:
console.log(x([1, 2], {x: 5}));
而第二个参数采用一个简单的参数基元参数(在本例中可能是一个数字):
因此,唯一的区别是输入函数的第二个参数。您的第二个is示例的第二个参数是一个简单的es6默认初始化,而您的第一个示例的第二个参数也是一个简单的es6默认初始化(带分解结构)。 但是,我想你已经知道了 问题的另一部分是,给我看第一个更好的用例 当你想从一个巨大的javascipt对象中访问一个密钥时,解构是非常有用的 大概是这样的:
aHugeJavascriptObject = {
key1:'value1',
.
.
.
key999:'value999'
}
现在,访问对象的键key999
的一种方法是aHugeJavascriptObject.key999
,而您可能需要这样做
const { key999 } = aHugeJavascriptObject
我还假设你也知道这一点。
但是,恐怕这就是你的问题所在。你的第二个例子的第二个参数是一个简单的es6默认初始化,而你的第一个例子的第二个参数也是一个简单的es6默认初始化和解构。 但是,我想你已经知道了 问题的另一部分是,给我看第一个更好的用例 当你想从一个巨大的javascipt对象中访问一个密钥时,解构是非常有用的 大概是这样的:
aHugeJavascriptObject = {
key1:'value1',
.
.
.
key999:'value999'
}
现在,访问对象的键key999
的一种方法是aHugeJavascriptObject.key999
,而您可能需要这样做
const { key999 } = aHugeJavascriptObject
我还假设你也知道这一点。
但是,恐怕这就是你的问题所在。在这种情况下,没有太多。一般来说,这种语法允许更多。谢谢你的链接。起初,我没有参考这些例子。但是现在,在回答之后,我得到了答案@在这种情况下,不是很多。一般来说,这种语法允许更多。谢谢你的链接。起初,我没有参考这些例子。但是现在,在回答之后,我得到了答案@Jacquegoupillyes,这就是对is的功能和工作原理的解释。我也知道这一点但这并不是原因的答案。
那么有人能告诉我这两种符号的区别吗至于为什么要使用它:如果你将一个对象作为一个具有大量其他属性的参数传递,它只会选择你需要的一个。对不起,我经常用这个,所以我觉得很明显,我误解了你的问题。nitte93user3232918解释得很好。我不想贬低你的回答对我来说,还不完全清楚你想用你的答案告诉我什么。谢谢你的努力!是的,这就是对is的功能和工作原理的解释。我也知道这一点但这并不是原因的答案。那么有人能告诉我这两种符号的区别吗至于为什么要使用它:如果你将一个对象作为一个具有大量其他属性的参数传递,它只会选择你需要的一个。对不起,我经常用这个,所以我觉得很明显,我误解了你的问题。nitte93user3232918解释得很好。我不想贬低你的回答对我来说,还不完全清楚你想用你的答案告诉我什么。谢谢你的努力!谢谢你的回答。我喜欢你的意图。如果我理解正确,你的意思是:varobj={key:3};var x=([a,b]=[1,2],{key:c}=obj)=>a+b+c代码>。好吧,至少这是一个不错的名称内联翻译,但甚至可以用c=obj.key
来完成。如果函数中有更多参数,这将变得更好!所以,不错。还是我没有领会你的意思?是的,没错,你可以使用解构或c=obj.key
,这两种方法都适合你。但是,如果您有一个巨大的对象,每次访问密钥时都要写入obj.yourKeyName
,那么obj
部分就会变得多余。相反,如果您已经知道要访问哪个密钥,则可以执行{yourKeyName,someOtherKey}=obj。但这并不重要,两者都做同样的工作,只是代码少了,工作多了。我希望你能明白这一点。
好吧,这是一个很好的用例解释。非常感谢,你给了我正确的方向。谢谢你的回答。我喜欢你的意图。如果我理解正确,你的意思是:varobj={key:3};var x=([a,b]=[1,2],{key:c}=obj)=>a+b+c代码>。好吧,至少这是一个不错的名称内联翻译,但甚至可以用c=obj.key
来完成。如果函数中有更多参数,这将变得更好!所以,不错。还是我没有领会你的意思?是的,没错,你可以使用解构或c=obj.key
,这两种方法都适合你。但是,如果您有一个巨大的对象,每次访问密钥时都要写入obj.yourKeyName
,那么obj
部分就会变得多余。相反,如果您已经知道要访问哪个密钥,则可以执行{yourKeyName,someOtherKey}=obj。但事实并非如此,马特