我正在尝试使用传播操作员从旧对象填充新对象,而无需复制旧对象的指针。但是新对象空了。:(
这是我的代码:
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);