我尝试使用spread运算符从旧对象填充新对象,而不复制旧对象的指针。但新对象空洞。 :(
这是我的代码:
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"]
}
答案 0 :(得分:2)
展开对象时,需要将其包装在对象体内(对于数组也是如此):
const test1 = Object.assign({}, {...obj});
话虽如此,我认为组合Object.assign
与对象传播没有任何好处
你可以这么做:
const test1 = {...obj};
或者这个:
const test1 = Object.assign({}, obj);
修改强>
我应该提一下,对象扩展语法是proposal (in stage 3),你需要babel插件babel-plugin-transform-object-rest-spread
来支持它。
只是做:
npm install --save-dev babel-plugin-transform-object-rest-spread
并将其添加到.babelrc
文件中:
{
"plugins": ["transform-object-rest-spread"]
}
答案 1 :(得分:0)
在这种情况下,传播操作符未正确使用。
您只想:Object.assign({}, obj)
,或者:test1 = { ...obj }
。你在做什么更像Object.assign({}, obj.a, obj.b, obj.c);