最近的一条 tweet 包含了这段 JavaScript 代码。
有没有人能一步一步地解释一下里面发生了什么?
> function dis() { return this }
undefined
> five = dis.call(5)
Number {[[PrimitiveValue]]: 5}
> five.wtf = 'potato'
"potato"
> five.wtf
"potato"
> five * 5
25
> five.wtf
"potato"
> five++
5
> five.wtf
undefined
> five.wtf = 'potato?'
"potato?"
> five.wtf
undefined
> five
6
特别是,我不清楚:
dis.call(5)的结果是具有某种 [[PrimitiveValue]]属性的 Number,而 five++和 five * 5的结果似乎只是简单的数字 5和 25(而不是 Numbers) five.wtf属性在 five++增量之后消失five.wtf属性在 five++递增之后不再可以设置,尽管 five.wtf = 'potato?'赋值明显设置了值。