比特派钱包下载中文版|jsm

作者: 比特派钱包下载中文版
2024-03-07 19:26:14

2023 Joint Statistical Meetings - One Community: Informing Decisions and Driving Discovery

2023 Joint Statistical Meetings - One Community: Informing Decisions and Driving Discovery

toggle menu

Conference Information

Program

EXPO

Career Service

Professional Development

Be on the Program

Sponsors

Home

Follow:

 

JSM Is... One of the Largest Statistical Events in the World

“Being able to attend #JSM2022 is worth all the emails and work that’s waiting for me today! I’m so happy to have seen so many colleagues and friends in person. This govt employee looks forward to () seeing everyone in Toronto for #JSM2023. And yes, I will bring the girls

Therri Usher

More than 5,000 attendees from 52 countries

600+ sessions, including invited, topic-contributed, contributed, and poster

More than 1,000 student attendees

75+ employers hiring for more than 200 positions

100+ exhibitors

More than 40 professional development short courses and workshops

It is also one of the broadest, with topics ranging from statistical applications to methodology and theory to the expanding boundaries of statistics, such as analytics and data science.

JSM offers a unique opportunity for statisticians in academia, industry, and government to exchange ideas and explore opportunities for collaboration. Beginning statisticians (including current students) can learn from and interact with senior members of the profession.

Want to stay up to date on JSM news?

SIGN ME UP!

American Statistical Association

732 North Washington Street

Alexandria, VA 22314

(703) 684-1221

meetings@amstat.org

Follow

Copyright © American Statistical Association

Meetings, Receptions, and Other JSM Event Submissions

Press/Media | Privacy Policy | Code of Conduct | Previous

2022 Joint Statistical Meetings - Statistics: A Foundation for Innovation

2022 Joint Statistical Meetings - Statistics: A Foundation for Innovation

toggle menu

Conference Information

Program

EXPO

Career Service

Professional Development

Be on the Program

Sponsors

Home

Follow:

 

JSM Is One of the Largest Statistical Events in the World

“Today I learned both about pruning oregano plants and also about pruning neural networks. #JSM2021

Daniela Huppenkothen

More than 6,500 attendees from 52 countries

600+ sessions, including invited, topic-contributed, contributed, and poster

More than 1,000 student attendees

75+ employers hiring for more than 200 positions

100+ exhibitors

More than 40 professional development short courses and workshops

It is also one of the broadest, with topics ranging from statistical applications to methodology and theory to the expanding boundaries of statistics, such as analytics and data science.

JSM also offers a unique opportunity for statisticians in academia, industry, and government to exchange ideas and explore opportunities for collaboration. Beginning statisticians (including current students) can learn from and interact with senior members of the profession.

Want to stay up to date on JSM news?

SIGN ME UP!

American Statistical Association

732 North Washington Street

Alexandria, VA 22314

(703) 684-1221

meetings@amstat.org

Copyright © American Statistical Association

Meetings, Receptions, and Other JSM Event SubmissionsPrivacy Policy | Code of Conduct | Previous JSMs

F-35首次进行JSM隐身导弹投放试验 日本已下订单|F35|导弹|JSM_新浪军事_新浪网

F-35首次进行JSM隐身导弹投放试验 日本已下订单|F35|导弹|JSM_新浪军事_新浪网

新浪首页

新闻

体育

财经

娱乐

科技

博客

图片

专栏

更多

汽车教育时尚女性星座健康

房产历史视频收藏育儿读书

佛学游戏旅游邮箱导航

移动客户端

新浪微博

新浪新闻

新浪财经

新浪体育

新浪众测

新浪博客

新浪视频

新浪游戏

天气通

我的收藏

注册

登录

新浪军事

新浪军事 > 争鸣>正文

新闻

图片

博客

视频

F-35首次进行JSM隐身导弹投放试验 日本已下订单

F-35首次进行JSM隐身导弹投放试验 日本已下订单

2021年03月22日 17:06

军迷圈

作者:虹摄库尔斯克

缩小字体

