为什么{... undefined}不是错误,但是...... undefined是一个错误

时间:2017-04-27 06:17:44

标签: javascript ecmascript-6

JavaScript,第一行是错误,第二行是正确的。

console.log(...undefined) // error console.log({...undefined}) // {}

2 个答案:

答案 0 :(得分:4)

console.log(...undefined) // error

是标准的ES6传播,它要求参数是可迭代类型。 undefined不可迭代,因此您会收到错误。

console.log({...undefined})

是提议的对象扩展语法。对于此语法,传入的参数将其属性复制到新对象中。在这种情况下,the spec defines the following

  
      
  1. 如果来源为undefinednull,则将密钥设为新的空列表。
  2.   

这就是原因。在这种情况下,它将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"})