JavaScript可用Pragma列表咨询:除use strict外还有哪些?
JavaScript中可用的Pragma完整列表
嘿,我来帮你梳理一下JavaScript里所有常见的pragma指令——确实除了use strict之外,很多人都容易忽略其他的,毕竟有些是特定场景或环境下才会用到的。
标准ECMAScript定义的Pragma
这些是官方规范明确规定的,所有符合标准的JS引擎都应该支持:
use strict:这是你已经熟悉的,ES5引入的严格模式开关。在脚本或函数开头添加'use strict';(或注释形式// use strict),会启用严格的语法检查和行为约束,比如禁止未声明的变量、不允许this指向全局对象等。use asm:ES2015(ES6)引入的asm.js相关pragma,用于声明这段代码是asm.js模块。asm.js是JavaScript的一个高性能子集,引擎可以对其做极致优化(比如提前编译成机器码)。不过现在WebAssembly(Wasm)普及后,这个pragma的使用率已经很低了。语法示例:function MyAsmModule() { 'use asm'; // 这里编写asm.js代码 }
特定引擎/运行环境特有的Pragma
这些是不同JS引擎或运行环境(比如Node.js、V8、Babel等)扩展的pragma,仅在对应环境中生效:
Node.js/V8 相关
use nodejs_strict:Node.js提供的比标准use strict更严格的模式,会额外禁用一些Node.js特有的非严格行为,比如CommonJS模块中允许的某些隐式全局变量。不过这个pragma的使用场景比较小众,大部分场景下标准use strict就足够了。use esm:用于在CommonJS格式的.js文件中启用ES模块语法(比如import/export)。在文件开头添加// use esm,Node.js会将该文件当作ES模块处理,而非默认的CommonJS。不过现在Node.js已支持通过.mjs扩展名或package.json的type字段切换模块系统,这个pragma的使用也逐渐减少。
Babel 相关
Babel允许使用pragma指定特定转换规则,常见的有:
use react:配合@babel/plugin-transform-react-jsx使用,用来指定JSX转换时使用的替代函数。比如用Preact替代React时,可以写:
这样Babel会把JSX转换成// use preact const Component = () => <div>Hello</div>;Preact.createElement而非默认的React.createElement。
TypeScript 相关
作为JS的超集,TypeScript也支持一些pragma调整编译行为:
use strict:和JS中的作用一致,启用严格模式的同时,TypeScript会开启额外的严格类型检查(比如strictNullChecks等)。use unknown:用于指定类型检查时,将未知类型变量当作unknown而非any,这是更严格的类型约束方式。不过现在更多通过tsconfig.json的strict配置开启,直接用pragma的情况不多。
注意事项
- 大部分非标准pragma都是特定环境的扩展,跨环境使用可能会被忽略或报错。
- 随着JS生态发展,很多旧pragma已被更完善的配置方式替代(比如用配置文件代替文件级pragma),使用前最好确认当前环境的支持情况。
内容的提问来源于stack exchange,提问作者Temp O'rary
相关产品推荐
相关产品推荐