放大字体

收藏

微博

微信

分享

0

腾讯QQ

QQ空间

  作者署名:虹摄库尔斯克

  据美国和挪威相关媒体报道,今年2月份,美国爱德华兹空军基地的F-35A(编号AF-01)隐身战斗机成功进行了首次JSM联合打击导弹的投放试验。JSM导弹是一种多用途武器,源自“海军打击导弹”(NSM),由挪威公司开发,已经在挪威皇家海军投入使用。

  美国也非常重视这种导弹,和挪威合作开发,将其用于F-35A和F-35C战斗机,因为这种导弹的尺寸能够很方便地安装在两种战斗机的内部弹仓中(F-35B垂直/短距起降战斗机因为升级发动机使弹仓变小,无法携带这种导弹),增强第五代战斗机的反水面战和对地打击能力。

  F-35A/C战斗机能够在内部携带两枚这样的导弹,还能够在机翼外部挂架上携带。

  图片:F-35A战斗机首次投放JSM联合打击导弹。

  这次试验成功后,JSM导弹将进行更多的测试,而此之前,JSM已经成功地进行了F-16、F/A-18E/F战斗机的外挂试验,也完成了F-35所有型号的外挂试验。

  值得注意的是,日本航空自卫队也为自己的F-35A战斗机选择了这种导弹,因此对我们来说,这种导弹在未来必然成为心腹大患!

  那么,这种首款能够装进F-35战斗机内部弹仓的多用途空对地巡航导弹到底是什么水平,为什么对该弹与F-35战斗机的整合需要高度关注呢?这里与大家详细分析!

  图片:JSM导弹与F-35战斗机的结合!

  JSM全称为联合打击导弹,是在挪威NSM反舰导弹基础上研制的一款对地打击导弹。

  挪威是世界上著名的反舰导弹研制国,由于其西南濒大西洋,西北临北冰洋,海岸线曲折,多峡湾和岛屿,二战中曾经历过短暂而激烈的海岸防御作战。冷战时期,挪威又长年处于北约和华约两大军事集团对抗的前沿,海防任务繁重。

  因此,挪威最大的军工企业康斯伯格防御与空间公司从上世纪60年代就开始致力于发展反舰导弹,著名的“企鹅”反舰导弹就是这家公司的得意之作。

  图片:挪威著名的“企鹅”反舰导弹。

  上世纪90年代后,挪威开始了第五代反舰导弹的研制,这款导弹被命名为“海军攻击导弹”,简称NSM。

  NSM导弹是一种先进的中型反舰巡航导弹,具有一定的对陆攻击能力,射程200千米,采用GPS+惯性与地形轮廓匹配导航相结合的制导方式,末端采用红外成像制导,具有非常精准的打击能力。这款导弹受到了美国海军的青睐,作为代替“鱼叉”反舰导弹的下一代反舰导弹来采购,目前已经配置在了美军的濒海战斗舰上。

  图片:挪威NSM反舰导弹(海军攻击导弹)。

  在NSM反舰导弹的基础上,挪威又提出了研制空射型号的设想,将其发展为一款全向、高精度、多任务型的防区外发射武器,以攻击防御严密的陆上和海上目标。

  美国人的参与让这一项目进展加速。2007年,康斯伯格公司与洛克希德·马丁公司签订了关于在空射型NSM导弹基础上为F-35战斗机研制标准反舰导弹的合同,即JSM导弹。

  为了能够装进F-35战斗机的弹仓,JSM导弹进行了大幅度改进,外形与NSM已经大相径庭。JSM导弹弹体更加细长,采用方形的隐身外形,整体重量达到375千克,弹长3.7米,折叠后的弹翼能够完全平贴在弹体上,发射后弹翼展开更加细长,表面积也有所加大。同时,进气口从导弹上部移到了两侧,进一步提升了导弹的隐身性能。

  JSM导弹射程555千米,已经超过了当今绝大多数防空导弹的射程,属于先进的防区外发射弹药,该弹可以根据执行任务的不同,配属不同的战斗部,以满足反舰、对陆攻击等不同需求。

  图片:进行改进后的JSM导弹,进气口从背部换到了两侧。

  2018年3月,一架美国F-16战斗机携带了装有杀伤战斗部的JSM导弹进行了最后一次飞行测试,也是第一次全程飞行测试,准确命中了位于犹他州靶场的模拟靶标。该导弹预计将于2021年达到初步作战能力,所有安装了Block4版本火控软件的F-35战斗机都能够携带这款导弹。

  JSM导弹除了能够装入F-35弹仓外,还能够挂在机翼下的4个挂点上,以提升导弹载弹数量。由于导弹射程较远,需要进行中继制导,因此其支持Link16战术数据链,可以实现A发射B引导的发射方式,还能够让发射方准确掌握导弹的位置,以强化导弹对目标造成的伤害评估、精准度评估等。

  除了F-35战斗机外,JSM导弹还可以整合到F-16、F/A-18、“台风”等战斗机上。有了美国的示范效应,JSM导弹将成为未来空对面打击的强劲一员,值得我们高度重视。

  图片:我们还缺少一种能够装入隐身飞机弹仓中的空对地导弹,但相必研究工作已经展开。

