Size: a a a

2020 July 31

DD

Dmytro Dovhan in Frontend UA
а может кто объяснить зачем так сделано?

const a = {...undefined}
a
> {}

всегда был уверен что для спреда объекта собственно нужен объект
источник

EO

Eugene Obrezkov in Frontend UA
Dmytro Dovhan
а может кто объяснить зачем так сделано?

const a = {...undefined}
a
> {}

всегда был уверен что для спреда объекта собственно нужен объект
зачем делать пустой объект через ...undefined? не знаю, не вижу в этом смысла)
источник

SG

Stas G in Frontend UA
думаю вопрос о том, почему нет ошибки в этом случае
источник

DD

Dmytro Dovhan in Frontend UA
Eugene Obrezkov
зачем делать пустой объект через ...undefined? не знаю, не вижу в этом смысла)
ну ситуация была немного другая

аля
const a = {...b}

я был уверен что если это не падает значит b всегда присуствует, окказалось что b может быть undefined, класика )
источник

SG

Stas G in Frontend UA
cудя по всему, b может быть вообще любым
источник

SG

Stas G in Frontend UA
я и сам это не держу в голове
источник

EO

Eugene Obrezkov in Frontend UA
Dmytro Dovhan
ну ситуация была немного другая

аля
const a = {...b}

я был уверен что если это не падает значит b всегда присуствует, окказалось что b может быть undefined, класика )
да, в рантайме у тебя даже ошибка может быть соответствующая по типу Destructuring что-то там undefined, не помню)
источник

EO

Eugene Obrezkov in Frontend UA
в общем, жить с предположением что b всегда есть опасно)
источник

E

Evgen in Frontend UA
Eugene Obrezkov
да, в рантайме у тебя даже ошибка может быть соответствующая по типу Destructuring что-то там undefined, не помню)
Может по спецификации должно быть исключение, но в хроме исключение не падает
источник

E

Evgen in Frontend UA
ни для undefined, ни для null
источник

EO

Eugene Obrezkov in Frontend UA
не не, {...undefined} вернёт пустой объект - ошибки не должно быть
источник

SG

Stas G in Frontend UA
и в фф не падает, наверное и по спеке не должно
источник

EO

Eugene Obrezkov in Frontend UA
это я вспомнил за другую ошибку, когда раньше писали вот эти страшные { data: {something: {foo}}}
источник

E

Evgen in Frontend UA
вот если формировать массив, то там 100% должен быть итерируемый объект
источник

RV

Roman V in Frontend UA
Dmytro Dovhan
ну ситуация была немного другая

аля
const a = {...b}

я был уверен что если это не падает значит b всегда присуствует, окказалось что b может быть undefined, класика )
Встречал такой паттерн, это должно работать с undefined и спредом в объект без ошибок, удобно опциональные дополнительные параметры разворачивать, иначе нужна была бы проверка на то что это не undefined, лишние строчки кода. Причем с массивами такое не прокатывает, будет ошибка.
источник

AS

Alexey Shvayka in Frontend UA
Dmytro Dovhan
а может кто объяснить зачем так сделано?

const a = {...undefined}
a
> {}

всегда был уверен что для спреда объекта собственно нужен объект
чтобы соответствовать семантике Object.assign
источник

DD

Dmytro Dovhan in Frontend UA
Alexey Shvayka
чтобы соответствовать семантике Object.assign
спасибо, не подумал об этом
источник

AS

Alexey Shvayka in Frontend UA
ответ автора: https://github.com/tc39/proposal-object-rest-spread/issues/59#issuecomment-356798479

nit: 100% соответствия Object.assign нет т.к. spread использует [[DefineOwnProperty]] вместо [[Set]]
источник

Вт

Ві тя in Frontend UA
Stas G
думаю вопрос о том, почему нет ошибки в этом случае
будет ошибка
источник

Вт

Ві тя in Frontend UA
Evgen
ни для undefined, ни для null
источник