我已经玩ES6一段时间了,我注意到虽然声明的变量var
按预期提升了......
console.log(typeof name); // undefined
var name = "John";
Run Code Online (Sandbox Code Playgroud)
... 用吊装声明let
或const
似乎有一些问题的变量:
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
?这是怎么回事?这个问题let
和const
这个问题有什么区别吗?
在这个页面中,我找到了一个新的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*
是注定的.它是什么?
我有一个扁平的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)?
在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.
我开始认为这是不可能的,但无论如何我想问.
我想测试我的一个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
是用require
s 替换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) 该组件确实有效:
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语法中的一些东西.是不是必须导出没有"默认"的标志?
使用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)
或类似的东西,理解的约定是每个文件包含一个默认导出,并且每个模块的名称与其文件相同.
这可能吗?
我正在开始一个新的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的东西?
感谢Felix Kling指出我关于同一个问题的另一个重复的stackoverflow问题/答案.
虽然对其他stackoverflow帖子的评论不是这个问题的确切答案(在我的情况下它不是一个babel插件)但它确实指出了我找到它的正确方向.
在vue-cli为你创建的脚手架中,基本webpack配置的一部分为.vue文件设置了一个别名:
这有意义,因为它为您提供了来自src文件的相对路径,并且它删除.vue
了导入路径末尾(通常需要)的要求.
谢谢您的帮助!
即我该如何表达:
function *(next) {}
Run Code Online (Sandbox Code Playgroud)
带箭头.我已经尝试了所有我能想到的组合,而且我找不到任何关于它的文档.
(目前使用节点v0.11.14)
用例很简单:我只想导入一个名称与导入对象一样的对象.
例如:
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) ecmascript-6 ×10
javascript ×8
const ×1
ecmascript-7 ×1
es6-modules ×1
export ×1
function ×1
generator ×1
hoisting ×1
import ×1
jestjs ×1
let ×1
mocking ×1
node.js ×1
typescript ×1
vue.js ×1
webpack ×1