import from

 

 

 

 

<think> 我们参考了上述引用内容,特别是引用[1][2][3][4][5]中关于JavaScript和TypeScript中import语法的说明。 用户要求:详细解释JavaScriptimport from语法的使用方法、规则及相关知识。 我们将按照以下结构回答: 1. import语句的基本作用 2. 不同导入方式的区别(重点): - 默认导入(import ... from ...) - 命名导入(import { ... } from ...) - 整体导入(import * as ... from ...) 3. 与export的关系(简要说明,因为用户主要问import) 4. 路径解析规则(如引用[5]提到的) 5. 注意事项 注意:引用内容中有些是TypeScript的,但用户问的是JavaScript,我们以JavaScript(ES6模块)为准,同时指出TypeScript中的常见用法(如果与JS一致则不提差异,若不同则说明是TS特性)。 由于引用内容较多,我们将整合并用自己的话表述,在关键处引用。 开始回答: </think> ### JavaScript `import from` 语法详解 #### 1. **基本作用** `import` 是 ES6 模块系统的核心语法,用于从外部文件(模块)导入功能(变量、函数、类等)。必须与 `export` 配对使用,且需在模块顶层作用域使用[^1][^4]。 #### 2. **三种核心导入方式** 以下示例均假设模块文件 `math.js` 内容如下: ```javascript // math.js export const PI = 3.14159; export function square(x) { return x * x; } export default function add(a, b) { return a + b; } ``` ##### (1) **默认导入** 导入模块的 `export default` 内容: ```javascript import add from './math.js'; // add 是任意命名 console.log(add(2, 3)); // 5 ``` - 命名自由(`add` 可替换为任意名称) - 每个模块只能有一个 `export default`[^3][^5] ##### (2) **命名导入** 导入特定的具名导出: ```javascript import { PI, square } from './math.js'; console.log(PI); // 3.14159 console.log(square(5)); // 25 ``` - 必须使用导出时的原始名称 - 支持别名:`import { PI as圆周率 } from './math.js'`[^2][^4] ##### (3) **整体导入** 导入所有导出内容到命名空间对象: ```javascript import * as MathUtils from './math.js'; console.log(MathUtils.PI); // 3.14159 console.log(MathUtils.square(3)); // 9 console.log(MathUtils.default(1, 2)); // 3(默认导出需通过.default访问) ``` #### 3. **路径解析规则** - **裸模块名**(如 `vue`):自动查找 `node_modules` 中的包 ```javascript import Vue from 'vue'; // 加载 node_modules/vue ``` - **相对路径**(`./` 或 `../`):基于当前文件位置解析 ```javascript import utils from './utils/index.js'; // 加载同级目录下的文件 ``` - **可省略扩展名**(默认补全 `.js`)[^5] #### 4. **与 `export` 的对应关系** | 导出方式 (`math.js`) | 正确导入方式 | |-----------------------------|-------------------------------------| | `export default function(){}` | `import foo from './math.js'` | | `export const PI = 3.14` | `import { PI } from './math.js'` | | `export { PI as π }` | `import { π } from './math.js'` | #### 5. **关键注意事项** 1. **严格模式**:模块自动启用严格模式(禁止未声明变量等)[^4] 2. **静态加载**:`import` 必须写在模块顶层,不能嵌套在条件语句中 3. **异步动态导入**:需用 `import()` 函数(返回 Promise): ```javascript button.addEventListener('click', async () => { const module = await import('./math.js'); console.log(module.square(4)); }); ``` #### 6. **常见错误示例** ```javascript // 错误!命名导入不能用于默认导出 import { add } from './math.js'; // 错误!默认导入不能解构 import { default as add } from './math.js'; // ✅ 正确写法应为 import add from './math.js' ``` > 提示:在 TypeScript 中,语法规则与 JavaScript 一致,但需确保类型声明正确(如 `.d.ts` 文件)[^1][^3]。 --- ### 相关问题 1. 如何在 JavaScript 中动态导入模块? 2. `export default` 和 `export const` 的主要区别是什么? 3. 如何处理循环依赖(两个模块互相导入)? 4. CommonJS 的 `require` 和 ES6 的 `import` 有何本质差异? 5. 如何为不支持 ES6 模块的旧浏览器配置兼容方案? [^1]: JavaScript 和 typeScript 中的 importfrom [^2]: import ··· from ··· 与 import { } from ··· 的区别 [^3]: js import ... fromimport {...} fromimport * as from 的区别 [^4]: JavaScript 模块化语法 import、export详解 [^5]: import Vue from 'vue' 路径解析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值