ES6 export default 和 import语句中的解构赋值的实例解析
- 更新时间:2020-06-14 06:46:17
- 编辑:惠冷安
参考资料
- Export Pocket to EPub / 36.57 KB / 工具 推荐度:
- MyFitnessPal Data Exporter by FOODFASTFIT / 48.73 KB / 导出器 推荐度:
- Strava, export gpx track / 40.48 KB / gpx转换 推荐度:
- 深入理解ES6 PDF 电子书 / 7.42 MB / Nicholas 推荐度:
- ES6标准入门 PDF 电子书 / 183.9 MB / 阮一峰 推荐度:
正文内容
详解ES6 export default 和 import语句中的解构赋值
解构赋值
有如下 config 对象
const config = { host: 'localhost', port: 80 }
要获取其中的 host 属性
let { host } = config
拆分成模块
以上两段代码,放到同一个文件当中不会有什么问题,但在一个项目中,config 对象多处会用到,现在把 config 对象放到 config.js 文件当中。
// config.js export default { host: 'localhost', port: 80 }
在 app.js 中 import config.js
// app.js import config from './config' let { host } = config console.log(host) // => localhost console.log(config.host) // => localhost
上面这段代码也不会有问题。但在 import 语句当中解构赋值呢?
// app.js import { host } from './config' console.log(host) // => undefined
问题所在
import { host } from './config'
这句代码,语法上是没什么问题的,之前用 antd-init 创建的项目,在项目中使用下面的代码是没问题的。奇怪的是我在之后用 vue-cli 和 create-react-app 创建的项目中使用下面的代码都不能正确获取到 host。
// config.js export default { host: 'localhost', port: 80 } // app.js import { host } from './config' console.log(host) // => undefined
babel 对 export default 的处理
我用 Google 搜 'es6 import 解构失败',找到了下面的这篇文章:ES6的模块导入与变量解构的注意事项。原来经过 webpack 和 babel 的转换
在ES6中变量解构是这样的:
const a = { b: 1 } const { b } = a
我们可以直接用解构赋值来获得对象的同名属性,等效于:
const b = a.b
除了变量的解构赋值,ES6的模块导入也提供了相似的语法:
import { resolve } from 'path'
如果使用webpack构建项目的话,注意这里的解构与普通变量的解构是有所区别的,比如在a.js里有以下代码:
export default { b: 1 }
如果按照普通变量的解构法则来导入这个包,即这种形式:
import { b } from './a'
是会发生错误的,并不能导出变量b。主要因为这和webpack的构建有关。使用模块导入时,当用webpack构建后,以上的
import { b } from './a'
变为了类似
a.default.b
可以看到变量b在a.default上,并不在a上,所以解构出来是undefined。如果要正确解构,则必须在模块内导出,即:
export const b = 1
这样的话,构建后的代码中,变量b即在a上,而不是在a.default上,从而能正确解构。
所以
export default { host: 'localhost', port: 80 }
变成了
module.exports.default = { host: 'localhost', port: 80 }
所以取不到 host 的值是正常的。那为什么 antd-init 建立的项目有可以获取到呢?
解决
再次 Google,搜到了GitHub上的讨论 。import 语句中的"解构赋值"并不是解构赋值,而是 named imports,语法上和解构赋值很像,但还是有所差别,比如下面的例子。
import { host as hostName } from './config' // 解构赋值中不能用 as let obj = { a: { b: 'hello', } } let {a: {b}} = obj // import 语句中不能这样子写 console.log(b) // => helllo
这种写法本来是不正确的,但 babel 6之前可以允许这样子的写法,babel 6之后就不能了。
// a.js import { foo, bar } from "./b" // b.js export default { foo: "foo", bar: "bar" }
所以还是在import 语句中多加一行
import b from './b' let { foo, bar } = b
或者
// a.js import { foo, bar } from "./b" // b.js let foo = "foo" let bar = "bar" export { foo, bar }
或者
// a.js import { foo, bar } from "./b" // b.js export let foo = "foo" export let bar = "bar"
而 antd-init 使用了babel-plugin-add-module-exports,所以 export default 也没问题。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。
相关教程
-
实例分析ES6新特性之变量和字符串使用方法
这篇文章主要介绍了ES6新特性之变量和字符串用法,结合具体实例形式分析了ES6中变量与字符串的特性、使用方法与相关注意事项,需要的朋友可以参考下
发布时间:2020-03-19
-
深入理解ES6中的三种异步解决方式
这篇文章主要介绍了详解ES6中的三种异步解决方案,详细的介绍了这三种方案的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
发布时间:2020-03-16
-
ES6小技巧整理
ES6出来已经有好几年了,同时很多新特性可以被巧妙地运用在项目中。我想要列下其中一些,希望它们对你有用
发布时间:2020-03-24
-
ES6中解构、参数、模块和记号用法介绍
这篇文章主要介绍了ES6新特性之解构、参数、模块和记号用法,结合实例形式分析了解构、参数、模块和记号的功能、用法及相关使用注意事项,需要的朋友可以参考下
发布时间:2019-11-04
-
ES6 Class中的super关键字知识点详解
本文给大家收藏整理了ES6 Class 中的 super 关键字,非常不错,具有参考借鉴价值,需要的朋友参考下吧
发布时间:2020-01-16
-
ES6中javascript实现函数绑定及类的事件绑定功能代码实例
这篇文章主要介绍了ES6中javascript实现函数绑定及类的事件绑定功能,结合实例形式分析了ES6中函数绑定及类的事件绑定原理、实现方法、相关操作技巧与注意事项,需要的朋友可以参考下
发布时间:2020-01-28
-
ES6 Promise对象then方法链式调用代码内容
这篇文章主要介绍了详解ES6 Promise对象then方法链式调用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
发布时间:2020-01-23
-
ES6语法重构React组件代码知识点
这篇文章主要介绍了利用ES6语法重构React组件的相关资料,文中通过示例代码介绍的很详细,对大家具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。
发布时间:2020-01-02
-
深入理解ES6
本书主要给已经熟悉JavaScript 和 ECMAScript 5 的人提供教程,特别针对的是那些想了解这门语言最新特性并在浏览器或 Node.js 里实现的中级或高级开发者
大小:7.42 MBECMAScript6电子书
-
ES6标准入门
大小:183.9 MBES6电子书
-
JavaScript DOM编程艺术
非常畅销书全新升级,首版销售量确保。 书中详细说明开发Web运用的基石W3C的DOM标准,由提倡Web标准的大神领军人物执笔用心编写,表明了前端工程师的人生真谛,是学习培训JavaScript和DOM开发
大小:109.2 MBJavaScript电子书
-
趣学Javascript:教孩子学编程
《趣学JavaScript教孩子学编程》用轻松自在的方法,根据细心的、循规蹈矩的实例,及其填满快乐的图例,协助读者轻轻松松地学习培训编程基本知识。本书共16章,从基本知识刚开始,详解了实际操作字符串数组、数组及其循环系统,随后继续学习一些高級话题讨论,如应用jQuery搭建易用性,及其应用画板制图等。这书根据专家教授撰写一些简易有意思的游戏,协助读者把握JavaScript编程。每一章都搭建于上一章的基本之中,而且各章末尾的编程挑戰可以
大小:42.7 MBJavascript电子书
-
JavaScript从入门到精通
本书是javascript高级程序的权威指南,从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用JavaScript语言进行程序开发应该掌握的各方面技术,是一本入门经典书籍
大小:92.2 MBJavaScript电子书
-
JavaScript核心技术开发解密
这本书针对JavaScript 中的核心技术,结合前沿开发实践,全面的讲解与分析JavaScript 的内存、函数、执行上下文、面向对象、模块等重点知识
大小:68.4 MBJavaScript电子书
-
完美图解物联网IoT实操:ESP8266 Arduino,Cordova物联网移动App,JavaScript微控制器编程
完美图解物联网技术系列》图书是当前物联网开发技术应用的集大成者。本书内容以Arduino和JavaScript为主线,开发物联网应用、手机App和操控微电脑
大小:60.8 MB物联网电子书
-
HTML5+CSS3+JavaScript从入门到精通
本书以基础知识、示例、实战案例相结合的方式详尽讲述了HTML,CSS,JavaScript及目前最新的前端技术
大小:186 MBweb开发电子书
-
JavaScript入门经典
本书是学习JavaScript编程的经典教程。全新的第6版涵盖了ECMAScript 6。 全书分为8个部分,共26章。首部分JavaScript基础,包括第1章到第4章,介绍了如何使用常用函数编写简单的脚本。第二部分J
大小:56.2 MBJavaScript电子书
-
JavaScript高级程序设计
《 JavaScript高級编程设计(第3版) 》是JavaScript超級畅销书的*版。ECMAScript5和HTML5在规范之战中同时获胜,使很多特有保持和手机客户端拓展宣布进到标准,另外也为JavaScript增加了许多融入发展方
大小:23 MBJS程序设计电子书