最近我发现这种语法适用于JavaScript(Chrome 53):
function foo([param1]) { // Function argument is declared as array and param1 is used as variable? What is the name of this syntax?
console.log(param1);
}
foo(['TestParameter1']); // Case 1 - works. Output: TestParameter1
foo('TestParameter1'); // Case 2 - works??? Why? Output: TestParameter1
foo(123); // Case 3 - does not work - VM860:1 Uncaught TypeError: undefined is not a function(…)
Result => TestParameter1 // this is the result
我看到param1可以用作引用第一个参数中索引为0的项的变量(声明为数组)。
我的问题是:
1)如何命名此语法([param1]部分允许您将param1用作变量)?
2)为什么“案例2”有效?有自动转换吗?
答案 0 :(得分:3)
正如@Xufox所指出的,这是因为destructuring
(array destructuring更具体)。您的第二个示例的工作原因是string is an array-like object,因此您获得T
,即param1[0]
。数字不是数组(甚至是数组),因此引擎无法对参数进行解构。
如果你将你的号码强制转换为字符串,它将起作用:
foo((123).toString());
答案 1 :(得分:2)
这似乎是@Xufox正确指出的解构。
函数参数实际上可以解构:
现在,上面显示了另一种解构的示例,示例如下:
function userId({id}) {
return id;
}
var user = {
id: 42,
displayName: "jdoe"
};
console.log("userId: " + userId(user)); // "userId: 42"
但是,我认为它也适用于此:
function foo([param1]) {
console.log(param1);
}
此行为中整数和字符串之间的差异:
console.log('123'); //works, outputs 1, '123' = ['1', '2', '3'] of chars
console.log(['123']); //works, outputs 123
console.log([123]); //works, outputs 123
console.log(123); //error
在上面的例子中,因为字符串只是一个字符数组,所以它实际上很好用。
答案 2 :(得分:0)
正如上面这些才华横溢的人所说的那样。以下是计算机的读取方式:
foo('testParamater1')= foo(['testParamater1']);
但是...
foo(123)= foo([[1,2,3]);
不幸的是,对于您的具体用例,不一样。遗憾!