看阮老师的es6,有个问题如下:
let {toString:s}=123;
console.log(s===Number.prototye.toString)//true
console.log(s);//function toString()
let {a:s}=123;
console.log(s);//undefined
阮老师给出的解释是:解构赋值时,如果等号右边是数值或者布尔值,那么会先转为对象,上面的代码中,数值的包装对象有toString方法,所以变量s可以取到。
然后我直接输出了s,结果是toString()方法
不明白为什么这个解构赋值之后,s就是toString()方法了,阮一峰老师说的转化为对象,这其中又是如何转化的呢???这个和下面那个解构赋值的区别又是什么呢??
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
第一个赋值时相当于{a:12312}这个object的属性赋值给s
第二个,相当于123这个Number的方法toString 赋值给t
我的理解是解构赋值时,如果等号右边是数值或者布尔值,那么会先转为对象,然后再遍历对象中的所有方法,如果找到对应的方法,则解构成功,否则失败。
就拿你的例子,123转变为对象后拥有toString方法,所以第一个解构成功,但是由于没有a方法,所以第二个解构失败。再比如let { log, sin, cos } = Math;这个,由于Math对象拥有前面三个方法,所以解构成功。
按阮一峰老师说的话,其实很好理解了。
不知道我理解的对不对。
我的理解