老师,这两种情况为什么得到的结果不一样?

老师,这两种情况为什么得到的结果不一样?

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>let 和 const 是什么</title>
</head>

<body>
<script>
{
const {
toString = 123
} = {};
console.log(toString);
// ƒ toString() { [native code] }
}

{
const {
toString = 123
} = {
toString: undefined
};
console.log(toString);
// 123
}
</script>
</body>

</html>

相关截图:

http://img1.sycdn.imooc.com//climg/60dc678209a60a0604520081.jpg

问题描述:

右侧同样是严格等于undefined

上面的取得值是内置的toString方法,下面却取到了默认值123

我的理解最后结果都应该是123,为什么结果不一样呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,二者不一样,如下:

1、 const {toString = 123} = {}这样写,是对空对象{}进行解构,由于{}里面没有toString属性,此时对象原型上的属性也会参与解构。由于{}原型上有toString方法:

http://img1.sycdn.imooc.com//climg/60dd2110090c7dac04270097.jpg

http://img1.sycdn.imooc.com//climg/60dd211809d3c9b907280381.jpg

所以能拿到​该方法,因此结果如下:

http://img1.sycdn.imooc.com//climg/60dd214d098efb3e05440049.jpg

2、const {toString = 123} = {toString: undefined}这样写,等号右侧的对象中有toString属性,此时就会优先解构对象自身的属性,而不会解构对象原型上的toString。由于对象的toString的值是undefined,所以会是使用默认值123。

祝学习愉快!

  • __Promise 提问者 #1

    懂了,谢谢老师

    2021-07-01 10:25:42
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师