Помимо логического типа, который должен быть примитивного типа, он имеет оболочку объектного типа, которая ... удивительно логическое.
В случае
Object.assign(true,{a: 1}, {b: 2})
есть такой бокс (термин отМиры Java / C # мне очень нравятся) бывает.И тогда Object.assign
работает над этой оболочкой объектного типа, как и должно.Вот почему результат выглядит в консоли как
Boolean {true, a: 1, b: 2}
Объект Boolean, как и любые другие объекты, можно расширять с помощью пользовательских ключей /ценности.Вывод выглядит запутанным, но если вы развернете это в консоли, вы увидите, что на самом деле «значения true без ключа» нет - так что это просто хитрый вывод.
Кстати, то же самое происходит со строками, когда вы пытаетесь вызватьнекоторый метод примитивного значения, такой как
'12345'.split(/./)
. Он преобразуется в объект с конструктором String()
и затем вызывает метод String.
И да, я считаю, что его никогда не следует использовать в реальной жизни.код.
Вот спецификация говорит :
- Пусть будет ToObject (target).
Так что явное преобразование примитива в объект - это самый первый шаг.