JavaScript之语言特性

来源:互联网 发布:2017最新网络诈骗 编辑:程序博客网 时间:2024/05/17 05:59

JavaScript之语言特性


  • JavaScript之语言特性
    • 解释性
    • 动态性弱类型
    • 单线程
    • 基于原型的面向对象语言
    • 小结


JavaScript是一门在浏览器中运行的脚本语言,最初设计这门语言是用作表单的验证,且与Java并没有什么关系。JS是一门解释性的、动态的、弱类型、单线程、基于原型的面向对象语言。

解释性

高级语言要经过“翻译”才能被机器所执行,“翻译”有编译和解释两种方式。编译是指在程序执行前将代码编译成机器语言文件,且以后运行时无需再次编译,所以编译型语言的程序执行效率高。
而解释性语言则是在程序运行时才进行“翻译”,每次执行都需要重新翻译一次,效率相对较低。

动态性、弱类型

所谓的动态类型语言,是指变量的类型需要在运行时才能确定,反之则是强类型的静态语言,如Java。由于动态性,JS代码的编写极为灵活,但JS也由于动态性而被广为诟病:debug困难、无法编译成二进制文件、性能差等问题。因此也诞生了TypeScript。

也正是因为JavaScript是弱类型、解释性的语言,所以浏览器内核在执行JS的时候存在一个重优化的过程,如图:

JavaScript的运行过程

单线程

JS是一种单线程语言,所有任务都在一个线程上完成。因此如果某段JS代码执行耗时较长会导致UI动画卡帧,甚者会使浏览器“无响应”,因为线程一直在跑JS,无暇响应用户的行为。

基于原型的面向对象语言

基于类的面向对象的语言,比如Java 和 C++,是建立在两种截然不同的实体概念上的:类和实例。JavaScript 是一个原形继承的语言,并且不会有这种区别:它只有对象。

基于类和基于原型的对象系统的比较

小结

在很多人眼里,依旧没有把JavaScript当作一门正经的编程语言,上面提到的JavaScript 特性缺点也一直为人诟病。比如知乎上有话题是这样的:
知乎话题:JavaScript的语言设计有哪些缺陷

某回复是这样的:
知乎话题回复:JavaScript的语言设计有哪些缺陷

然而,不管你承认与否,JS正在改变世界。