JavaScript是什么?
算起来我接触JS已有一段时间,但我一直没有搞清楚到底什么是“JS”,它为什么是面向对象的,什么是脚本语言,以及大家都为什么说它简单却又没有多少人敢说精通它?为什么?
什么是JavaScript语言
从语言角度来看
1.Javascript是一种轻量级的脚本语言
所谓脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言,用来控制软件应用程序,脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。
和系统程序设计语言相比:不同是脚本语言是被解释而系统程序设计语言是被编译。被解释的语言由于没有编译时间而提供快速的转换,通过允许用户运行时编写应用程序,而不需要耗时的编译/打包过程。解释器使应用程序更加灵活,脚本语言的代码能够被实时生成和执行。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序设计师快速完成程序的编写工作
从解释来看脚本(Script language)指的是它不具备开发操作系统的能力,而只是用来控制其他大型应用程序(比如浏览器)
2.JavaScript是一种嵌入式语言
这一点结合脚本的概念非常容易接受,正是因为它本身提供的核心语法不算很多,只能用来做一些数学和逻辑运算,且Javascript本身不提供输入输出(I/O)相关的API所以都要靠它所操控的宿主环境(host)提供API。
这样一来Javascript只适合嵌入更大型的应用程序环境,去调用宿主环境提供的底层API,最常见的宿主环境就是浏览器了,借助Node项目的出现Javascript也嵌入到了服务器环境上。
从语法角度来看
1.JavaScript是一种"对象模型"语言(面向对象语言)
对象模型也就是宿主环境通过这个模型来描述自己的功能和操作接口,从而通过Javascript来控制这些功能。
// 获取当前的页面宽度,并且把它赋给当前页面 function autoSetCanvasSize(canvas) { setCanvasSize() window.onresize = function() { setCanvasSize() } function setCanvasSize() { canvas.width = document.documentElement.clientWidth canvas.height = document.documentElement.clientHeight } }
Window 对象表示浏览器中打开的窗口,它就是一种“对象模型”来描述当前窗口具有的功能
2.JavaScript是多范式的脚本语言
它不是纯粹的面向对象语言而支持多种的编程范式,比如支持面向对象、命令式和声明式(如函数式编程)风格
导致了几乎任何一个问题JS都有多种的解决方式
3.JavaScript的核心语法
如果学习了JS的语法你会惊诧于它的简单,只包括两个部分:基本的语法构造(操作符,控制结构,语句等)和标准库(一系列具有各种功能的对象,array,Date,Math等)
通常我们的误解是数组和对象是两个不同的东西,但在JS里数组也是对象只不过是一种特殊的对象,所以这也加深我们的JS的面向对象的概念s
除此之外就是各种宿主环境提供的额外API(只能在该环境使用的接口),以便JavaSCript调用
比如浏览器的API可分为
- 浏览器控制类:操作浏览器
- DOM类:操作网页的各种元素
- Web类:实现互联网的各种功能
我现在大概知道了我上面提的哪些问题,那又为什么说JavaScript难呢?
虽然Javascript的核心语法不难,但是Javascript的复杂性体现在另外的两个方面:
- 涉及大复杂的外部API
- JavaScript语言的设计缺陷
宿主环境越复杂提供的API也就越多,现如今的前端开发已不再是学会Javascript就能独步天下的时代了,需要大量的框架,库,工具,组件的配合,而且数量十分庞大,涉及网络应用的方方面面
Javascript有一些设计的缺陷,导致某些地方相当的不合理,另一些地方则出现怪异的运行结果 typeof null却会出现"Object",学习JS很大一部分时间是为了搞清楚那些地方是有陷阱的。而TypeScript等新语言的发明目的,多少都有这个因素
关键记忆:
Javascript是一种嵌入式轻量级脚本语言,且从语法角度Javascript是不纯粹的面向对象语言,而且核心语法非常简单。但它有大量的外部API且自身设计有缺陷
(2019年2月15日初撰)
参考资料:
JavaScript高级程序设计(3.2)
浙公网安备 33010602011771号