JavaScript 历史

在上个世纪 90 年代,网景公司开发了 Navigator 浏览器,市场份额超过 90%,轰动一时

网景公司很快就发现,Navigator 浏览器需要一种可以嵌入网页执行的脚本语言,用来控制浏览器的行为

最典型的场景就是在用户填写完表单并提交时,先在浏览器端判断表单是否符合要求,再向服务器发送请求,这样就节省了服务器的带宽,在当年网速很慢的环境下,这样做也增强了用户的体验

所以说 JavaScript 一开始就是一个为了验证表单的脚本语言

于是网景公司就雇佣了程序员 Brendan Eich 开发这种脚本语言,这是学习 JavaScript 的同学需要记住的第一个程序员

当时网景公司和 Sun 公司结盟,Sun 公司当时推出的 Java 语言十分流行,于是网景就决定将这个脚本语言命名为 JavaScript,要求看上去和 Java 类似,语法要比 Java 简单

但是 Brendan Eich 就很郁闷了,他的研究方向是函数式编程,他喜欢的是 Scheme,对 Java 一点兴趣没有

为了应付公司安排的工作,他只用了 10 天就把 JavaScript 给写出来了

他的设计是这样的:

  • 语法风格是 C 系的
  • 数据类型借鉴了 Java
  • 由于 Java 使用 this,因此 JavaScript 也只好设计了 this
  • 继承机制借鉴了 Self
  • 函数借鉴了 Scheme
  • ……

JavaScript 的很多缺陷都是来自于这种矛盾,Brendan Eich 说过这样一段话:

与其说我爱 JavaScript,不如说我恨它。它是 C 语言和 Self 语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:它的优秀之处并非原创,它的原创之处并不优秀

10 天被设计出来算是 JavaScript 的一个梗了,如今还经常有人吐槽

当时谁都想象不到,在 20 年后,JavaScript 成为了互联网第一大语言

这里插一句,虽然 JS 从表面看是一个很粗糙的语言,例如undefinednull两个表示空的值,==的隐式类型转换,但其核心是很简洁的

之后网景和微软的恩怨情仇就不谈了,总之 JavaScript 成为了国际标准,其语法标准由 国际标准化组织 ECMA 制定,因此 JavaScript 的语法标准被叫做 ESMAScript,简称 ES

1997 年,ES1 发布

1998 年,ES2 发布

1999 年,ES3 发布

2001 年,微软发布了 IE6 浏览器(之前的前端工程师最恨的浏览器),这是当时最先进的浏览器,统治了浏览器市场多年,但是由于微软的自大,认为浏览器战争已经结束,便不再开发研究浏览器,导致后来被 Google 的 Chrome 浏览器超越

2008 年,V8 引擎诞生,这是 Google 为 Chrome 浏览器开发的 JS 引擎,使得 JS 的性能提升了几个台阶,如今也是最先进的JS 引擎,V8 引擎的发布是一个里程碑事件

2009 年,ES5 发布,同时 Node.js 发布(又一个里程碑事件),Node.js 出现之前可以说 JS 是一个脚本语言,因为基本上只运行在浏览器里,而 Node.js 将 JS 程序员从浏览器中解放出来,促使了后来前端的繁荣

2015 年,ES6 发布,并且改名为 ES2015,因为以后每年都要发布一个新版本,ES6 为 JavaScript 加入了大量的新特性

JavaScript 发展

JavaScript 有一句流传已久的话,是 Jeff Atwood 在 2007 年说的:

any application that can be written in JavaScript,will eventually be written in JavaScript

这句话颇有点预言成真的感觉,注意 2007 年的 JS 还远不如现在

一方面,Web 高速发展,大多数的应用都会被做成 Web App,例如:知乎,微博,Facebook,各种视频平台,各种直播平台,在我电脑上的桌面应用除了一些常见工具(视频播放,文件压缩),开发方面的软件,浏览器外,好像也只有 QQ 和 游戏了

另一方面,JavaScript 不再只运行在浏览器端,Node 让 JS 可以开发服务器端,Electron 让 JS 可以开发桌面 App,例如 VSCode,Atom,React Native 则使得可以用 JS 开发原生 App,还是跨平台的

JavaScript 如今可以说是一次学习,到处使用

这里有一篇调侃 JavaScript 发展速度的文章:https://zhuanlan.zhihu.com/p/22782487,也说明了 JS 发展之快

而从社区活跃度来说,JavaScript 目前是当之无愧的第一,下图是2017年 Github 编程语言受欢迎程度排名

JavaScript 学习路线

学习一个语言无非是学习 语言本身的语法,该语言的一些工具,框架…

HTML

  • https://imooc.com/learn/9

学习 HTML 的时候注意以下几方面:

  • 语义化

CSS

CSS 是很难精通的,知乎上有一个问题:https://www.zhihu.com/question/66167982,前几个回答都不错,建议完成基础的 CSS 学习后可以看一下

