标签: ecmascript-next

使用扩展语法时如何根据索引更新数组元素?

将数组视为

const foo = [1, 2, 3];

现在,如果我想替换第二个元素,我可以这样做:

foo[1] = 4;或者

foo.splice(1,1,4);或者

const foo = [1, 2, 3];

console.log([...foo.slice(0, 1), 4, ...foo.slice(2)]);
// I know this creates a new array unlike the above two ways.
Run Code Online (Sandbox Code Playgroud)

但是当我们使用扩展运算符来浅复制对象时,我们可以动态地覆盖一个属性,例如:

const someObject = {
 a: 1,
 b: 2,
 c: 3
}
const propertyToChange = 'b';

const newObject = { ...someObject, [propertyToChange]: 4 };
Run Code Online (Sandbox Code Playgroud)

那么,数组有等价的吗?也许类似于下面的内容来根据索引更改元素。

const newArray = [...oldArray, [dynamicIndex]: 4 ];
Run Code Online (Sandbox Code Playgroud)

javascript arrays ecmascript-next

3
推荐指数
1
解决办法
3569
查看次数

导入/导出名称冲突解决方案

在 Node JS 中测试以下模块布局,看起来本地导出的定义总是替换外部导出的,以防名称冲突(请参阅 B.js 中的 f1)。

A.js

export const f1 = 'A'
Run Code Online (Sandbox Code Playgroud)

B.js

export * from './A.js'
export const f1 = 'B'
Run Code Online (Sandbox Code Playgroud)

C.js

import * as A from './A.js'
import * as B from './B.js'
console.log(A.f1)
console.log(B.f1)
Run Code Online (Sandbox Code Playgroud)
> node C.js
// A
// B
Run Code Online (Sandbox Code Playgroud)

这是规则吗?我还没有在 Ecmascript 规范中找到有关如何管理此问题的内容。

进出口订单重要吗?

您认为这是扩展模块重载功能和/或添加新功能的可靠方法吗?

javascript node.js ecmascript-next es6-modules

3
推荐指数
1
解决办法
845
查看次数

使async/await循环按顺序执行

我有一个看起来像这样的循环:

    newThreadIds.map(async function(id) {
      let thread = await API.getThread(id);
      await ActiveThread.findOneAndUpdate({number: id}, {posts: thread.posts}, {upsert: true}).exec();
      await Q.delay(1000);
    });
Run Code Online (Sandbox Code Playgroud)

问题是每次迭代都是异步执行的,我希望它们之间有1秒的延迟.我知道如何用promises做到这一点,但它看起来很难看,我宁愿用async/await和尽可能少的嵌套来做.

javascript node.js async-await ecmascript-next

2
推荐指数
2
解决办法
4282
查看次数

正确使用async/await与babel 6和webpack的方法

我只是想探索异步/等待.当我调用该函数时,我在控制台中得到了这个:

Promise { <state>: "pending" }
Run Code Online (Sandbox Code Playgroud)

这是我的webpack.conf.js:

var path = require("path");
var webpack = require('webpack');
var BundleTracker = require('webpack-bundle-tracker');

