NodeJS入门系列一之先从Javascript说起

什么是JavaScript

  • Javascript是一种动态类型、弱类型、基于原型的语言。
  • Javascript是一种脚本语言
    • 脚本语言是不需要提前编译的语言
    • 是在运行时动态的编译和解析执行的,所以也叫做动态语言
    • 还有一种语言叫作:静态语言(静态语言是需要经过编译之后才能执行),这也是它们两者的区别
  • Javascript运行在浏览器(这里暂时这样写,后面介绍了NodeJS后就知道Javascript不仅仅能运行在浏览器上
  • 暂时可以说Javascript是一种运行在浏览器中的脚本语言

JavaScript 的运行环境

  • 对于初学者可能想当然说是浏览器
  • 其实理论意义上,JavaScript是运行在浏览器中的Javascript解析引擎中,这也是后面NodeJS可以运行Javascript的原因,下面再进行详细介绍

浏览器中的 JavaScript 可以做什么

  • 从 JavaScript 语言角度来说:其实是ECMAScript 规定了 JavaScript 脚本的核心语法,如 数据类型、关键字、保留字、运算符、对象和语句等,它不属于任何浏览器。
    • ECMAScript 3(当前使用较多的其实还在这个层面,因为涉及到兼容性的问题)
    • ECMAScript 5(现在用户也逐步在慢慢增多)
    • ECMAScript 6(2015年发布,添加了很多更加方便的规范,使Jascript更加强大了)
  • DOM操作
    • DOM 是“ Document Object Model ”的缩写,简称“ 文件对象模型 ”,由W3C制定规范
    • DOM 定义了 JavaScript 操作 HTML 文档的接口,提供了访问 HTML 文档(如body、form、div、textarea等)的途径以及操作方法,浏览器载入 HTML 文档后,将整个文档规划成由节点构成的节点树,文档中每个部分都是一个节点
    • 这也是Javascript使用最为广泛的,通过DOM操作能够让浏览器渲染出各种炫酷的界面,并能完成很多业务逻辑
  • BOM操作
    • BOM 是”Browser Object Model“的缩写,简称“浏览器对象模型”
    • BOM 定义了 JavaScript 操作浏览器的接口,提供了访问某些功能(如浏览器窗口大小、版本信息、浏览历史记录等)的途径以及操作方法,其实这些接口都是通过中间层通过硬件层面开放给程序员的接口,也是得益于这些接口我们可以高效的进行开发
    • 遗憾的是,BOM 只是 ECMAScript 的一个扩展,没有任何相关标准,W3C也没有对该部分作出规范,每个浏览器厂商都有自己的 BOM 实现,这可以说是 BOM 的软肋所在,也是令很多程序要感到很烦恼的一个地方–兼容性;
  • AJAX
    • AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术
    • 通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新
    • 说到这里,也算是AJAX拯救了Javascript,因为在2005年之前Javscript经常被认为是一个很低级的脚本语言,最重要的是很多开发者都用它开发了一些烦人的广告之类的,最终导致Javascript在好几个主流浏览器上都经常被禁用,相信现在有些开发者也知道每个浏览器都有一个禁用Javascript的选项,不过这时的我们并不是真的禁用它,最多是处于调试的目的,但那时候可是真的禁用,好了,野史就先说到这….2005年对于AJAX可以说是一个重要的元年,很多重大的事件让大众对它真的是刮目相看,Google在它著名的交互应用程序中使用了异步通讯,如Google、Google地图、Google搜索等。而AJAX又是基于Javascript,所以就此Javascript又重新发展了起来。
  • 事件驱动编程
    • Javascript中的事件驱动是通过鼠标或热键的动作引发的,比如我们常见的onclick(点击)、onchange(内容改变)、onFocus(获得焦点)、onblur(失去焦点)、onload(文档加载完毕)、onselect(当text或textarea的内容被高亮显示后触发该事件)….
      还有很多事件在这里就不一一赘述了,大家只需要先知道是这样一个事件驱动原理,使我们能够实现很多交互,因为我们可以知道,每一个用户的行为很多时候是很难预测的,所以计算机不可能提前都预制好要去做些什么。计算机内部是只能识别二进制的,也就是我们所有的操作最终都会以二进制(0101)的形式返回给计算机,然后计算机再去根据指令去执行。早期则存在许多非事件驱动的程序,这样的程序,在需要等待某个条件触发时,会不断地检查这个条件,直到条件满足,这是很浪费cpu时间的。而事件驱动的程序,则有机会释放cpu从而进入睡眠态(注意是有机会,当然程序也可自行决定不释放cpu),当事件触发时被操作系统唤醒,这样就能更加有效地使用cpu了

浏览器中的 JavaScript 不可以做什么

  • 相对于 传统的 c、Java、c#、c++ 等等这些语言来说
    • 文件操作
      • 注意:JavaScript 本身不是不可以操作文件
      • 为了 安全性
    • 客户端的 JavaScript 可以向服务器发送请求,但是不能接收请求

那在开发人员能力相同的情况下编程语言的能力取决于什么

  • 最重要的区别 取决于 你的 执行环境
  • 对比一些后台语言:Java、PHP、C#、C++ 运行环境不一样
  • 编程语言的能力 真正 取决于 这个语言在哪儿运行(运行环境)

JavaScript 只可以运行在浏览器中吗

  • 这里就可以引申出上面的问题了,Javascript不仅仅只能运行在浏览器上,其实决定Javascript的关键也是它的运行环境,比如chrome中的V8引擎、Firefox中的SpideMonkey、IE的JScript、Safari的JavaScriptCore、MicrosoftEdge的 ChakraCore
  • 上面这些其实都是引擎,大家可以想象一下显示生活中的引擎,比如汽车中的发动机,也可以说是汽车的引擎,相信知道汽车的人知道发动机其实是可以更换的,也就是可移植,而这一点也是引擎最重要的特性;
  • 而NodeJS作者正是通过移植了chrome的V8引擎,使javascript可以跨平台运行了,也算是开创了Javascript的一个新纪元,让Javascript又提升了一个新的高度,接下来我们也就要进入神奇的Node世界了。