标签: ecmascript-6

是否在ES6中使用let或const声明变量?

我已经玩ES6一段时间了,我注意到虽然声明的变量var按预期提升了......

console.log(typeof name); // undefined
var name = "John";
Run Code Online (Sandbox Code Playgroud)

... 用吊装声明letconst似乎有一些问题的变量:

console.log(typeof name); // ReferenceError
let name = "John";
Run Code Online (Sandbox Code Playgroud)

console.log(typeof name); // ReferenceError
const name = "John";
Run Code Online (Sandbox Code Playgroud)

这是否意味着变量声明let或未声明const?这是怎么回事?这个问题letconst这个问题有什么区别吗?

javascript const let hoisting ecmascript-6

240
推荐指数
5
解决办法
5万
查看次数

什么是JavaScript中的"function*"?

这个页面中,我找到了一个新的JavaScript函数类型:

// NOTE: "function*" is not supported yet in Firefox.
// Remove the asterisk in order for this code to work in Firefox 13 

function* fibonacci() { // !!! this is the interesting line !!!
    let [prev, curr] = [0, 1];
    for (;;) {
        [prev, curr] = [curr, prev + curr];
        yield curr;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经知道了什么yield,let以及[?,?]=[?,?]做的,但不知道什么function*是注定的.它是什么?

PS不打扰尝试谷歌,用星号搜索表达式是不可能的(它们被用作占位符).

javascript function ecmascript-6

239
推荐指数
3
解决办法
4万
查看次数

克隆除一个键之外的js对象

我有一个扁平的JS对象:

{a: 1, b: 2, c: 3, ..., z:26}
Run Code Online (Sandbox Code Playgroud)

我想克隆除一个元素之外的对象:

{a: 1, c: 3, ..., z:26}
Run Code Online (Sandbox Code Playgroud)

最简单的方法是什么(如果可能,最好使用es6/7)?

javascript ecmascript-harmony ecmascript-6 ecmascript-7

237
推荐指数
16
解决办法
13万
查看次数

打字稿导出与默认导出

export和之间的Typescript有什么区别default export.在所有教程中,我看到人们在export他们的课程中,如果我default在导出之前没有添加关键字,我就无法编译我的代码.

另外,我在官方打字稿文档中找不到任何默认导出关键字的痕迹.

export class MyClass {

  collection = [1,2,3];

}
Run Code Online (Sandbox Code Playgroud)

不编译.但:

export default class MyClass {

  collection = [1,2,3];

}
Run Code Online (Sandbox Code Playgroud)

请问.

错误是: error TS1192: Module '"src/app/MyClass"' has no default export.

typescript ecmascript-6

227
推荐指数
3
解决办法
9万
查看次数

如何使用Jest模拟ES6模块导入?

我开始认为这是不可能的,但无论如何我想问.

我想测试我的一个ES6模块以特定方式调用另一个ES6模块.使用Jasmine这非常容易 -

应用代码:

// myModule.js
import dependency from './dependency';

export default (x) => {
  dependency.doSomething(x * 2);
}
Run Code Online (Sandbox Code Playgroud)

和测试代码:

//myModule-test.js
import myModule from '../myModule';
import dependency from '../dependency';

describe('myModule', () => {
  it('calls the dependency with double the input', () => {
    spyOn(dependency, 'doSomething');

    myModule(2);

    expect(dependency.doSomething).toHaveBeenCalledWith(4);
  });
});
Run Code Online (Sandbox Code Playgroud)

什么与Jest相当?我觉得这是一件非常简单的事情,但我一直在试图弄清楚我的头发.

我最接近的import是用requires 替换s,并在测试/函数内移动它们.这些都不是我想要做的事情.

// myModule.js
export default (x) => {
  const dependency = require('./dependency'); // yuck
  dependency.doSomething(x * 2);
}

//myModule-test.js
describe('myModule', () => {
  it('calls the …
Run Code Online (Sandbox Code Playgroud)

javascript mocking node.js ecmascript-6 jestjs

227
推荐指数
7
解决办法
14万
查看次数

为什么es6反应组件仅适用于"导出默认值"?

该组件确实有效:

export class Template extends React.Component {
    render() {
        return (
            <div> component </div>
        );
    }
};
export default Template;
Run Code Online (Sandbox Code Playgroud)

如果我删除最后一行,它不起作用.

Uncaught TypeError: Cannot read property 'toUpperCase' of undefined
Run Code Online (Sandbox Code Playgroud)

我想,我不明白es6语法中的一些东西.是不是必须导出没有"默认"的标志?

javascript ecmascript-6

221
推荐指数
2
解决办法
16万
查看次数

是否可以使用通配符从目录中的所有文件导入模块?

使用ES6,我可以从这样的文件中导入几个导出:

import {ThingA, ThingB, ThingC} from 'lib/things';
Run Code Online (Sandbox Code Playgroud)

但是,我喜欢每个文件有一个模块的组织.我最终得到这样的导入:

import ThingA from 'lib/things/ThingA';
import ThingB from 'lib/things/ThingB';
import ThingC from 'lib/things/ThingC';
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这一点:

import {ThingA, ThingB, ThingC} from 'lib/things/*';
Run Code Online (Sandbox Code Playgroud)

或类似的东西,理解的约定是每个文件包含一个默认导出,并且每个模块的名称与其文件相同.

这可能吗?

javascript ecmascript-6 es6-modules

220
推荐指数
6
解决办法
17万
查看次数

使用Webpack在vue.js项目中使用at('@')登录路径进行ES6导入

我正在开始一个新的vue.js项目,所以我使用vue-cli工具来构建一个新的webpack项目(即vue init webpack).

当我浏览生成的文件时,我注意到文件中有以下导入src/router/index.js:

import Vue from 'vue'
import Router from 'vue-router'
import Hello from '@/components/Hello' // <- this one is what my qusestion is about

Vue.use(Router)

export default new Router({
    routes: [
        {
            path: '/',
            name: 'Hello',
            component: Hello
        }
    ]
})
Run Code Online (Sandbox Code Playgroud)

我以前没见过@路径中的at符号().我怀疑它允许相对路径(也许?)但我想确定我理解它真正的作用.

我尝试在网上搜索,但无法找到解释(因为搜索"at sign"或使用文字字符@没有帮助作为搜索条件).

@在这条道路上做了什么(链接到文档会很棒)这是一个es6的事情?一个webpack的东西?一个vue-loader的东西?

UPDATE

感谢Felix Kling指出我关于同一个问题的另一个重复的stackoverflow问题/答案.

虽然对其他stackoverflow帖子的评论不是这个问题的确切答案(在我的情况下它不是一个babel插件)但它确实指出了我找到它的正确方向.

在vue-cli为你创建的脚手架中,基本webpack配置的一部分为.vue文件设置了一个别名:

项目中的别名位置

这有意义,因为它为您提供了来自src文件的相对路径,并且它删除.vue了导入路径末尾(通常需要)的要求.

谢谢您的帮助!

javascript ecmascript-6 webpack vue.js

211
推荐指数
3
解决办法
5万
查看次数

我可以在生成器中使用ES6的箭头函数语法吗?(箭头符号)

即我该如何表达:

function *(next) {}
Run Code Online (Sandbox Code Playgroud)

带箭头.我已经尝试了所有我能想到的组合,而且我找不到任何关于它的文档.

(目前使用节点v0.11.14)

javascript generator ecmascript-6 arrow-functions

209
推荐指数
5
解决办法
5万
查看次数

如何在ES6中导出导入的对象?

用例很简单:我只想导入一个名称与导入对象一样的对象.

例如:

import React from 'react';
export React;
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我要写:

import React from 'react';
export const React = React;
Run Code Online (Sandbox Code Playgroud)

但这很奇怪.这样做的正确方法是什么?

更新:

感谢您的帮助和参考.我用许多线索解决了我的问题.我想和我分享一些常见的案例和解决方案.

出口进口

import d, {obj} from '...';

export {obj, d};
export {obj as name1, d as name2};
Run Code Online (Sandbox Code Playgroud)

重新导出所有已命名的导入

export * from '...';
export * as name1 from '...';
Run Code Online (Sandbox Code Playgroud)

重新导出一些命名的导入

export {a, b as name1} from '...';
Run Code Online (Sandbox Code Playgroud)

将默认导入重新导出为默认导出

export {default} from '...';
Run Code Online (Sandbox Code Playgroud)

将默认导入重新导出为命名导出

export {default as name1} from '...';
Run Code Online (Sandbox Code Playgroud)

import export ecmascript-6

203
推荐指数
3
解决办法
5万
查看次数