module.exports = {
    devtool: 'eval',
    entry: [
         'babel-regenerator-runtime',
        './static/apps/app.jsx'
    ],
    output : {
        path: __dirname,
        filename: "./static/js/bundles/[name]-[hash].js"
    },
    module: {
        loaders: [
            {
                test: /\.jsx?$/,
                loader: 'babel-loader',
                exclude: /node_modules/,
                query: {
                    plugins: [ 'transform-decorators-legacy', 'syntax-async-functions', 'transform-async-to-generator'],
                    presets: ['react', 'es2015', 'stage-0']
                }
            }
        ]
    },
    plugins: process.env.NODE_ENV === 'production' ? [
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.OccurrenceOrderPlugin(),
        new webpack.NoErrorsPlugin(),
        new webpack.optimize.UglifyJsPlugin({
        compress: { warnings: …
Run Code Online (Sandbox Code Playgroud)

async-await webpack babeljs ecmascript-next

2
推荐指数
1
解决办法
3327
查看次数

如何使ES6类成为最终(非子类)

假设我们有:

class FinalClass {
  ...
}
Run Code Online (Sandbox Code Playgroud)

如何修改它来制作

class WrongClass extends FinalClass {
  ...
}
Run Code Online (Sandbox Code Playgroud)

要么

new WrongClass(...)
Run Code Online (Sandbox Code Playgroud)

生成异常?也许最明显的解决方案是在FinalClass的构造函数中执行以下操作:

if (this.constructor !== FinalClass) {
    throw new Error('Subclassing is not allowed');
}
Run Code Online (Sandbox Code Playgroud)

有没有人有一个更清洁的解决方案,而不是在每个应该是最终的类(可能与装饰器)重复这些行?

javascript ecmascript-6 ecmascript-next

2
推荐指数
1
解决办法
1436
查看次数

扩展运算符如何在数组与obj中工作?

我正在从本教程学习Redux,但我不知道下面的扩展运算符如何在对象和数组中工作.如果...state返回相同的东西,它在两种情况下如何工作?我认为它只会返回一个数组,因此它会在内部工作,SHUTTER_VIDEO_SUCCESS因为除了它之外它只会将状态内的任何内容传播到新数组中action.videos,但是如何在这个内部工作SELECTED_VIDEO呢?没有键放置它.扩展运算符从默认initialState权限中获取数组而不是键值对?

initialState.js

export default {
  images: [],
  videos: []
};
Run Code Online (Sandbox Code Playgroud)

someComponent.js

import initialState from './initialState';
import * as types from 'constants/actionTypes';

export default function ( state = initialState.videos, action ) {
  switch (action.type) {
    case types.SELECTED_VIDEO:
      return { ...state, selectedVideo: action.video }
    case types.SHUTTER_VIDEO_SUCCESS:
      return [...state, action.videos];
    default:
      return state;
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript redux ecmascript-next

2
推荐指数
1
解决办法
7419
查看次数

Javascript:在getter中混合(对象传播)

我尝试通过扩展运算符语法在getter中创建混合到JS对象中,但它似乎总是返回null.

HTML:

<body>
  <div id="wrapperA"></div>
  <div id="wrapperB"></div>
</body>
<script src='./test.js'></script>
Run Code Online (Sandbox Code Playgroud)

JS:

"use strict";

const mixin = {
    get wrapper() { return document.getElementById(this.wrappername); }
}

const wrapperA = {
  wrappername: 'wrapperA',
  ...mixin
}

const wrapperB = {
  wrappername: 'wrapperB',
  ...mixin
}

console.log(wrapperA);
console.log(wrapperB);
Run Code Online (Sandbox Code Playgroud)

控制台输出:

{wrappername: "wrapperA", wrapper: null}
{wrappername: "wrapperB", wrapper: null}
Run Code Online (Sandbox Code Playgroud)

链接到一个应该工作的扩展函数,从我可以告诉上面的代码创建一个无意的闭包.但是,与...语法相比,它的读取效果非常差.有人知道如何让代码与后一种解决方案一起使用吗?ES开发者是否知道这个问题并将在ES7中修复?

javascript mixins getter-setter ecmascript-next

2
推荐指数
1
解决办法
1017
查看次数

在打字稿中使用传播算子

我想编写一个函数,使我返回包裹在另一个组件中的组件。我尝试编写的功能类似于下面的JavaScript。

function GetGroup({ name, text, isRequired, ...props }) 
Run Code Online (Sandbox Code Playgroud)

这里,nametext,和isRequired从传递的参数获得的和其他被送到另一个部件如props

如何用TypeScript编写它?

javascript typescript ecmascript-next

2
推荐指数
1
解决办法
5014
查看次数

es6类:如何省略"this"关键字

在ES6中,是否可以创建局部变量并直接引用它们,而不是 this.像前面那样添加它们this.name.

例如,在下面的代码中,我可以做些什么来使写入{name}而不是{this.name}所有时间.(this.在变量前添加有点麻烦!)

class User extend React.Component {
    name = "Joe";

    render() {
        // is it possible to write {name} instead of {this.name}
        return <div>{name}</div>
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 reactjs babeljs ecmascript-next

2
推荐指数
1
解决办法
469
查看次数

怎么把BigInt转换成数字?

我发现自己想将一个BigInt值转换为一个Number值。知道我的值是一个安全的整数,如何转换它?

javascript bigint ecmascript-next

2
推荐指数
2
解决办法
2702
查看次数