免责声明:以上内容为网友在新浪军事争鸣栏目上传并发布,仅代表发帖网友观点,并不代表本网赞同其观点和对其真实性负责。

关键字 :

F35导弹JSM

我要反馈

新浪军事公众号

更多猛料!欢迎扫描左方二维码关注新浪军事官方微信(sinamilnews)

热门推荐

相关新闻

加载中

点击加载更多

推荐新闻

新闻

外交部:美应展现大国应有的风度

军事

【校场】乌东会不会爆发第二次战争

财经

经营贷流入楼市 某些客户经理“睁一只...

体育

西甲-梅西2射1传 巴萨6-1力夺客场9连...

娱乐

马思纯自曝给杨紫介绍对象

科技

拼多多活跃买家数超阿里 黄峥为何撤退...

教育

沪上20余名校长专家齐聚 破解择校焦虑

阅读排行榜

01

港媒称中国上周再次发射东风41洲际导弹

02

歼20为何不开足马力量产?得知是这个原因更让人兴奋

03

中国预警机出口引入全新模式 美俄印愤怒却无可奈何

04

我军最强机型同时部署东海方向 歼20歼16数量超60架

05

轰20首飞消息满天飞之际 轰6K却做了件大事让美头疼

06

运20年产12架?一照片显示厂方获大突破局面将改变

07

欧洲隐身战机方案曝光:技术比歼20还领先半代(图)

08

盘点中国掌握的黑科技 下一代核潜艇呼之欲出

09

中国外贸火箭弹只能打200公里?一国刚试射290公里

10

中国缴获响尾蛇导弹无法仿制 最终决定如今看很明智

图片新闻

国庆假期外卖量上海最高杭州第二 简餐米粉最受欢迎

人类“看到”引力波事件

国庆假期外卖量上海最高杭州第二 简餐米粉最受欢迎

人类“看到”引力波事件

视频新闻

国庆假期外卖量上海最高杭州第二 简餐米粉最受欢迎

人类“看到”引力波事件

国庆假期外卖量上海最高杭州第二 简餐米粉最受欢迎

人类“看到”引力波事件

图片新闻

国庆假期外卖量上海最高杭州第二 简餐米粉最受欢迎

人类“看到”引力波事件

国庆假期外卖量上海最高杭州第二 简餐米粉最受欢迎

人类“看到”引力波事件

视频新闻

国庆假期外卖量上海最高杭州第二 简餐米粉最受欢迎

人类“看到”引力波事件

国庆假期外卖量上海最高杭州第二 简餐米粉最受欢迎

人类“看到”引力波事件

新浪军事意见反馈留言板

400-052-0066 欢迎批评指正

新浪简介

|

广告服务

|

About Sina

联系我们

|

招聘信息

|

通行证注册

产品答疑

|

