Ecmascript 6 排列运算符在对象中不起作用。分配()
我尝试使用spread操作符从旧对象填充新对象,而不复制旧对象的指针。但是新的对象出来时是空的( 这是我的密码:Ecmascript 6 排列运算符在对象中不起作用。分配(),ecmascript-6,Ecmascript 6,我尝试使用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); te
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()
(也可以将其放在一个文件夹中。)
更新:
我试过:
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"]
}
在这种情况下,排列运算符未正确使用
您只需要:
Object.assign({},obj)
,或者:test1={…obj}
。您所做的更像是Object.assign({},obj.a,obj.b,obj.c);
在这种情况下,扩展运算符没有正确使用
您只需要:
Object.assign({},obj)
,或者:test1={…obj}
。您所做的更像是Object.assign({},obj.a,obj.b,obj.c);
当您展开一个对象时,您需要将其包装在对象体中(数组也是如此):
话虽如此,我看不出将对象排列组合在一起有什么好处。你可以这样做:
const test1 = {...obj};
或者这个:
const test1 = Object.assign({}, obj);
编辑我应该提到,对象扩展语法是一种新的语法,您需要babel插件来支持它 只要做:
npm install --save-dev babel-plugin-transform-object-rest-spread
并将其添加到您的.babelrc
文件中:
{
"plugins": ["transform-object-rest-spread"]
}
展开对象时,需要将其包裹在对象体中(数组也是如此): 话虽如此,我看不出将对象排列组合在一起有什么好处。
你可以这样做:
const test1 = {...obj};
或者这个:
const test1 = Object.assign({}, obj);
编辑我应该提到,对象扩展语法是一种新的语法,您需要babel插件来支持它 只要做:
npm install --save-dev babel-plugin-transform-object-rest-spread
并将其添加到您的.babelrc
文件中:
{
"plugins": ["transform-object-rest-spread"]
}
谢谢@dmamills。它似乎在jsbin中工作,但在我的堆栈中不工作。不断得到意外的令牌。:(这是我在webpack中做的错误吗?实际上
Object.assign({},…obj)
只是一个错误,如果obj不可iterable。它不会传播(无序!)参数hanks@dmamills的对象属性。它似乎在jsbin中工作,但在我的堆栈中不工作。不断得到意外的标记。:(这是我在webpack中做的错误吗?实际上object.assign({},…obj)
只是一个错误,如果obj不可iterable。它不会传播(无序!)参数的对象属性支持问题,以反映我尝试了{…obj}
,但不断得到意外的标记。@NotriousWebmaster使用最后一个代码段。您不需要任何扩展语法(仅适用于ES6中的iterable内容!)使用Object.assign
@notriouswebmaster查看我编辑的答案。你需要一个巴别塔插件,我确信你已经有了它。@Sagivb.g我添加了babel-preset-stage-2
,它与{…obj}一起工作
.Yay!stage-2和transform object rest spread
之间有什么区别?尝试查找它,但文档不具体。我认为这是添加一系列功能与添加特定功能的问题。babel stage 2将支持目前处于stage 2及以上的大多数ES提案,其中transform object-rest spread
只会添加对此特定功能的支持。更新了问题以反映我尝试了{…obj}
,但不断得到意外的标记。@著名的网站管理员使用最后一个代码段。您不需要任何spread语法(仅适用于ES6中的iterable内容!)使用Object.assign
@notriouswebmaster查看我编辑的答案。你需要一个巴别塔插件,我确信你已经有了它。@Sagivb.g我添加了babel-preset-stage-2
,它与{…obj}一起工作
.Yay!stage-2和transform object rest spread
之间有什么区别?尝试查找它,但文档不具体。我认为这是添加一系列功能与添加特定功能的问题。babel stage 2将支持目前处于stage 2及以上的大多数ES提案,其中transform object-rest spread
只会添加对该特定功能的支持。