但是基础的 CSS 还是很简单的,选择器,盒模型,floatdisplaypositoin,Flex 布局这些都是要好好学习的

不过学习 CSS 的时候不要太深入了!后面还有 JS 等着你学习,CSS 只要会基本的使用就行了,并且 CSS 是那种你花费 20% 的努力可以掌握 80%,而剩下的 20% 却需要花费 80% 的努力

CSS 由于语法太简单了,满足不了大型项目的需求,很难维护,于是出现了 CSS 预编译器CSS 模块化方案

CSS 预编译器可以让你用更强大的语法写样式,之后再编译成 CSS

CSS 预编译器有 Less,Sass,Stylus 等,但只学 Sass 一个就够了

CSS 框架

如果不想自己写 CSS,就找一个 UI 框架吧,以下是 Github star 最多的几个

JavaScript

  • https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000
  • http://es6.ruanyifeng.com
  • http://javascript.ruanyifeng.com
  • https://imooc.com/learn/36
  • https://imooc.com/learn/10

互联网上 JavaScript 的文章博客应该是最多的了,想要学习哪一方面就去搜索

JavaScript 的一些库

还有很多库都是面向特定领域的,例如富文本,可视化,轮播等,需要的时候再去搜索学习

JavaScript 的工作流

以上的三个工具是 JavaScript 最重要的三个,无论什么项目,基本上都要用到这三个工具

其中 babel 和 webpack 可以放在后面学习,一开始不需要自己搭建开发环境

但是 npm 一定要早学习,npm 很简单,几个命令一会就能掌握了

npm 的官网:https://www.npmjs.com,找 JS 的库就去这

前端框架

前端有 3 大框架:

  • Vue:中国程序员 尤雨溪 开发,适合新手,容易入门
  • React:Facebook 团队开发
  • Angular:Google 团队开发

三个框架都各有特色,难以评价孰优孰劣

一开始可以选择学习 Vue,之后选择 React 和 Angular 中的一个深入学习

Vue 自称渐进式 JavaScript 框架,你一开始可以通过<script>导入的方式开发,之后可以通过vue-cli创建一个 Vue 项目

Vue 的语法对新手也更友好,在中国使用的人数最多

React 为前端带来了很多思想,例如:UI = f(state)jsx函数式编程……

React 可以自己搭建开发环境,也可以使用create-react-app这个工具,React 的社区是最繁荣的,有最多的库和教程,不过这也导致了一个选择的问题:Facebook 只给出了 React 这一个视图层的库,没有给出他们内部的方案,因此开发项目需要自己选择其他的很多东西,例如路由,状态管理,CSS 模块化方法,每一个都有那么多方案,让人很难选择,新手程序员根本不会选择,只能听那些大牛的,而那些大牛又再天天争论那个更好…,React 就不符合 Ruby on Rails 的 主厨精选 思想

创建一个 Angular 项目的方式基本上只有一种,就是通过angular-cli这个工具,Angular 很少人自己搭建开发环境,Angular 最优秀的地方在于提供了优质整合,把 Rxjs,TypeScript 等优秀的方案深入的整合在了 Angular 中,Angular 给出了所有开发需要的东西和最佳实践,用 Angular 基本上不需要引入框架层面的其他东西,Angular 把所有的都准备好了

Angular 的缺点是学习难度高,Rxjs,依赖注入,NgModule,TypeScript 等对新手都是一个个暴击,学习难度高就算了,Angular 的学习资料也比较少

Node

这是 Node 的社区,学习资源都自己找去吧:https://cnodejs.org

Node 的书籍有三本公认的比较好,但是都不太适合新手看:

  • 深入浅出 Node.js
  • Node.js 来一打 C++ 扩展,建议没有好的 Node 和 C++ 基础还是不要买了
  • Node.js 调试指南,VSCode 调试 这个章节需要看一下

Node 的 Web 开发框架

Node 的 Web 开发框架非常多,最著名的便是下面两个

  • Express:TJ 主导开发
  • Koa:TJ 主导开发,推荐!

这个 TJ 是学习 Node 的同学都需要认识的一个程序员,Node 的很多框架和库都是由 TJ 开发,任何一个用 Node 的人都肯定用过 TJ 开发库和框架,基本上今天学习一个框架是 TJ 开发,明天学习一个框架还是 TJ 开发,找一个模板引擎又是 TJ 开发,Quora 曾经有一个问题,猜测 TJ 不是一个人而是一个团队(实际上就是一个人), 这里有一个介绍:https://www.zhihu.com/question/24373004/answer/27621319

其它框架

  • Electron:使用 html,css,js 等技术开发桌面应用
  • React Native:使用 html,css,js 等技术开发移动应用
  • Ionic:使用 html,css,js 等技术开发移动应用
  • Puppeteer:无头浏览器,用于爬虫,自动化测试等
  • Gatsby:静态站点生成器
  • 微信小程序
  • ……

发表评论