2016-05-19 2 views
1

До этого вопроса я предположил, что ...state, { /* ... */ } эквивалентен синтаксису es6 от Object.assign({}, state, { /* ... */ }), но я нахожу все больше и больше репозиций, используя оба этих в том же файле, поэтому я теперь немного запутался и думаю, что они служат различным целям. Я попытался найти информацию об этом в Интернете, но не смог найти четкого объяснения того, как это происходит.Разница между ... state, {} и Object.assign ({}, state, {})

Пример: https://github.com/choonkending/react-webpack-node/blob/master/app/reducers/topic.js

+0

Первый не является допустимым выражением? – Bergi

+0

Можете ли вы опубликовать ссылку на пример исходного кода, который их использует? – Bergi

+0

Это равно, просто ярлык. В этих репозиториях нет рефакторинга. Оба создают новый объект с отображением – Janom

ответ

2

Я предположил, что эквивалентно ...state, { /* ... */ } ES6 Синтаксис Object.assign({}, state, { /* ... */ })

Ваш первый синтаксис не хватает контекста. В коде вы связаны, он используется внутри массива буквального:

[...state, { /* ... */ }] 

, где он является spread element, что создает несколько элементов массива.

Все это создает массив , а не такой объект, как Object.assign({}, …).

Синтаксис распространения не может использоваться в объектных литералах (в ES6 в будущем для этого есть черновики).

+0

Так что, не было бы что-то вроде {... state,/* ... * /} эквивалентно? – Ilja

+0

@Ilja: Возможно, в ES8. В ES6 это синтаксическая ошибка. – Bergi

+0

Я вижу, спасибо за разъяснение :) – Ilja

Смежные вопросы