JavaScript,第一行是错误,第二行是正确的。
console.log(...undefined) // error
console.log({...undefined}) // {}
答案 0 :(得分:4)
console.log(...undefined) // error
是标准的ES6传播,它要求参数是可迭代类型。 undefined
不可迭代,因此您会收到错误。
console.log({...undefined})
是提议的对象扩展语法。对于此语法,传入的参数将其属性复制到新对象中。在这种情况下,the spec defines the following:
- 如果来源为
醇>undefined
或null
,则将密钥设为新的空列表。
这就是原因。在这种情况下,它将undefined
视为“不复制”,因此这不是一个错误的案例。
答案 1 :(得分:0)
undefined
可以定义为对象或rest参数,不定义babel
"use strict";
const fn = (...undefined) =>
console.log(...undefined);
fn();
fn({b: 7});
fn({g: 9, x: 10});
fn({opts: "busted"})
定义babel
的地方,使用对象休息
"use strict";
const fn = ({...undefined}) =>
console.log({...undefined});
fn();
fn({b: 7});
fn({g: 9, x: 10});
fn({opts: "busted"})
尝试在定义babel
并且展开元素位于undefined
之前重现错误
"use strict";
const fn = ({...undefined}) =>
console.log(...undefined); // no error
fn();
fn({b: 7});
fn({g: 9, x: 10});
fn({opts: "busted"})