老师,这两种情况为什么得到的结果不一样?
1 | <!DOCTYPE html>< br >< html lang = "en" >< br >< br >< head >< br > < meta charset = "UTF-8" />< br > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" />< br > < meta http-equiv = "X-UA-Compatible" content = "ie=edge" />< br > < title >let 和 const 是什么</ title >< br ></ head >< br >< br >< body >< br > < script >< br > {< br > const {< br > toString = 123< br > } = {};< br > console.log(toString);< br > // ƒ toString() { [native code] }< br > }< br >< br > {< br > const {< br > toString = 123< br > } = {< br > toString: undefined< br > };< br > console.log(toString);< br > // 123< br > }< br > </ script >< br ></ body >< br >< br ></ html >< br > |
相关截图:
问题描述:
右侧同样是严格等于undefined
上面的取得值是内置的toString方法,下面却取到了默认值123
我的理解最后结果都应该是123,为什么结果不一样呢?
31
收起
正在回答
1回答
同学你好,二者不一样,如下:
1、 const {toString = 123} = {}这样写,是对空对象{}进行解构,由于{}里面没有toString属性,此时对象原型上的属性也会参与解构。由于{}原型上有toString方法:
所以能拿到该方法,因此结果如下:
2、const {toString = 123} = {toString: undefined}这样写,等号右侧的对象中有toString属性,此时就会优先解构对象自身的属性,而不会解构对象原型上的toString。由于对象的toString的值是undefined,所以会是使用默认值123。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