You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaScript模块import语法疑问:带大括号与无大括号导入的区别

JavaScript模块import语法疑问:带大括号与无大括号导入的区别

嗨,刚接触JavaScript模块的话,搞不懂这两种导入方式太正常了!我给你用最直白的话讲清楚,保证一听就懂:

首先你得知道,JS模块里的导出分两种核心类型——命名导出默认导出,不同的导出方式对应不同的导入写法。

1. 带大括号的import {objectName} from 'object':挑着拿「命名导出」的单个成员

如果一个模块里用export直接导出某个变量、函数或者对象(每个都有自己的专属名字),这就叫「命名导出」。比如假设object.js这个模块里写了:

// object.js 中的代码
export const userName = "MicroFarad";
export function sayHello() {
  console.log("哈喽呀!");
}

这里的userNamesayHello都是单独命名好的导出项。这时候你在别的文件里只需要用其中一个,就用大括号把它的名字括起来导入——就像从工具箱里只拿出你要用的螺丝刀,不用把整个箱子都搬回家。

比如你只需要sayHello函数,就这么写:

import { sayHello } from 'object';
sayHello(); // 直接就能调用这个函数

要是需要同时用多个,就把它们都放进大括号里用逗号隔开:import { userName, sayHello } from 'object'

划重点:这种写法不是导入整个模块,只是挑你需要的那几个命名好的部分,而且导入的名字必须和模块里导出的名字完全对应(要是想改名字,可以用as,比如import { userName as myName } from 'object',之后就可以用myName来代替userName)。

2. 不带大括号的import objectName from 'object':拿整个「默认导出」的内容

每个JS模块只能有一个默认导出,用export default来定义。比如object.js里是这样写的:

// object.js 中的代码
const fullModuleContent = {
  userName: "MicroFarad",
  sayHello: () => console.log("哈喽呀!")
};
export default fullModuleContent;

这时候fullModuleContent就是这个模块的默认导出内容。你导入的时候不用加大括号,而且可以给它随便起名字——比如你叫它myObj或者whatever都没问题:

import myObj from 'object';
myObj.sayHello(); // 调用它的函数
console.log(myObj.userName); // 访问它的属性

说白了,这种方式就是把模块里默认导出的那个“整体”直接拿过来,你想叫它啥就叫它啥,然后就能用里面的所有内容了。

快速总结

  • 带大括号的导入:对应模块里的命名导出,只能导入指定的单个/多个成员,名字需与导出时一致(可通过as重命名)
  • 不带大括号的导入:对应模块里的唯一默认导出,导入整个默认内容,名字可以自定义
  • 若要导入整个模块的所有内容:用import * as wholeModule from 'object',得到包含所有导出项的对象(一般不推荐,除非你真的需要所有内容)

备注:内容来源于stack exchange,提问作者MicroFarad

火山引擎 最新活动