网站律师

|

SINA English

违法和不良信息举报电话:4000520066

举报邮箱:jubao@vip.sina.com

Copyright © 1996-2021 SINA Corporation

All Rights Reserved 新浪公司 版权所有

新浪扶翼

行业专区

新浪首页

相关新闻

改版调查

返回顶部

JavaScript 模块 - JavaScript | MDN

Script 模块 - JavaScript | MDNSkip to main contentSkip to searchSkip to select languageMDN Web DocsOpen main menuReferencesReferencesOverview / Web TechnologyWeb technology reference for developersHTMLStructure of content on the webCSSCode used to describe document styleJavaScriptGeneral-purpose scripting languageHTTPProtocol for transmitting web resourcesWeb APIsInterfaces for building web applicationsWeb ExtensionsDeveloping extensions for web browsersWeb TechnologyWeb technology reference for developersGuidesGuidesOverview / MDN Learning AreaLearn web developmentMDN Learning AreaLearn web developmentHTMLLearn to structure web content with HTMLCSSLearn to style content using CSSJavaScriptLearn to run scripts in the browserAccessibilityLearn to make the web accessible to allPlusPlusOverviewA customized MDN experienceAI Help (beta)Get real-time assistance and supportUpdatesAll browser compatibility updates at a glanceDocumentationLearn how to use MDN PlusFAQFrequently asked questions about MDN PlusCurriculumNewBlogPlayAI Help BetaSearch MDNClear search inputSearchThemeLog inSign up for freeWeb 开发技术JavaScriptJavaScript 指南JavaScript 模块Article Actions中文 (简体)此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。Filter sidebarClear filter inputIn this article模块化的背景浏览器兼容性介绍一个例子基本的示例文件的结构.mjs 与 .js导出模块的功能导入功能到你的脚本应用模块到你的 HTML其他模块与标准脚本的不同默认导出 versus 命名导出避免命名冲突重命名导出与导入创建模块对象模块与类(class)合并模块动态加载模块故障排除参见

JavaScript

教程

快速入门

JavaScript 基础知识

JavaScript 第一步

构建 JavaScript 代码块

介绍 JavaScript 对象

JavaScript 指南

介绍

语法和数据类型

流程控制与错误处理

循环与迭代

函数

表达式与运算符

数字和日期

文本格式化

正则表达式

索引集合类

带键的集合

使用对象

使用类

使用 Promise

JavaScript 类型化数组

迭代器和生成器

元编程

JavaScript 模块

中级

客户端 JavaScript 框架

客户端 Web API

语言概述

JavaScript 数据结构

如何正确判断相等性

属性的可枚举性和所有权

闭包

高级

继承和原型链

内存管理

并发模型与事件循环

参考

内置对象

概述AggregateErrorArrayArrayBufferAsyncFunctionAsyncGeneratorAsyncGeneratorFunctionAsyncIteratorAtomicsBigIntBigInt64ArrayBigUint64ArrayBooleanDataViewDatedecodeURI()decodeURIComponent()encodeURI()encodeURIComponent()Errorescape()

已弃用

eval()EvalErrorFinalizationRegistryFloat32ArrayFloat64ArrayFunctionGeneratorGeneratorFunctionglobalThisInfinityInt16ArrayInt32ArrayInt8ArrayInternalError

非标准

IntlisFinite()isNaN()IteratorJSONMapMathNaNNumberObjectparseFloat()parseInt()PromiseProxyRangeErrorReferenceErrorReflectRegExpSetSharedArrayBufferStringSymbolSyntaxErrorTypedArrayTypeErrorUint16ArrayUint32ArrayUint8ArrayUint8ClampedArrayundefinedunescape()

已弃用

URIErrorWeakMapWeakRefWeakSet

表达式和运算符

