作者回复: 赞的。^^.
今天的课程可以对答案哟。
作者回复: 确实。
不过在浏览器的控制台上,和在引擎的层面上执行也是会有区别的。都是使用 v8,NodeJS在Shell中与chrome也一样。但是你写在.js文件中,或者直接从node的命令行上执行,效果就不一样了,例如:
```
> node -p -e '{} + {}'
NaN
```
作者回复: 赞的,+1票。^^.
今天的课程就分析这个了。
作者回复: 是的。同义。
只是我一直的工作是架构,所以架构中通用它的直译,也就是“界面”,而不是“接口/编程接口”,因为有些架构中的界面,并不是用编程来实现的。在这种情况下,界面更多的是一种规约。
作者回复: ES6之前,是需要判断两次的。
* 有[[PrimitiveValue]]内部槽,说明是一个用包装类得到的值。然后,
* 查看[[Class]]内部槽,找到对应的包装类,从而知道类型。
在ES6之后,由于每种包装类有独立的一个槽,所以如果对象obj有[[BooleanData]],那就说明了包装类是Boolean(),且被包装的数据在[[BooleanData]]槽中。
作者回复: 弱引用是向weakSet/weakMap中添加一个目标对象的引用,但添加是目标对象的引用计数不增加。比较来说:
```
var x = {}; // <-右边的对象字面量的引用计数加1
var y = x; // <- 再加1
weakSet.add(x); // <-不加1
weakSet.add(y); // <-也不加1
delete x; // 减1
delete y; // 再减1
...
```
到这里,由于对象的引用计数为0了,所以weakSet中的那个被add()进去的x、y就自动被回收了。——weakSet/weakMap具备这种机制。
所以weakSet/weakMap没有size这个属性,它不安全。——你刚读了它的值,它自己自动回收了一下,就又变掉了。