资讯专栏INFORMATION COLUMN

JavaScript使用export和import的两个报错如何解决

3403771864 / 316人阅读

  前言

  本篇文章主要为大家叙述关于JavaScript中的export和import,这两个常见的报错。

  报错:Uncaught SyntaxError: Cannot use import statement outside a module

2022070716515454.png

  上面标书的是无法在module以外使用import,在网上进行查阅之后才了解到,这是由于script标签默认是使用JavaScript语言,使用ES6的语法会发生解析错误,需要在script标签中加入type=“module”,具体如下:

  <script type="module">
  import Rotation from '../js/ui.js'
  Rotation();
  </script>

  仔细看,这样就不会出现报错吧。

  报错:Uncaught SyntaxError: The requested module ‘…/js/ui.js’ does not provide an export named ‘default’

  第一错误解决了,但随之而来的是控制台又抛出了第二个错误:

2.png

  现在我来说说我的,目标JS文件中没有default导出,因此,我的JS文件就是这样:

  function Rotation() {
  let lbt = document.querySelectorAll('.zh-lbt');
  for (let i = 0; i < lbt.length; i++) {
  let lbtNum = Number(lbt[i].getAttribute('num'))||1
  console.log(lbtNum);
  }
  }
  export {Rotation};

  常规来说没啥问题,export default和export只是暴露目标数有区别,因此不会是语法报错,是不是我的引入出现问题,随之做出下来改变

  <script type="module">
  import Rotation from '../js/ui.js'
  Rotation();
  </script>

  加了一个大括号{},修改为了

  <script type="module">
  import {Rotation} from '../js/ui.js'
  Rotation();
  </script>

  发现果然控制台没有报错,并出现了结果

3.png

  这个问题我认为其原因是export语法可以向外暴露多个目标,所以在引入时需要通过“{}”以对象经行引入,export default只能向外暴露一个,所以可以不用写{}。

  可却不是。

  在改为export default后,才发现export default在引入时,不能加{},否则会报错。

  export default{
  Rotation:function () {
  let lbt = document.querySelectorAll('.zh-lbt');
  for (let i = 0; i < lbt.length; i++) {
  let lbtNum = Number(lbt[i].getAttribute('num'))||1
  console.log(lbtNum);
  }
  }
  }
  <script type="module">
  import {Rotation} from '../js/ui.js'
  Rotation.Rotation();
  </script>

  此时控制台会报错

4.png

  同理此时只要去掉“{}”,就不会报错了,并能正确打印上面的结果。

      欢迎大家关注更多精彩内容!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130288.html

相关文章

  • ES6新特性总结 一

    1.声明变量关键字:const let JavaScript ES6中引入了另外两个声明变量关键字:constlet。在ES6中,我们将很少能看到var了。 const关键字 const声明一个只读常量。一旦声明,常量值不能被改变。const声明一个变量,就必...

    MarvinZhang 评论0 收藏0
  • Javascript ES6学习

    ECMAScript 6(以下简称ES6)是JavaScript语言下一代标准。因为当前版本ES6是在2015年发布,所以又称ECMAScript 2015。 最常用ES6特性 var,let,const区别 let, const, class, extends, super, arrow functions, template string, destructuring, default, rest arg...

    gclove 评论0 收藏0
  • 很全很全JavaScript模块讲解

    ...看……)链接地址:Front-End-Basics 此篇文章地址:JavaScript模块 基础笔记github地址:https://github.com/qiqihaobenben/Front-End-Basics ,可以watch,也可以star。 正文开始 JavaScript模块 介绍 模块通常是指编程语言所提供代码组...

    lufficc 评论0 收藏0
  • 2020年如何写一个现代JavaScript

    ...,如果对这部分内容感兴趣,可以看我之前一篇文章《JavaScript模块前世今生》 对于浏览器原生,预编译工具node,不同环境中模块化方案也不同;由于浏览器环境不能够解析第三方依赖,所以浏览器环境需要把依赖也进...

    joyqi 评论0 收藏0
  • ES6之路之模块详解

    ...点 简介 何为模块 一个模块只不过是一个写在文件中 JavaScript 代码块。 模块中函数或变量不可用,除非模块文件导出它们。 简单地说,这些模块可以帮助你在你模块中编写代码,并且只公开应该被你代码其他部分访...

    huashiou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<