Недавний твит содержал этот фрагмент 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)
являетсяNumber
с каким-либо свойством a[[PrimitiveValue]]
, но результатыfive++
иfive * 5
кажутся просто равными числами5
и25
(неNumber
s) - почему свойство
five.wtf
исчезает после приращенияfive++
- почему свойство
five.wtf
больше не устанавливается после приращенияfive++
, несмотря на то, что назначениеfive.wtf = 'potato?'
, по-видимому, устанавливает значение.