概述Addition (+)Addition assignment (+=)Assignment (=)async function expressionasync function* expressionawaitBitwise AND (&)Bitwise AND assignment (&=)Bitwise NOT (~)Bitwise OR (|)Bitwise OR assignment (|=)Bitwise XOR (^)Bitwise XOR assignment (^=)class expressionComma operator (,)Conditional (ternary) operatorDecrement (--)deleteDestructuring assignmentDivision (/)Division assignment (/=)Equality (==)Exponentiation (**)Exponentiation assignment (**=)function expressionfunction* expressionGreater than (>)Greater than or equal (>=)Grouping operator ( )import.metaimport()inIncrement (++)Inequality (!=)instanceofLeft shift (<<)Left shift assignment (<<=)Less than (<)Less than or equal (<=)Logical AND (&&)Logical AND assignment (&&=)Logical NOT (!)Logical OR (||)Logical OR assignment (||=)Multiplication (*)Multiplication assignment (*=)newnew.targetnullNullish coalescing assignment (??=)Nullish coalescing operator (??)Object initializerOperator precedenceOptional chaining (?.)Property accessorsRemainder (%)Remainder assignment (%=)Right shift (>>)Right shift assignment (>>=)Spread syntax (...)Strict equality (===)Strict inequality (!==)Subtraction (-)Subtraction assignment (-=)superthistypeofUnary negation (-)Unary plus (+)Unsigned right shift (>>>)Unsigned right shift assignment (>>>=)void operatoryieldyield*

语句和声明

概述async functionasync function*Block statementbreakclassconstcontinuedebuggerdo...whileEmpty statementexportExpression statementforfor await...offor...infor...offunctionfunction*if...elseimportLabeled statementletreturnswitchthrowtry...catchvarwhilewith

已弃用

函数

概述Arrow function expressionsDefault parametersgetMethod definitionsRest parameterssetThe arguments object

概述constructorextendsPrivate propertiesPublic class fieldsstaticStatic initialization blocks

正则表达式

