将数组视为
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) 在 Node JS 中测试以下模块布局,看起来本地导出的定义总是替换外部导出的,以防名称冲突(请参阅 B.js 中的 f1)。
export const f1 = 'A'
Run Code Online (Sandbox Code Playgroud)
export * from './A.js'
export const f1 = 'B'
Run Code Online (Sandbox Code Playgroud)
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 规范中找到有关如何管理此问题的内容。
进出口订单重要吗?
您认为这是扩展模块重载功能和/或添加新功能的可靠方法吗?
我有一个看起来像这样的循环:
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和尽可能少的嵌套来做.
我只是想探索异步/等待.当我调用该函数时,我在控制台中得到了这个:
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) 假设我们有:
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)
有没有人有一个更清洁的解决方案,而不是在每个应该是最终的类(可能与装饰器)重复这些行?
我正在从本教程学习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) 我尝试通过扩展运算符语法在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。
function GetGroup({ name, text, isRequired, ...props })
Run Code Online (Sandbox Code Playgroud)
这里,name,text,和isRequired从传递的参数获得的和其他被送到另一个部件如props。
如何用TypeScript编写它?
在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) 我发现自己想将一个BigInt值转换为一个Number值。知道我的值是一个安全的整数,如何转换它?
ecmascript-next ×10
javascript ×9
async-await ×2
babeljs ×2
ecmascript-6 ×2
node.js ×2
arrays ×1
bigint ×1
es6-modules ×1
mixins ×1
reactjs ×1
redux ×1
typescript ×1
webpack ×1