为什么nodejs写的JavaScript不能直接在浏览器里面执行,这就和JavaScript起源有关系了。
JavaScript起源 → ECMAScript标准 → NodeJS语法
一 现代浏览器完全兼容 ECMAScript 5.1
截至2012年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3标准。注意es5 这个重要版本
二 JavaScript的起源
(1)1995年12月之前,Netscape公司(Brendan Eich设计)开发了Mocha脚本语言用在Navigator浏览器上,后来改名为LiveScript。其语法风格与Self及Scheme较为接近。
(2)1995年12月,Netscape管理层出于营销考虑与Sun合作,在LiveScript的基础上吸收Java因素,联合发表了JavaScript。所以,JavaScript与Java没多大关系,仅仅看起来像JAVA,Netscape的初衷是为了蹭Java的热度。微软同时期也推出了JScript来迎战JavaScript的脚本语言。
(3)1996年11月,Netscape公司将JavaScript提交给ECMA进行标准化。
(4)1997年6月,ECMA-262标准的第一个版本ECMAScript 1推出。并于1998年4月被ISO/IEC吸收,批准为ISO/IEC 16262第一版;此后ECMAScript标准会被ISO/IEC直接吸收称为标准,只是版本不同。
三 ECMAScript版本历史,重要的 es6版本
1997年6月,ECMAScript 1.0版发布。
1998年6月,ECMAScript 2.0版发布。
1999年12月,ECMAScript 3.0版发布,
2007年10月,ECMAScript 4.0版准备发布,事实上没有通过,被废弃。
2009年12月,ECMAScript 5.0版发布。
2011年6月,ECMAscript 5.1版(es5)发布,并且成为ISO国际标准(ISO/IEC 16262:2011)。
2015年6月,ECMAScript 6版(es6)发布,即ECMAScript 2015。包括ECMA-262第7版、ECMA-402第2版(之后ECMA-402几乎与ECMA-262同步更新,只是版本号不同)
2017年6月,ECMAScript 8.0。
2018年6月,ECMAScript 9.0。
2019年6月,ECMAScript 10.0
2020年6月,ECMAScript 11.0
2021年6月,ECMAScript 12.0
2022年6月,ECMAScript 13.0
2023年6月,ECMAScript 14.0
四 NodeJS语法
由于es5出现于2011年,且相对于es3升级不大,而node.js创始于2009,所以现在的node.js应该是支持es5全部特性的。各处都难以查到这个问题,似乎更说明了NodeJS支持es5全部特性。
NodeJS V8以上直到2023年的V21,对es6的特性都不是全部支持的,而是99%
NodeJS中因es5和es6存在两种模块:CJS(CommonJS )和ESM,两种模块不兼容。
五 也就是说现代浏览器全部支持 5 这个版本,而6这个版本不是全部浏览器都支持
这个原因也就导致了运行在浏览器的web应用的JavaScript只能完全识别 5版本的语法
因此nodejs写的JavaScript只能通过工具转换成5的语法。其实这个问题的本质就是JavaScript语言稀烂。
即便是typescript的出现也依旧是为了解决JavaScript这个工具的破问题,但是这不是吹嘘前端进步了,模块化的的理由。实际上正是由于JavaScript的弊端太多导致vue3推倒使用typescript(一个JavaScript超集)来实现的原因。