概述Backreference: \1, \2Capturing group: (...)Character class escape: \d, \D, \w, \W, \s, \SCharacter class: [...], [^...]Character escape: \n, \u{...}Disjunction: |Input boundary assertion: ^, $Literal character: a, bLookahead assertion: (?=...), (?!...)Lookbehind assertion: (?<=...), (?Named capturing group: (?...)Non-capturing group: (?:...)Quantifier: *, +, ?, {n}, {n,}, {n,m}Unicode character class escape: \p{...}, \P{...}Wildcard: .Word boundary assertion: \b, \B

错误

概述Error: Permission denied to access property "x"InternalError: too much recursionRangeError: argument is not a valid code pointRangeError: BigInt division by zeroRangeError: BigInt negative exponentRangeError: invalid array lengthRangeError: invalid dateRangeError: precision is out of rangeRangeError: radix must be an integerRangeError: repeat count must be less than infinityRangeError: repeat count must be non-negativeRangeError: x can't be converted to BigInt because it isn't an integerReferenceError: "x" is not definedReferenceError: assignment to undeclared variable "x"ReferenceError: can't access lexical declaration 'X' before initializationReferenceError: deprecated caller or arguments usageReferenceError: reference to undefined property "x"SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecatedSyntaxError: "use strict" not allowed in function with non-simple parametersSyntaxError: "x" is a reserved identifierSyntaxError: a declaration in the head of a for-of loop can't have an initializerSyntaxError: applying the 'delete' operator to an unqualified name is deprecatedSyntaxError: await is only valid in async functions, async generators and modulesSyntaxError: cannot use `??` unparenthesized within `||` and `&&` expressionsSyntaxError: continue must be inside loopSyntaxError: for-in loop head declarations may not have initializersSyntaxError: function statement requires a nameSyntaxError: getter and setter for private name #x should either be both static or non-staticSyntaxError: identifier starts immediately after numeric literalSyntaxError: illegal characterSyntaxError: invalid assignment left-hand sideSyntaxError: invalid BigInt syntaxSyntaxError: invalid regular expression flag "x"SyntaxError: JSON.parse: bad parsingSyntaxError: label not foundSyntaxError: missing ; before statementSyntaxError: missing : after property idSyntaxError: missing ) after argument listSyntaxError: missing ) after conditionSyntaxError: missing ] after element listSyntaxError: missing } after function bodySyntaxError: missing } after property listSyntaxError: missing = in const declarationSyntaxError: missing formal parameterSyntaxError: missing name after . operatorSyntaxError: missing variable nameSyntaxError: redeclaration of formal parameter "x"SyntaxError: return not in functionSyntaxError: test for equality (==) mistyped as assignment (=)?SyntaxError: Unexpected '#' used outside of class bodySyntaxError: Unexpected tokenSyntaxError: unlabeled break must be inside loop or switchSyntaxError: unparenthesized unary expression can't appear on the left-hand side of '**'SyntaxError: unterminated string literalSyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# insteadTypeError: 'x' is not iterableTypeError: "x" has no propertiesTypeError: "x" is (not) "y"TypeError: "x" is not a constructorTypeError: "x" is not a functionTypeError: "x" is not a non-null objectTypeError: "x" is read-onlyTypeError: can't assign to property "x" on "y": not an objectTypeError: can't convert BigInt to numberTypeError: can't convert x to BigIntTypeError: can't define property "x": "obj" is not extensibleTypeError: can't delete non-configurable array elementTypeError: can't redefine non-configurable property "x"TypeError: can't set prototype: it would cause a prototype chain cycleTypeError: cannot use 'in' operator to search for 'x' in 'y'TypeError: cyclic object valueTypeError: invalid 'instanceof' operand 'x'TypeError: invalid Array.prototype.sort argumentTypeError: invalid assignment to const "x"TypeError: More arguments neededTypeError: property "x" is non-configurable and can't be deletedTypeError: Reduce of empty array with no initial valueTypeError: setting getter-only property "x"TypeError: X.prototype.y called on incompatible typeURIError: malformed URI sequenceWarning: -file- is being assigned a //# sourceMappingURL, but already has oneWarning: unreachable code after return statement

更多

JavaScript 技术概要

词法文法

迭代协议

严格模式

模板字符串

尾后逗号

已废弃的特性

In this article模块化的背景浏览器兼容性介绍一个例子基本的示例文件的结构.mjs 与 .js导出模块的功能导入功能到你的脚本应用模块到你的 HTML其他模块与标准脚本的不同默认导出 versus 命名导出避免命名冲突重命名导出与导入创建模块对象模块与类(class)合并模块动态加载模块故障排除参见JavaScript 模块

« 上一页

这篇指南会给你入门 JavaScript 模块的全部信息。模块化的背景JavaScript 程序本来很小——在早期,它们大多被用来执行独立的脚本任务,在你的 web 页面需要的地方提供一定交互,所以一般不需要多大的脚本。过了几年,我们现在有了运行大量 JavaScript 脚本的复杂程序,还有一些被用在其他环境(例如 Node.js)。

因此,近年来,有必要开始考虑提供一种将 JavaScript 程序拆分为可按需导入的单独模块的机制。Node.js 已经提供这个能力很长时间了,还有很多的 JavaScript 库和框架已经开始了模块的使用(例如,CommonJS 和基于 AMD 的其他模块系统 如 RequireJS,以及最新的 Webpack 和 Babel)。

好消息是,最新的浏览器开始原生支持模块功能了,这是本文要重点讲述的。这会是一个好事情 —- 浏览器能够最优化加载模块,使它比使用库更有效率:使用库通常需要做额外的客户端处理。浏览器兼容性javascript.statements.importBCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.javascript.statements.exportBCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.介绍一个例子为了演示模块的使用,我们创建了一系列简单的示例 ,你可以在 GitHub 上找到。这个例子演示了一个简单的模块的集合用来在 web 页面上创建了一个 标签,在 canvas 上绘制 (并记录有关的信息) 不同形状。

这的确有点简单,但是保持足够简单能够清晰地演示模块。

备注: 如果你想去下载这个例子在本地运行,你需要通过本地 web 服务器去运行。

基本的示例文件的结构在我们的第一个例子(参见 basic-modules)文件结构如下:

index.html

main.js

modules/

canvas.js

square.js

备注: 在这个指南的全部示例项目的文件结构是基本相同的;需要熟悉上面的内容

modules 目录下的两个模块的描述如下:

canvas.js — 包含与设置画布相关的功能:

create() — 在指定 ID 的包装器

内创建指定 width 和 height 的画布,该 ID 本身附加在指定的父元素内。返回包含画布的 2D 上下文和包装器 ID 的对象。

createReportList() — 创建一个附加在指定包装器元素内的无序列表,该列表可用于将报告数据输出到。返回列表的 ID。

square.js — 包含:

name — 包含字符串 'square' 的常量。

draw() — 在指定画布上绘制一个正方形,具有指定的大小,位置和颜色。返回包含正方形大小,位置和颜色的对象。

reportArea() — 在给定长度的情况下,将正方形区域写入特定报告列表。

reportPerimeter() — 在给定长度的情况下,将正方形的周长写入特定的报告列表。

备注: 在原生 JavaScript 模块中,扩展名 .mjs 非常重要,因为使用 MIME-type 为 javascript/esm 来导入文件(其他的 JavaScript 兼容 MIME-type 像 application/javascript 也可以),它避免了严格的 MIME 类型检查错误,像 "The server responded with a non-JavaScript MIME type"。除此之外,.mjs 的扩展名很明了(比如这个就是一个模块,而不是一个传统 JavaScript 文件),还能够和其他工具互相适用。看这个 Google's note for further details。

.mjs 与 .js纵观此文,我们使用 .js 扩展名的模块文件,但在其他一些文章中,你可能会看到 .mjs 扩展名的使用。V8 推荐了这样的做法,比如有下列理由:

比较清晰,这可以指出哪些文件是模块,哪些是常规的 JavaScript。

这能保证你的模块可以被运行时环境和构建工具识别,比如 Node.js 和 Babel。

但是我们决定继续使用 .js 扩展名,未来可能会更改。为了使模块可以在浏览器中正常地工作,你需要确保你的服务器能够正常地处理 Content-Type 头,其应该包含 JavaScript 的 MIME 类型 text/javascript。如果没有这么做,你可能会得到 一个严格 MIME 类型检查错误:“The server responded with a non-JavaScript MIME type(服务器返回了非 JavaScript MIME 类型)”,并且浏览器会拒绝执行相应的 JavaScript 代码。多数服务器可以正确地处理 .js 文件的类型,但是 .mjs 还不行。已经可以正常响应 .mjs 的服务器有 GitHub 页面 和 Node.js 的 http-server。

如果你已经在使用相应的环境了,那么一切正常。或者如果你还没有,但你知道你在做什么(比如你可以配置服务器以为 .mjs 设置正确的 Content-Type)。但如果你不能控制提供服务,或者用于公开文件发布的服务器,这可能会导致混乱。

为了学习和保证代码的可移植的目的,我们建议使用 .js。

如果你认为使用 .mjs 仅用于模块带来的清晰性非常重要,但不想引入上面描述的相应问题,你可以仅在开发过程中使用 .mjs,而在构建过程中将其转换为 .js。

另注意:

一些工具不支持 .mjs,比如 TypeScript。

你导入模块功能的脚本基本是作为顶级模块。如果省略它,Firefox 就会给出错误“SyntaxError: import declarations may only appear at top level of a module。

你只能在模块内部使用 import 和export 语句;不是普通脚本文件。

备注: 你还可以将模块导入内部脚本,只要包含 type="module",例如

其他模块与标准脚本的不同

你需要注意本地测试——如果你通过本地加载 HTML 文件(比如一个 file:// 路径的文件),你将会遇到 CORS 错误,因为 JavaScript 模块安全性需要。你需要通过一个服务器来测试。

另请注意,你可能会从模块内部定义的脚本部分获得与标准脚本中不同的行为。这是因为模块自动使用严格模式。

加载一个模块脚本时不需要使用 defer 属性 (see