javascript - 函数的默认参数值、解构赋值

标签 javascript ecmascript-6 arguments destructuring

伙计们,这里有一些理论。

有一个函数 -

function lol( { x = 10 } = {}, { y } = { y : 10 } ) {
console.log( x, y )
}; 

事情变得很棘手

lol(); // 10, 10
lol( {}, {} ); // 10, undefined
  1. 为什么我在传递空对象后得到undefined
  2. 为什么当 lol() 时,y 的默认值为 10

我迷路了,需要帮助!

最佳答案

如果你这样做:

(function ({x = 10}) {
  console.log(x)
})()

将会出现 TypeError: Cannot match against 'undefined' or 'null' 如果你尝试:

(function ({x} = {}) {
  console.log(x)
})()

现在,这给出 undefined .

<小时/>

如下:

function({x} = {}) { ... }

xundefined 匹配,因为赋值右侧没有属性具有 x 属性。

function({x = 10} = {}) {...}

再次,xundefined 匹配因此,它采用默认值 10 .

<小时/>

另一方面,你的第二个论点(单独考虑)

function({ y } = { y : 10 }) {...}

在这里,比赛发生了 y获取值为 10 但是当你传递一个空对象时,默认参数对象 {y : 10}被覆盖。

这相当于:

function({ y } = {}) {...}

在这里,你没有任何东西可以匹配 y,所以它被设置为 undefined

关于javascript - 函数的默认参数值、解构赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42390777/

相关文章:

emacs - 如何使用 kill-ring 的内容作为通用参数的前缀参数?

javascript - 数据表显示/隐藏带有复选框的列

javascript - 合并两个深度数组

javascript - 不破坏缩进的多行字符串

javascript - 为什么 IntelliJ 不断从这个 JavaScript 模板字符串中删除反引号?

python - 如何在运行时使用指定的参数名称创建函数?

javascript - jQuery:在两个引号之间写入变量

javascript - 聚合多个数组的总计

javascript - 单元测试时模拟 ES6 依赖关系

c - 如何在没有垃圾的情况下从 C 命令行中获取带空格的参数