传播操作员在object.sign()中不起作用



我正在尝试使用传播操作员从旧对象填充新对象,而无需复制旧对象的指针。但是新对象空了。:(

这是我的代码:

const obj = {
  a: 'a',
  b: 'b',
  c: 'c'
};
const test1 = Object.assign({}, ...obj);
const test2 = {};
console.log('obj', obj);
console.log('test1', test1);
console.log('test2', test2);

test1应该显示在控制台中,其内容与obj相同,但它是空的。

我在做什么错?是否有另一种方法,不使用Object.assign()

(也在JSBIN中都有这个。(

更新:

我尝试过:

const test = {...obj};

,但我一直在传播的第一个点上变得出乎意料的令牌。它在Jsbin中起作用,但在我的本地工作不行。因此,我认为我可能对Webpack或Babel做了一些奇怪的事情。

这是我的webpack.config.js

var path = require('path');
const DEV = process.env.NODE_ENV === 'dev';
const PROD = process.env.NODE_ENV === 'prod';
module.exports = {
    devtool: 'source-map',
    entry: './src/index.js',
    module: {
        loaders: [{
            test: /.js$/,
            loaders: ['babel-loader'],
            exclude: /node_modules/
        },{
            test: /.(png|jpg|gif)$/,
            loaders: ['url-loader'],
            exclude: /node_modules/
        },{
            test: /.(css|sass|scss)$/,
            use: ['style-loader', 'css-loader?importLoaders=2', 'sass-loader'],
            // exclude: /node_modules/
        },{
            test: /.(svg)$/,
            use: ['file-loader'],
            // exclude: /node_modules/
        },
        {
            test: /.(otf)(?.*)?$/,
            loader: 'url-loader?limit=10000&mimetype=application/font-sfnt'
        }]
    },
    output: {
        path: path.join(__dirname, 'dist'),
        publicPath: '/dist/',
        filename: 'bundle.js'
    }
}

这是我的.babelrc

{
    "presets": ["env", "react"]
}

当您传播一个对象时,您需要将其包装在对象主体中(数组也是如此(:

const test1 = Object.assign({}, {...obj});

话虽如此,我认为Object.assign与对象传播的任何好处。
您可以做:

const test1 = {...obj};

或以下:

const test1 = Object.assign({}, obj);

编辑
我应该提到的是,对象传播语法是一项建议(在第3阶段(,您需要Babel插件babel-plugin-transform-object-rest-spread来支持它。

只是做:

npm install --save-dev babel-plugin-transform-object-rest-spread

并将其添加到您的.babelrc文件中:

{
  "plugins": ["transform-object-rest-spread"]
}

在这种情况下,传播运算符未正确使用。

您只想要:Object.assign({}, obj),或者:test1 = { ...obj }。您正在做的更像Object.assign({}, obj.a, obj.b, obj.c);

最新更新