JavaScript:a = Object.assign({}, a, {k: v}) 会改变 a 吗?

duh*_*ime 1 javascript side-effects mutation reactjs redux

我有一个对象作为查询参数存储为 url 中的键值对。该对象的键可能会更改,我想使用该对象中的每个键、值对来更新stateredux 应用程序中对象的键、值对。我需要以不改变state对象的方式这样做,目前我正试图实现这个目标,如下所示:

case 'LOAD_SEARCH_FROM_URL':
  let _state = Object.assign({}, state);
  const args = action.obj.substring(1).split('&');
  args.map((arg) => {
    const split = arg.split('=');
    _state = Object.assign({}, _state, {
      [split[0]]: JSON.parse( decodeURIComponent( split[1] ) )
    })
  })
  return _state;
Run Code Online (Sandbox Code Playgroud)

这在简单的测试中工作正常,但我想确保这实际上没有执行任何突变。我将不胜感激其他人可以在这个问题上提供的任何见解!

Pau*_*aul 5

不,Object.assign只会改变目标(第一个参数),在你的情况下是一个新创建的空对象。源(所有后续参数)不会被修改。