写代码啦
JavaScript的历史及其他
回复数(0) 浏览数(70)
{{topic.upvote_count || 0}} 编辑 回复

写在前面的话

这篇文章是由一个音频栏目,通过讯飞语音转文字技术转编而来,由于是口述,偏口语化,仅供测试用,作为学习笔记

讯飞的这项功能十分难用,对中英混杂的音频识别率差,文字编辑器bug多,时间长了就不响应,体验十分差,但市面上也没更好的了(又不是不能用···),必须手动整理一下错字

音频首次发布于4年前(文中的最新是指2016年),音频栏目的链接(已完结,纯免费):陪你读书(JavaScript WEB前端)冰山工作室 沙翼

如果正看《JavaScript高级程序设计(第3版)》的可以配合着听,当做工具书查索引也是不错的


以下是正文:


各位听众朋友大家好,欢迎收听由冰山工作室出品的Web前端培训教程之陪你读书。我是主播沙翼,今天这一期是我们所有培训教程当中的第1篇,所以今天我们不讲技术。今天我们和大家聊一点其他的东西,都是一些Web前端相关的一些东西,首先要和大家聊一点的,为什么我们要做这样一个教程?其实这件事情要从我的一些工作感悟当中开始说起,听起来感觉要像是从人类起源说起的意思,我们慢慢聊这个事。在这其中我也会和大家分享一些我自己亲身经历的事情,都是非常有意思。我也希望关注我们所有节目的朋友,能够在这其中重新认识一下Web前端。


下面咱们就开聊,首先说一点,为什么要做这个教程?其实作为一个技术人员来讲,尤其是一个前端的技术人员,我自己的工作经历,还有我学习的经历,可能和很多的技术人员不太一样。我的第1份工作一直到现在,从第1份工作一直到现在都是在做前端。当然其中也有一些小插曲,比如我还做过销售,但是也是和前端相关。这个里面的故事,我会在另外一个系列的节目里和大家详细去聊这个事,那么这个时候有人要说了,这没有什么不一样的,我的第1份工作到现在也都是在某个行业或者某个岗位一直做,同样的事情。不一样,为什么说不一样?


如果你是一个80后的听众,那么现在请你回忆一下,在你上大学的时候,有没有外部前端这门课程,我可以很负责任的告诉你,没有。几乎所有的计算机院系,所有的课程里面都会涉及到一些,比如C语言、C++、Java这些语言类的课程,但是没有任何一个学校开设Web前端这门课程,现在的情况我不知道,我没有详细调查过,但至少在我上大学那个时候,而且在我上大学前后的一大段时间里头,都没有这门课程,如果一定要说有关联的话,有的学校可能会开设一门叫做网页设计的课程,就是教一些网页重构这些基础的一些东西。


其实和当时的网络环境有很大的关系,倒不是因为学校的原因,这个还是互联网的一些原因,因为那个时候其实网速的提升刚刚开始,人们那个时候对网络的要求就是获取信息也没有什么别的要求,我上网为了找找信息,你只要把我想要的信息展示给我就可以了,就用现在的话说,那个时候几乎是没有什么用户体验可言的。但是而且那个时候的浏览器环境那是真乱,各种浏览器混杂在一起,遵循那个标准都不一样,其实现在你自己回想起来真的挺佩服当时网站的那批开发人员,你可以想象一下,如果现在让你去开发一个网站,如果我现在给你一个要求,就是兼容IE5或者兼容IE5.5,你真的是不敢想象,现在想起来就是一场噩梦,真是不堪回首!


所以在那个时候,网页人们获取信息的一个途径,几乎没有什么动效、交互这些东西通通都没有。大部分网站还都是表格布局,那时候还是那种网页三剑客的时代,表格布局,现在这种网站基本已经看不到了,也而且那时候网站因为没有太多的交互,对相关的前端技术人们也不是特别重视,但是随着技术的慢慢的发展,浏览器的性能提升,标准统一,人们开始慢慢的意识到我们需要一些改变,但是这个里头还有一个很重要的问题,人们开始所有的浏览者、开网站的人开始已经对互联网的认识越来越强了,网站也不仅仅是人们获取信息的一个途径,人们开始越来越重视到用户体验的一个重要性。


当一个用户去打开网站的那一瞬间,他把网页打开的那一瞬间,如果这个网站设计的不好看,布局不好,或者交互不好,用户很有可能就走掉了,你就丧失了一批客户,对吧?而且我记得大概是在08年左右的时候,苹果第1次发布了iPhone,手机,也大概从那个时候开始,用户体验这个词一下子就在互联网大火了,开始,各个网站就开始追捧用户体验,所以从那个时候开始,很多人就开始很多这种互联网公司就开始对自己的网站进行改造,让网站变得更好,然后网站的交互变得更好,把用户体验提上去。


但是你要做这些事的时候,肯定需要一些开发人员吗?你又找不到做这个东西的人,学校根本就没有这门课程,你要想从学校招人的话,这个是非常困难的,所以造成了一个很大的人员缺口,当时这些这些大的网站做前端的人,很多都是从后端开发转到前端去的。从基本就是那种专门学前端的不是特别多,反正也没有地方学,要学的话也都是自学的,所以从那个时候开始,Web前端就一下就火起来了,而且在各种大型的招聘岗位上,也开始出现了这个岗位叫Web前端这么一个岗位,以前是没有的,从那个时候就开始有了。


但是中国不是有句话叫物以稀为贵,对吧?突然出现了这么一个稀缺的物种,然后有很大的人员缺口,所以很多网站就开始招人,然后把前端的工资拉得很高,拉得很高,然后去招想招到一些好的人。但这个时候还有一个什么原因?就是Web前端它有自己的一个和其它语言很大的不一样,有它自己的一个很很独特的地方,就是这门语言看起来是非常简单的,无非就是JS、CSS、HTML这三个东西拼在一起,你可能随便的找一本书看一看,找一本教程看一看,基本一个星期的时间就可以开始上手去做网站了,然后那个时候也有很多这种书籍,什么样的书籍呢,比如30天精通html,21天精通JS这种书,几天精通xxx这种书非常多,然后这种书让你很快的就可以跟着他的教程上建一个网页,其实也不能叫网站,就是一个网页一个页面,然后可能很多人觉得自己能做一个做个页面了,专业了,就觉得自己可能能叫做前端工程师了。


我觉得这种书坑坑了很多人,但其实就是这种让你一看,然后就能全面了解到一项技能,这种书,我觉得他对当时的这些开发人员造成了很大的误解,因为他让你觉得自己很简单的就掌握了一门技术,然后自己好像完全掌握了一样。而且从我自己的经验,还有我见过的一些人,我觉得这样的人的比例还是比较大的,即使到现在这样比例还是比较大的。这就导致一个什么问题?很多互联网公司它真正的去想招聘一个真正做前端的人是非常困难的。


至少在我面试的过程当中,这种通过率非常低,不是说我对技术的要求高,而是来面试的人真的就是让大家非常无语。这个是跟大家分享一个小故事,给大家讲个故事。有一次我在一家公司,然后接到了一个面试,我要去面试一个人,面试的时候我就去和这个人去在会议室聊了一会,再聊的过程当中我就发现一件事情,是一个女生,发现一个什么事,这个人,你问他什么她好像都知道,但是你稍稍往深的一点问她就不知道了。


对吧?往深了一点问题就不知道了,人而且当时我们想招一个普通的岗位,就是普通的网页重构是要这么一个岗位,就是说白了让设计师给你让设计师的稿,然后你做成网页这么一个岗位的人,然后我说这个就不用说太多了,我们上机试一下就行了,我就问他,我说我现在给你个稿,然后你去把它做成网页可不可以?然后她非常有自信,她跟我说没问题,没有问题,我说可以,我现在就去给你找一个稿,你来做。


临出门的时候,我就回头问了她一句,当时在会议室出门的时候就回头问了她一句,我说我给你PSD还是JPG,然后她当时就说了一句让我特别震惊的话,瞪着两个眼睛瞅着我,然后问我什么是PSD,我当时真的是很无语,我说我也没说什么,我说我给你个JPG了,然后我就给他安排了一台电脑。给他安排的这台电脑是我们上机测试的一台电脑,在电脑不能联网的所有的工具软件都有,所有的工具软件,就是包括PS、Dreamweaver一些编程的工具,这些所有东西在上面都有,但是不能联网,给他安排到机器上以后,然后给了她一张JPG的搞,你就做吧,其实我也没抱太大希望,她在那摆了一会,她就叫我过去,然后问我电脑上有没有QQ,我当时就很诧异,我说你要QQ干什么?


她说我要截图,我说截图为什么要用QQ?她说你们不用QQ,我知道怎么弄了。然后我就没管她,我就站在旁边看,那时候我就看到她把windows画图工具给打开了,然后把那张图片导进去以后,然后开始在里面截。其实我这个时候已经对这个人完全放弃了,但是我还是继续的看下去,我看她在那干什么,过了一会她把这个图拿windows的截图给切出来了,切了一块图,然后她建了一个网页,建一个网页,开始把那个图往里头导,写代码的时候她是这么写的,她写了一个img的标签,而她为了把这个图导进去,它就在img标签上写了一个href,link标签和a标签的href,然后开始联那个地址怎么联都不显示,怎么联都不显示。


然后回头瞅我说你电脑有问题,你看这怎么弄都不显示,真的是没法去交流了。而且这种奇葩的人面试几个奇葩的人特别多,回头我们单独拿出来一期节目跟大家讲讲,这些是非常有意思,面试当中遇到的奇葩。而如果你在听我们节目有各种比如说遇到过的那种奇葩的这种面试的人,也可以告诉给我,然后和大家一起分享一下。其实在当时的这种网络情况下,有很多的培训学校开设了Web前端的这种培训课程,里面其实有很多的培训学校,大部分都是这种速成班,刚开始给你讲一些计算机基础知识,了解一些后端语言,然后再慢慢再讲一些前端知识,做几个案例,然后可能几个月两三个月就让你出来参加工作,但是说实话现在的这种培训学校速成类的培训学校,这种质量真的是不敢恭维,至少在我面试的过程当中,速成培训的人到我这里的通过率几乎为0,真的是几乎为0,有几个实习生我觉得不应该算在内,有些实习生有两个实习生是这种培训学校出来的。


这种培训学校出来的人有一个什么样的特性,就是说你问他什么他都知道,问他什么他都知道个大概,但是你稍微往细一点问,或者真让他做一点东西,就是什么都不会了。中国有句古话叫欲速则不达,我觉得这句话用在web前端当中真的是非常合适,你越看起来简单的东西,当你想把它用好就越是不容易,当然这个也不是说绝对的,也不能说以偏概全的,一棒子全都打死了,其实在网站网上,现在在网上,我觉得有一些培训类的课程还是比较不错的。


比如我之前看过blue做得妙味课堂,还有张鑫旭,阮一峰他们的一些博客,我个人觉得对于一些刚开始加入前端阵营的来人来说,看一些这类的教程还是比较不错的,实话实说。我也经常推荐我周围身边的人,想学前端的,从这边去开始开始学一些东西,如果此时此刻你们也在听我的节目的话,我们私下可以去交流一下,这个事扯得有点远,咱们回来继续说教程。其实当我开始和周围的人说我要做一个系列教程的时候,很多人是赞同的,但是当我说我要做一个音频教程的时候,大家都觉得不可思议,一个技术类的培训要做成一个音频的教程,怎么听都有点扯,但是看一下我们系列的标题,叫陪你读书。


随着现在互联网的发展,现在智能手机、平板已经相当普及了,几乎所有的人都有,而且所有的知识其实当你遇到一个问题的时候,所有的东西基本上你在网上搜都可以搜得到,但其实我觉得正是因为这种快速发展的节奏,互联网的这种快速发展,让很多人和纸制材料的这种距离越来越远。我相信很多人在收听我们节目的很多人可能已经很久没有认认真真的读一本书了,其实和我接触过的人都知道我带团队的时候会有一个要求,每个人都要定期的去看一些书籍,因为我觉得这样你才能把自己的基础打得很牢固,基础不牢固的话,你后面很多事情都很难做,而且前端又和其他的语言不太一样,它看起来就是特别简单,JS、CSS、HTML就这么几个东西。


大家可能看一看,就觉得自己都会了,所以遇到不会的东西上网一查,解决了就解决了,其实很可能很多人没有认认真真去思考一下,解决问题的背后还隐藏着什么样的一些原理,就是这个问题在真正的原理层的结构上,它到底是怎么解决的?所以正是因为这样,所以做前端的人有很多人他的知识体系就是完全零散的,不成体系,就有点像电影里演的这种练武功一样,你没有基础,后来所有的东西其实都不牢固。所以我们这个系列的教程就是要真正的找一本好书,带着大家认认真真的读一遍,从每一个基础的知识点开始讲,在整个的教程里面,我会和大家一起来详细的探讨,在书中哪些东西是不重要的,哪些东西是开发当中可能遇到的坑,或者面试当中可能遇到的坑,甚至包括书里哪些是对的,哪些是错的。


因为书里写的也不一定全都是对的,对吧?当然其实还有一个很重要的东西,我希望大家能够明白,当你去看一本书的时候,你除了要学习知识,除了要去丰富自己的知识体系之外,还要有一件事情你要做的,就是你的思想要跟着作者一起走,你要站在作者的角度上去想问题,你可以去比如说你遇到一个问题的时候,你要去想,你看到他给你提出来一个问题的时候,你要去想作者写这本书的时候,他是站在什么角度去思考问题的这样一种观点,所以这个系列我们要和大家阅读的是一本很多人手里都有的书,叫做JavaScript高级程序设计。


红色的那本,Nicholas.C.Zakas编写的这本书,听到这里可能很多人要说,我知道这本书,是一本入门的书,很简单。没错,确实是一本入门的书,但是是不是很简单,这个我还保留意见,如果你是一个精通JS的,我是说精通JS或者开发经验非常丰富的人,可能对于你来说这本书还真的挺简单的,但是如果你想继续了解的话,你可以继续往下听。我们后面再慢慢讲,如果你是一个对JS不是特别了解的人,或者说你觉得你的JS的整个的,不成一个完整的体系,我还是建议你好好的把书用基础类的书读一遍,我可以跟大家说一个例子,我也是道听途说,但是我不知道它的真假,那是我身边的一个朋友和我说的,我这个朋友也是在国内的一个大的互联网公司做前端的工作,哪个公司我就不说了,也是做前端的工作,他就跟我说一个问题,说来我们这面试的人,我们有一个要求,你要把JavaScript高级程序设计,也不一定指定是这一本或者说其他的一本这种比较厚的,比较成体系的这种基础类的书籍,完整整的阅读很多遍,我也忘了当时他说的是3遍还是5遍了,就是说反正要读很多遍。


然后才可以到这边去工作,而且他也跟我讲,就是说你如果自己的基础知识不牢固的话,你连基础的面试第1轮的面试就很难通过,我也很认同,所以这个时候我们就引出来一个问题,我们在做这一个系列的教程的时候,我们系列的教程究竟是面向哪些人?我觉得如果你是一个刚入门的人,或者说就像刚才说的,你觉得自己的基础知识不是成一个完整体系的话,那么我们这个系列的教程会带你完整的了解整个的前端知识。如果你是一个有一些开发经验的人,甚至说有很多开发经验的人,我也建议你可以听一下,因为这里面真的可能会有你忽略的或者不了解的东西。


如果你在我们的节目里发现有一些东西和可能有些讲的对的、讲的错的,或者想参与我们的讨论,也可以,参与到我们的节目当中,咱们一起讨论这件事情。前面已经说过了,今天是我们课程的第一讲,所以今天不打算讲技术,我们就先来了解一下JS的历史。因为我觉得如果你想了解一门语言,除了学习它的知识以外,了解它的历史也是非常重要的,而且同时由于JS这门语言,它涉及到的历史事件特别的多,很多公司组织还有开源的项目的名称都混在一起,很容易给初学者造成一些误导,所以今天我们从JS的历史开始说一下,讲一下这门历史,这门语言是怎么诞生的,同时也解释一下大家在看书或者查阅资料时所不能理解的一些内容。


说到JS很多人第一反应就是JavaScript和Java到底有什么关系?其实如果你去问一些经验丰富的程序员的话,他们很有可能告诉你这两个语言没有关系,这个也不能说不对,但是准确的说还是有很大关系的,听起来好像有点矛盾,我们慢慢讲。如果谈到JS的历史,咱们就不能提到一个很牛的公司叫Netscape,网景公司一般的资料会告诉大家,JavaScript是网景公司来提出的,1995年提出的,但是其实我们把S和网景公司放到一起说的话,我们还要提一个公司,这公司可能很多人不知道,叫Nombas,这公司在1992年的时候发布了一款语言,叫做C--,也叫CMM缩写,一听这名字大家知都知道一个类似C语言的这么一门语言,当时开发这门语言的时候是为了做一些宏(macro)操作的语言,你可以怎么简单说就是批处理操作,类似批处理操作,然后当时Nombas把这门语言捆绑在了他的一个共享软件中,而这门语言发布了以后,其实这是第1次将客户端语言亮相,在公众当中当时反应也是特别好,后来Nombas觉得C减减这个名字不好听,听起来好像很low的,感觉,现在已经C--,到这儿,有个东西叫C++是吧?


也叫C--,Nombas也发现这个事了,他们就把这门语言改了个名,改成了叫ScriptEase。而且后来Nombas又开发了可以嵌入到网页当中的版本,就是JavaScript最早的雏形,属于老祖宗的级别了,于是这就有了互联网历史上第1个可以在客户端使用的脚本语言,但是Nombas其实当时应该也想不到当时他们的这种理念,就是说让脚本语言在客户端运行,这种理念在几年以后成为互联网历史上非常重要的一部分。一说到这个问题,我就想到了一件事情,就是我总和朋友聊天说,发明电风扇的人可能做梦,他也没想到这个东西最大的用途是烤串,对吧?


大家都能看得到,满大街就那电风扇、烤串的,这发明电风扇的人肯定没想到这一点,但是这就是说说到了一件事情,我们在做很多事情的时候,不必要考虑得非常长远的,未来要做成什么样?这些东西先做出来再说,就像我们的教程一样,先出来做出来再说,1994年的时候,网景公司发布了旗下的浏览器,叫Navigator,当时发布的是0.9的版本,这个版本的浏览器是历史上公认的一个比较成熟的浏览器,当时也是轰动一时,虽然说浏览器当时受到了整个IT界的关注,但是有一个问题就是当时发布的版本的浏览器,它只能用于浏览,它没有任何和访问者交互的能力。


举个例子,就是在这款浏览器下,你去一个网站,我们比如说注册一个网站,当你把信息填完你点提交的时候,因为他没有前端的东西没有和访问者就是客户端的交互,所以你点提交的时候要把所有的信息发送到后台,然后后台来验证里面的每一个字段里面所有的东西来做校验,而且当时的网速也特别慢,那个时候都是这种拨号上网,这也不叫拨号上网了,就更早的这种版本,网速非常慢,会出现一个什么情况,你可能把一个表单填写完了,你点提交发送到后台,过了半分钟,甚至说过了一分钟后台给你返回一个,只告诉你有一个值你没填写,或者有一个有一项你填错了这种东西,然后你再重新填,现在看起来这种交互就简直不能容忍。


当时网景公司其实也发现了这个问题,也觉得这个也是一个急需解决的问题,所以网景公司就决定自己开发一款自己的脚本语言,而且给交易员起了个名字,叫livescript,想开发这么一门语言,然后他们就找了一个人,这个人就是历史上非常著名的一个人,叫布兰登爱奇。这个人,布兰登爱奇也在后来被称为JavaScript之父,网景公司找到布兰登爱奇以后,决定让他来设计一款叫做livescript的脚本语言,然后绑定在他们的Navigator2.0这款浏览器中。


当时布兰登爱奇设计语言的时候,其实很多人都可能都无法想象,只用了10天的时间,我为什么会这么短?这个里面有两件事情,第1个就是网景公司找到布兰登爱奇的时候,和他们要发布Navigator2.0中间的可开发的时间已经非常短了,只有几个月的时间,这是第一点。还有一点就是说因为那一年sun公司大家都知道,sun公司发布了Java语言,正式的把Java推向了市场,当时整个的网景公司所有的管理层都是Java语言的追随者,而且因为Java语言特别好,当时家玩有一个口号叫一次编译,处处运行,还是一次编译,随处运行,反正就这么个意思,整个Java语言在IT界特别火热,网景公司整个管理层都非常的追随Java语言,网景公司这个时候就决定和sun公司做成一个联盟,而且还有一个什么样的决定?


就是网景公司决定在Navigator2.0当中允许Java的程序直接在浏览器当中运行,是以这种小应用的程序运行,小应用的形式来运行,布兰登爱奇个人虽然是一个很厉害的开发人员,编码能力非常强,但是他对Java其实一点兴趣都没有,而且当时他收到的一个命令是让他去开发livescript的一个未来的脚本语言。而且这个语言有一个什么要求?历史上的资料的记载的原话是这么说的,就是说这门语言要看上去与Java足够的相似,但是比Java简单,使得非专业的人员也能很快的上手。


这是当时布兰德艾奇收到一个命令,你想它作为一个语言的开发者,他又不喜欢Java,然后又让他做一个和Java很相似的语言,给的时间又短,最后就造成了这么一个结果,就当时他也想反正就是一个工作,就为了应付公司的任务,所以很快的就把这门语言设计完成了。但是你可以想象10天的时候设计一门计算机语言考虑的问题肯定是不够全面,不够严谨的,这也就导致了后来很长的一段时间,用加JavaScript写出来的程序就是混乱不堪,各种各样的什么样都有。


其实不然,当然其自己可能也没有想象过自己10天设计出来这么一个语言,在几年之后,全世界有所有这么多人在学习,研究这么远。不过还好,Navigator2.0如期的发布了,当时是在1995年的时候,如期发布了这门语言,而且当时网景公司已经和SUN公司达成联盟了嘛,所以网景公司就想借助人们对Java的这种追捧来推广他的livescript这门语言。因此网景公司就在发布的之前发布的时候,把livescript改名成了JavaScript,就是JavaScript名称的由来。


那么说到这各位也可以自己去评判一下这个事,你你听到JavaScript的来源,你自己去想他到底和Java有没有关系?这个我们就不在这里讨论了,仁者见仁智者见智的事。但是这个时候JavaScript和我们现在用到的JS还不是同一个东西,为什么这么说?我们接着往下讲,95年的时候,网景公司发布了那边给他2.0,而且获得的成功也非常大,大家都觉得好,所有人都在高呼,Navigator好JS好,在这种欢呼声下,可能有个公司就坐不住了。


这是谁?就是IT界的老大,微软作为一家大公司,看到网景的成功,他心里当然很不舒服了,所以他就决定自己开发一个客户端语言。微软一直就一直干这种事,对吧?所以他就在转年的1996年发布了IE3.0,现在我们用到的IE,你可以看到已经很高的版本了。但是96年的时候发布的是IE3.0的版本,同时发布了,同时做了一件什么事,就是在3.0的版本实现了微软自己的客户端语言,这是JScript。


这是微软自己的客户端语言,这个时候问题就来了,这个时候市面上同时存在了三种客户端语言、网景的JavaScript、微软的JScript、还有我们刚开始提到的Nombas的ScriptEase三种语言,你可以想象三种语言混在一起,这个是什么情况?也有人称为是JS历史上一个三足鼎立的时期,这个是1996年的事情,所以转过来转过头来,到了97年的时候,大家就在想这个不行,对吧?各发展各的,这以后肯定就乱了,所以大家最后决定就是一起找一个中间人来做一个公共的标准,大家都一起遵循的标准,就像天龙8部一样,找个带头大哥,这带头大哥是谁?


就是欧洲计算机制造商,协会简称ECMA也叫艾克玛读音叫艾克玛,当时提交给艾克马的是以网景公司发布的JavaScript为1.0为蓝本的,当时以这为蓝本提交给了ECMA,ECMA收到蓝本以后,就找网景公司,还有微软,SUN等一些大公司,当然其中还包括一些其他的这种组织,找了一些内部他们的这些组织的程序员,然后组成了一个小组,这个小组叫做39号技术委员会,简称TC39这么一个小组共同来完成一个规范。


规范的名字叫做ECMA-262这么一个规范,在规范当中定义了一个语言的名字叫ECMAScript ,就是E C M A Script ,怎么读都行,这个才是我们现在所使用的JavaScript,你想这个时候已经出了4种语言了,对吧?前面说了三种,大家三个公司各玩各的,三种语言,然后找了一个中间人,又搞出来一种语言,叫ECMAScript ,就是国际标准的语言。但是97年的这个时候发生了一个什么事?


一个特别有意思的事,就是年初的时候,三家公司提交给了ECMAScript 1.1的版本,然后在这个版本之上做国际通用的标准,但是这个标准从街道一直到制定完成,中间不是有一个时间段吗?在这个时间段当中,网景公司发布了JavaScript的1.2的版本,并且在他的Navigator4这款浏览器上搭载了1.2的JavaScript,微软公司也在同年发布了IE 4,你看这两两个公司版本号都一样的,发布了IE4、IE 4里头实现了JS 3.0的,就是完成了JS 3.0的实现。


而且当时这两家公司都在大肆的宣扬就是自己的浏览器嘛,为了强制市场大肆渲染器,微软公司怎么说的,微软公司说自己是第1个兼容ECMAScript ,也就是介入国际标准的浏览器,然后网景公司怎么说,国际标准是在我的1.1的版本上做的规范。然后我现在已经做到1.2了,就是这么做宣传,但是你要知道一件事情,浏览器发布的时候,国际标准还没制定出来,中间因为我中间时间差,他们浏览器发布的时候,国际标准还没制定出来,这就出现一个什么情况呢?


最后国际标准制定出来以后出现的一个情况,就是网景公司发布的Navigator 4,这个浏览器就它里面实现的JavaScript的1.2和国际标准不兼容,国际标准是建立在1.1的基础上,1.2和1.1不兼容。然后历史上第1个宣称自己兼容国际标准的一个IE 4和国际标准也不兼容。这一年大家还是各玩各的,转眼到了第2年,98年的时候,有一个组织叫做国际标准化组织,简称ISO大家都知道这个组织是吧?组织也开始使用ECMAScript 标准,其实从这个时候开始,各个浏览器的生产商才开始将ECMAScript 作为自己浏览器的一个基础,然后再在这个基础上做各自的实现,这个时候才开始慢慢的统一出来了。


而在ECMAScript的标准制定了以后,也经历了几次改版,一共是5次。我们后面就说第一版、第2本、第3版、第4版、第5版这样说,这个里面的故事也非常有意思,因为刚才我们说过了吗?第一版是在JavaScript 1.1的基础上做的修改,这个时候我们要重点说一下,因为刚才我们提到了,可能细心的朋友会注意到这点,就是加JavaScript 1.2和1.1不兼容。为什么不兼容?因为ECMAScript则在上市第一版的时候制定了三个原则,第1个原则就是把所有和浏览器相关的代码全部删掉,因为这一点导致了1.1和1.2不兼容,这是最重要的一个原因。


第2个要求在ECMAScript里头要全面的支持Unicode的编码,这是为了支持日后的多语言开发。还有一个要求就是要求对象和平台无关,这3点你反过来去看特别的重要,为什么说特别重要?咱们可以因为之前我也说了,你要站在当时的人的一个角度上去考虑问题,咱们也看看当时的这些设计人员,还有这些工程师,他们是怎么思考问题的。我再重复一下这三点,第1点把和浏览器相关的代码全部删掉。第二点支持Unicode的标准。第三点要求对象和平台无关。


其实从这三点就能看出来,JavaScript在设计之初,注定不是一门客户端语言,可能很多人觉得JavaScript认为运行在浏览器当中的和HTML、CSS配合,然后实现一些各种各样的效果,各种各样的功能,其实并不是这样,JavaScript的设计之初就没有把它定义成一种只能在客户端时使用的语言。你看它在设计的时候把和浏览器相关的代码全部删掉了,而是要求对象和平台无关,其实这就是成就了JavaScript,可以在各种平台上运行,而且可以在前端后端以及其他的各种环境当中运行的一个重要的原因,现在有很多人知道现在也出了node.js了,是运行在服务端,而且在很多其实你不知道的环境里头也在使用JS比如说机顶盒,有很多机顶盒里头也在用JS对吧?


ECMAScript 1.0的版本是在JavaScript的1.1的基础上做的一些删除处理,因为他把和浏览器相关的代码全都删掉了嘛,提交给ECMA的1.1的版本,本来里面东西就不多,因为刚开始的版本你再删一删,其实就没有什么了,然后在他的第2次升级,也就是说ECMAScript的第2版本,我们现在说的第2版本里头整个的第2本没有对第一版做任何的修改,只是进行了一些整理,把这些文档规范重新整理了一遍,直到第3版的时候,其实才真正定义了JavaScript。


我们现在常用的一些东西,比如这种字符串的处理、正则、表达式的处理、异常处理,还有流程,控制语句一些处理都是在第三板中定义的,这也是你在看书的时候会发现所有的这些东西他都会告诉你,这个是在ECMA3中来定义的一些东西,I特码三定义完了以后就改第4版,第3版定义完了以后就开始定义第4版,这个时候其实如果你之前看过JS的书的话,你会发现一个问题,书里给你讲的一些属性也好,方法也好,或者一些新的知识也好,要不就是在第3版定义的,要不就是第5版定义的,你从来没看过在第4版定义的,对吧?


这是为什么当时第4版定义的时候,因为当时大家也发现了JS它的强大的功能,还有对整个浏览器人机交互这种感受的提升非常重要,所以在第4版当中加了特别多的新的特性,甚至包括新的数据结构,包括类包括继承,这种东西在第4版中完全定义,而且整个对第3版进行了大量的修改。这就导致了一件什么事?什么事情?就是第4版定义的JS几乎就是开发了一门新的语言,是完全新的语言,增加了很多东西。


当时TC39这个小组里面,因为因为毕竟你要开发一门新的语言,所以当时就出现了两种声音,1个第1种就是说继续我们做第4版,开发一门语言,就新的语言,对吧?开发一门新的语言。还有一个声音,就是说我们不做大范围的修改,我们只做小范围的修改,我们做一个3.1的版本做一个小范围的修改,后来大家因为两两种声音,你最后必须要选择一个吗?大家就投票,就是最后投票,更多的人赞成说我们不做大范围的修改,只做小范围的修改。


于是就定义了一个叫3.1的版本,3.1的版本没有发布,而且在第4版发布之前,整个前面的东西都被终止掉了,这也就是导致后来没有第4版是这么一个原因。而刚才我们说过3.1的版本也就演变成了后来的第5版本。我们现在你能使用到的一个最新版本,第5版前面说了一些JavaScript的历史,这里要格外强调了一下,就是说我们这次所要学习的JS实际上它是由三个部分组成的,刚才说到的ECMAScript就是国际标准的,只是这三个部分的其中之一,另外两个部分,一个叫DOM,一个叫BOM。


就是文档对象模型和浏览器对象模型。这两个东西我们会在后续的章节当中详细的去讨论,其中涉及到的一些历史和故事,我们也会放到后面的东西再慢慢说这个事。其实纵观JS的历史,你会发现这门语言可能并没有你想象的历史那么悠久,从国际标准制定开始,也就是从98年开始,发洪水那年到现在就十十几年的时间,对吧?也不是很长的时间,应该算是一门比较新的语言,也不知道这么说对不对?


反正时间不长。如果你想真的去系统的了解一下这门语言,或者开始学习一门语言,甚至说如果你是一个有过一些JS开发经验的想重新回过头来把整个的这个知识体系完整的梳理一遍的话,现在你就可以到书店或者去网上订购一本JavaScript的高级程序设计,就是红皮书红色皮儿的这本书,然后跟着我们节目一起来看。好了,这期节目就到这里结束,最后送给大家一句好听的歌曲,然后大家一起放松一下心情。我们下期再见。

{{topic.upvote_count || 0}}

写在前面的话

这篇文章是由一个音频栏目,通过讯飞语音转文字技术转编而来,由于是口述,偏口语化,仅供测试用,作为学习笔记

讯飞的这项功能十分难用,对中英混杂的音频识别率差,文字编辑器bug多,时间长了就不响应,体验十分差,但市面上也没更好的了(又不是不能用···),必须手动整理一下错字

音频首次发布于4年前(文中的最新是指2016年),音频栏目的链接(已完结,纯免费):陪你读书(JavaScript WEB前端)冰山工作室 沙翼

如果正看《JavaScript高级程序设计(第3版)》的可以配合着听,当做工具书查索引也是不错的


以下是正文:


各位听众朋友大家好,欢迎收听由冰山工作室出品的Web前端培训教程之陪你读书。我是主播沙翼,今天这一期是我们所有培训教程当中的第1篇,所以今天我们不讲技术。今天我们和大家聊一点其他的东西,都是一些Web前端相关的一些东西,首先要和大家聊一点的,为什么我们要做这样一个教程?其实这件事情要从我的一些工作感悟当中开始说起,听起来感觉要像是从人类起源说起的意思,我们慢慢聊这个事。在这其中我也会和大家分享一些我自己亲身经历的事情,都是非常有意思。我也希望关注我们所有节目的朋友,能够在这其中重新认识一下Web前端。


下面咱们就开聊,首先说一点,为什么要做这个教程?其实作为一个技术人员来讲,尤其是一个前端的技术人员,我自己的工作经历,还有我学习的经历,可能和很多的技术人员不太一样。我的第1份工作一直到现在,从第1份工作一直到现在都是在做前端。当然其中也有一些小插曲,比如我还做过销售,但是也是和前端相关。这个里面的故事,我会在另外一个系列的节目里和大家详细去聊这个事,那么这个时候有人要说了,这没有什么不一样的,我的第1份工作到现在也都是在某个行业或者某个岗位一直做,同样的事情。不一样,为什么说不一样?


如果你是一个80后的听众,那么现在请你回忆一下,在你上大学的时候,有没有外部前端这门课程,我可以很负责任的告诉你,没有。几乎所有的计算机院系,所有的课程里面都会涉及到一些,比如C语言、C++、Java这些语言类的课程,但是没有任何一个学校开设Web前端这门课程,现在的情况我不知道,我没有详细调查过,但至少在我上大学那个时候,而且在我上大学前后的一大段时间里头,都没有这门课程,如果一定要说有关联的话,有的学校可能会开设一门叫做网页设计的课程,就是教一些网页重构这些基础的一些东西。


其实和当时的网络环境有很大的关系,倒不是因为学校的原因,这个还是互联网的一些原因,因为那个时候其实网速的提升刚刚开始,人们那个时候对网络的要求就是获取信息也没有什么别的要求,我上网为了找找信息,你只要把我想要的信息展示给我就可以了,就用现在的话说,那个时候几乎是没有什么用户体验可言的。但是而且那个时候的浏览器环境那是真乱,各种浏览器混杂在一起,遵循那个标准都不一样,其实现在你自己回想起来真的挺佩服当时网站的那批开发人员,你可以想象一下,如果现在让你去开发一个网站,如果我现在给你一个要求,就是兼容IE5或者兼容IE5.5,你真的是不敢想象,现在想起来就是一场噩梦,真是不堪回首!


所以在那个时候,网页人们获取信息的一个途径,几乎没有什么动效、交互这些东西通通都没有。大部分网站还都是表格布局,那时候还是那种网页三剑客的时代,表格布局,现在这种网站基本已经看不到了,也而且那时候网站因为没有太多的交互,对相关的前端技术人们也不是特别重视,但是随着技术的慢慢的发展,浏览器的性能提升,标准统一,人们开始慢慢的意识到我们需要一些改变,但是这个里头还有一个很重要的问题,人们开始所有的浏览者、开网站的人开始已经对互联网的认识越来越强了,网站也不仅仅是人们获取信息的一个途径,人们开始越来越重视到用户体验的一个重要性。


当一个用户去打开网站的那一瞬间,他把网页打开的那一瞬间,如果这个网站设计的不好看,布局不好,或者交互不好,用户很有可能就走掉了,你就丧失了一批客户,对吧?而且我记得大概是在08年左右的时候,苹果第1次发布了iPhone,手机,也大概从那个时候开始,用户体验这个词一下子就在互联网大火了,开始,各个网站就开始追捧用户体验,所以从那个时候开始,很多人就开始很多这种互联网公司就开始对自己的网站进行改造,让网站变得更好,然后网站的交互变得更好,把用户体验提上去。


但是你要做这些事的时候,肯定需要一些开发人员吗?你又找不到做这个东西的人,学校根本就没有这门课程,你要想从学校招人的话,这个是非常困难的,所以造成了一个很大的人员缺口,当时这些这些大的网站做前端的人,很多都是从后端开发转到前端去的。从基本就是那种专门学前端的不是特别多,反正也没有地方学,要学的话也都是自学的,所以从那个时候开始,Web前端就一下就火起来了,而且在各种大型的招聘岗位上,也开始出现了这个岗位叫Web前端这么一个岗位,以前是没有的,从那个时候就开始有了。


但是中国不是有句话叫物以稀为贵,对吧?突然出现了这么一个稀缺的物种,然后有很大的人员缺口,所以很多网站就开始招人,然后把前端的工资拉得很高,拉得很高,然后去招想招到一些好的人。但这个时候还有一个什么原因?就是Web前端它有自己的一个和其它语言很大的不一样,有它自己的一个很很独特的地方,就是这门语言看起来是非常简单的,无非就是JS、CSS、HTML这三个东西拼在一起,你可能随便的找一本书看一看,找一本教程看一看,基本一个星期的时间就可以开始上手去做网站了,然后那个时候也有很多这种书籍,什么样的书籍呢,比如30天精通html,21天精通JS这种书,几天精通xxx这种书非常多,然后这种书让你很快的就可以跟着他的教程上建一个网页,其实也不能叫网站,就是一个网页一个页面,然后可能很多人觉得自己能做一个做个页面了,专业了,就觉得自己可能能叫做前端工程师了。


我觉得这种书坑坑了很多人,但其实就是这种让你一看,然后就能全面了解到一项技能,这种书,我觉得他对当时的这些开发人员造成了很大的误解,因为他让你觉得自己很简单的就掌握了一门技术,然后自己好像完全掌握了一样。而且从我自己的经验,还有我见过的一些人,我觉得这样的人的比例还是比较大的,即使到现在这样比例还是比较大的。这就导致一个什么问题?很多互联网公司它真正的去想招聘一个真正做前端的人是非常困难的。


至少在我面试的过程当中,这种通过率非常低,不是说我对技术的要求高,而是来面试的人真的就是让大家非常无语。这个是跟大家分享一个小故事,给大家讲个故事。有一次我在一家公司,然后接到了一个面试,我要去面试一个人,面试的时候我就去和这个人去在会议室聊了一会,再聊的过程当中我就发现一件事情,是一个女生,发现一个什么事,这个人,你问他什么她好像都知道,但是你稍稍往深的一点问她就不知道了。


对吧?往深了一点问题就不知道了,人而且当时我们想招一个普通的岗位,就是普通的网页重构是要这么一个岗位,就是说白了让设计师给你让设计师的稿,然后你做成网页这么一个岗位的人,然后我说这个就不用说太多了,我们上机试一下就行了,我就问他,我说我现在给你个稿,然后你去把它做成网页可不可以?然后她非常有自信,她跟我说没问题,没有问题,我说可以,我现在就去给你找一个稿,你来做。


临出门的时候,我就回头问了她一句,当时在会议室出门的时候就回头问了她一句,我说我给你PSD还是JPG,然后她当时就说了一句让我特别震惊的话,瞪着两个眼睛瞅着我,然后问我什么是PSD,我当时真的是很无语,我说我也没说什么,我说我给你个JPG了,然后我就给他安排了一台电脑。给他安排的这台电脑是我们上机测试的一台电脑,在电脑不能联网的所有的工具软件都有,所有的工具软件,就是包括PS、Dreamweaver一些编程的工具,这些所有东西在上面都有,但是不能联网,给他安排到机器上以后,然后给了她一张JPG的搞,你就做吧,其实我也没抱太大希望,她在那摆了一会,她就叫我过去,然后问我电脑上有没有QQ,我当时就很诧异,我说你要QQ干什么?


她说我要截图,我说截图为什么要用QQ?她说你们不用QQ,我知道怎么弄了。然后我就没管她,我就站在旁边看,那时候我就看到她把windows画图工具给打开了,然后把那张图片导进去以后,然后开始在里面截。其实我这个时候已经对这个人完全放弃了,但是我还是继续的看下去,我看她在那干什么,过了一会她把这个图拿windows的截图给切出来了,切了一块图,然后她建了一个网页,建一个网页,开始把那个图往里头导,写代码的时候她是这么写的,她写了一个img的标签,而她为了把这个图导进去,它就在img标签上写了一个href,link标签和a标签的href,然后开始联那个地址怎么联都不显示,怎么联都不显示。


然后回头瞅我说你电脑有问题,你看这怎么弄都不显示,真的是没法去交流了。而且这种奇葩的人面试几个奇葩的人特别多,回头我们单独拿出来一期节目跟大家讲讲,这些是非常有意思,面试当中遇到的奇葩。而如果你在听我们节目有各种比如说遇到过的那种奇葩的这种面试的人,也可以告诉给我,然后和大家一起分享一下。其实在当时的这种网络情况下,有很多的培训学校开设了Web前端的这种培训课程,里面其实有很多的培训学校,大部分都是这种速成班,刚开始给你讲一些计算机基础知识,了解一些后端语言,然后再慢慢再讲一些前端知识,做几个案例,然后可能几个月两三个月就让你出来参加工作,但是说实话现在的这种培训学校速成类的培训学校,这种质量真的是不敢恭维,至少在我面试的过程当中,速成培训的人到我这里的通过率几乎为0,真的是几乎为0,有几个实习生我觉得不应该算在内,有些实习生有两个实习生是这种培训学校出来的。


这种培训学校出来的人有一个什么样的特性,就是说你问他什么他都知道,问他什么他都知道个大概,但是你稍微往细一点问,或者真让他做一点东西,就是什么都不会了。中国有句古话叫欲速则不达,我觉得这句话用在web前端当中真的是非常合适,你越看起来简单的东西,当你想把它用好就越是不容易,当然这个也不是说绝对的,也不能说以偏概全的,一棒子全都打死了,其实在网站网上,现在在网上,我觉得有一些培训类的课程还是比较不错的。


比如我之前看过blue做得妙味课堂,还有张鑫旭,阮一峰他们的一些博客,我个人觉得对于一些刚开始加入前端阵营的来人来说,看一些这类的教程还是比较不错的,实话实说。我也经常推荐我周围身边的人,想学前端的,从这边去开始开始学一些东西,如果此时此刻你们也在听我的节目的话,我们私下可以去交流一下,这个事扯得有点远,咱们回来继续说教程。其实当我开始和周围的人说我要做一个系列教程的时候,很多人是赞同的,但是当我说我要做一个音频教程的时候,大家都觉得不可思议,一个技术类的培训要做成一个音频的教程,怎么听都有点扯,但是看一下我们系列的标题,叫陪你读书。


随着现在互联网的发展,现在智能手机、平板已经相当普及了,几乎所有的人都有,而且所有的知识其实当你遇到一个问题的时候,所有的东西基本上你在网上搜都可以搜得到,但其实我觉得正是因为这种快速发展的节奏,互联网的这种快速发展,让很多人和纸制材料的这种距离越来越远。我相信很多人在收听我们节目的很多人可能已经很久没有认认真真的读一本书了,其实和我接触过的人都知道我带团队的时候会有一个要求,每个人都要定期的去看一些书籍,因为我觉得这样你才能把自己的基础打得很牢固,基础不牢固的话,你后面很多事情都很难做,而且前端又和其他的语言不太一样,它看起来就是特别简单,JS、CSS、HTML就这么几个东西。


大家可能看一看,就觉得自己都会了,所以遇到不会的东西上网一查,解决了就解决了,其实很可能很多人没有认认真真去思考一下,解决问题的背后还隐藏着什么样的一些原理,就是这个问题在真正的原理层的结构上,它到底是怎么解决的?所以正是因为这样,所以做前端的人有很多人他的知识体系就是完全零散的,不成体系,就有点像电影里演的这种练武功一样,你没有基础,后来所有的东西其实都不牢固。所以我们这个系列的教程就是要真正的找一本好书,带着大家认认真真的读一遍,从每一个基础的知识点开始讲,在整个的教程里面,我会和大家一起来详细的探讨,在书中哪些东西是不重要的,哪些东西是开发当中可能遇到的坑,或者面试当中可能遇到的坑,甚至包括书里哪些是对的,哪些是错的。


因为书里写的也不一定全都是对的,对吧?当然其实还有一个很重要的东西,我希望大家能够明白,当你去看一本书的时候,你除了要学习知识,除了要去丰富自己的知识体系之外,还要有一件事情你要做的,就是你的思想要跟着作者一起走,你要站在作者的角度上去想问题,你可以去比如说你遇到一个问题的时候,你要去想,你看到他给你提出来一个问题的时候,你要去想作者写这本书的时候,他是站在什么角度去思考问题的这样一种观点,所以这个系列我们要和大家阅读的是一本很多人手里都有的书,叫做JavaScript高级程序设计。


红色的那本,Nicholas.C.Zakas编写的这本书,听到这里可能很多人要说,我知道这本书,是一本入门的书,很简单。没错,确实是一本入门的书,但是是不是很简单,这个我还保留意见,如果你是一个精通JS的,我是说精通JS或者开发经验非常丰富的人,可能对于你来说这本书还真的挺简单的,但是如果你想继续了解的话,你可以继续往下听。我们后面再慢慢讲,如果你是一个对JS不是特别了解的人,或者说你觉得你的JS的整个的,不成一个完整的体系,我还是建议你好好的把书用基础类的书读一遍,我可以跟大家说一个例子,我也是道听途说,但是我不知道它的真假,那是我身边的一个朋友和我说的,我这个朋友也是在国内的一个大的互联网公司做前端的工作,哪个公司我就不说了,也是做前端的工作,他就跟我说一个问题,说来我们这面试的人,我们有一个要求,你要把JavaScript高级程序设计,也不一定指定是这一本或者说其他的一本这种比较厚的,比较成体系的这种基础类的书籍,完整整的阅读很多遍,我也忘了当时他说的是3遍还是5遍了,就是说反正要读很多遍。


然后才可以到这边去工作,而且他也跟我讲,就是说你如果自己的基础知识不牢固的话,你连基础的面试第1轮的面试就很难通过,我也很认同,所以这个时候我们就引出来一个问题,我们在做这一个系列的教程的时候,我们系列的教程究竟是面向哪些人?我觉得如果你是一个刚入门的人,或者说就像刚才说的,你觉得自己的基础知识不是成一个完整体系的话,那么我们这个系列的教程会带你完整的了解整个的前端知识。如果你是一个有一些开发经验的人,甚至说有很多开发经验的人,我也建议你可以听一下,因为这里面真的可能会有你忽略的或者不了解的东西。


如果你在我们的节目里发现有一些东西和可能有些讲的对的、讲的错的,或者想参与我们的讨论,也可以,参与到我们的节目当中,咱们一起讨论这件事情。前面已经说过了,今天是我们课程的第一讲,所以今天不打算讲技术,我们就先来了解一下JS的历史。因为我觉得如果你想了解一门语言,除了学习它的知识以外,了解它的历史也是非常重要的,而且同时由于JS这门语言,它涉及到的历史事件特别的多,很多公司组织还有开源的项目的名称都混在一起,很容易给初学者造成一些误导,所以今天我们从JS的历史开始说一下,讲一下这门历史,这门语言是怎么诞生的,同时也解释一下大家在看书或者查阅资料时所不能理解的一些内容。


说到JS很多人第一反应就是JavaScript和Java到底有什么关系?其实如果你去问一些经验丰富的程序员的话,他们很有可能告诉你这两个语言没有关系,这个也不能说不对,但是准确的说还是有很大关系的,听起来好像有点矛盾,我们慢慢讲。如果谈到JS的历史,咱们就不能提到一个很牛的公司叫Netscape,网景公司一般的资料会告诉大家,JavaScript是网景公司来提出的,1995年提出的,但是其实我们把S和网景公司放到一起说的话,我们还要提一个公司,这公司可能很多人不知道,叫Nombas,这公司在1992年的时候发布了一款语言,叫做C--,也叫CMM缩写,一听这名字大家知都知道一个类似C语言的这么一门语言,当时开发这门语言的时候是为了做一些宏(macro)操作的语言,你可以怎么简单说就是批处理操作,类似批处理操作,然后当时Nombas把这门语言捆绑在了他的一个共享软件中,而这门语言发布了以后,其实这是第1次将客户端语言亮相,在公众当中当时反应也是特别好,后来Nombas觉得C减减这个名字不好听,听起来好像很low的,感觉,现在已经C--,到这儿,有个东西叫C++是吧?


也叫C--,Nombas也发现这个事了,他们就把这门语言改了个名,改成了叫ScriptEase。而且后来Nombas又开发了可以嵌入到网页当中的版本,就是JavaScript最早的雏形,属于老祖宗的级别了,于是这就有了互联网历史上第1个可以在客户端使用的脚本语言,但是Nombas其实当时应该也想不到当时他们的这种理念,就是说让脚本语言在客户端运行,这种理念在几年以后成为互联网历史上非常重要的一部分。一说到这个问题,我就想到了一件事情,就是我总和朋友聊天说,发明电风扇的人可能做梦,他也没想到这个东西最大的用途是烤串,对吧?


大家都能看得到,满大街就那电风扇、烤串的,这发明电风扇的人肯定没想到这一点,但是这就是说说到了一件事情,我们在做很多事情的时候,不必要考虑得非常长远的,未来要做成什么样?这些东西先做出来再说,就像我们的教程一样,先出来做出来再说,1994年的时候,网景公司发布了旗下的浏览器,叫Navigator,当时发布的是0.9的版本,这个版本的浏览器是历史上公认的一个比较成熟的浏览器,当时也是轰动一时,虽然说浏览器当时受到了整个IT界的关注,但是有一个问题就是当时发布的版本的浏览器,它只能用于浏览,它没有任何和访问者交互的能力。


举个例子,就是在这款浏览器下,你去一个网站,我们比如说注册一个网站,当你把信息填完你点提交的时候,因为他没有前端的东西没有和访问者就是客户端的交互,所以你点提交的时候要把所有的信息发送到后台,然后后台来验证里面的每一个字段里面所有的东西来做校验,而且当时的网速也特别慢,那个时候都是这种拨号上网,这也不叫拨号上网了,就更早的这种版本,网速非常慢,会出现一个什么情况,你可能把一个表单填写完了,你点提交发送到后台,过了半分钟,甚至说过了一分钟后台给你返回一个,只告诉你有一个值你没填写,或者有一个有一项你填错了这种东西,然后你再重新填,现在看起来这种交互就简直不能容忍。


当时网景公司其实也发现了这个问题,也觉得这个也是一个急需解决的问题,所以网景公司就决定自己开发一款自己的脚本语言,而且给交易员起了个名字,叫livescript,想开发这么一门语言,然后他们就找了一个人,这个人就是历史上非常著名的一个人,叫布兰登爱奇。这个人,布兰登爱奇也在后来被称为JavaScript之父,网景公司找到布兰登爱奇以后,决定让他来设计一款叫做livescript的脚本语言,然后绑定在他们的Navigator2.0这款浏览器中。


当时布兰登爱奇设计语言的时候,其实很多人都可能都无法想象,只用了10天的时间,我为什么会这么短?这个里面有两件事情,第1个就是网景公司找到布兰登爱奇的时候,和他们要发布Navigator2.0中间的可开发的时间已经非常短了,只有几个月的时间,这是第一点。还有一点就是说因为那一年sun公司大家都知道,sun公司发布了Java语言,正式的把Java推向了市场,当时整个的网景公司所有的管理层都是Java语言的追随者,而且因为Java语言特别好,当时家玩有一个口号叫一次编译,处处运行,还是一次编译,随处运行,反正就这么个意思,整个Java语言在IT界特别火热,网景公司整个管理层都非常的追随Java语言,网景公司这个时候就决定和sun公司做成一个联盟,而且还有一个什么样的决定?


就是网景公司决定在Navigator2.0当中允许Java的程序直接在浏览器当中运行,是以这种小应用的程序运行,小应用的形式来运行,布兰登爱奇个人虽然是一个很厉害的开发人员,编码能力非常强,但是他对Java其实一点兴趣都没有,而且当时他收到的一个命令是让他去开发livescript的一个未来的脚本语言。而且这个语言有一个什么要求?历史上的资料的记载的原话是这么说的,就是说这门语言要看上去与Java足够的相似,但是比Java简单,使得非专业的人员也能很快的上手。


这是当时布兰德艾奇收到一个命令,你想它作为一个语言的开发者,他又不喜欢Java,然后又让他做一个和Java很相似的语言,给的时间又短,最后就造成了这么一个结果,就当时他也想反正就是一个工作,就为了应付公司的任务,所以很快的就把这门语言设计完成了。但是你可以想象10天的时候设计一门计算机语言考虑的问题肯定是不够全面,不够严谨的,这也就导致了后来很长的一段时间,用加JavaScript写出来的程序就是混乱不堪,各种各样的什么样都有。


其实不然,当然其自己可能也没有想象过自己10天设计出来这么一个语言,在几年之后,全世界有所有这么多人在学习,研究这么远。不过还好,Navigator2.0如期的发布了,当时是在1995年的时候,如期发布了这门语言,而且当时网景公司已经和SUN公司达成联盟了嘛,所以网景公司就想借助人们对Java的这种追捧来推广他的livescript这门语言。因此网景公司就在发布的之前发布的时候,把livescript改名成了JavaScript,就是JavaScript名称的由来。


那么说到这各位也可以自己去评判一下这个事,你你听到JavaScript的来源,你自己去想他到底和Java有没有关系?这个我们就不在这里讨论了,仁者见仁智者见智的事。但是这个时候JavaScript和我们现在用到的JS还不是同一个东西,为什么这么说?我们接着往下讲,95年的时候,网景公司发布了那边给他2.0,而且获得的成功也非常大,大家都觉得好,所有人都在高呼,Navigator好JS好,在这种欢呼声下,可能有个公司就坐不住了。


这是谁?就是IT界的老大,微软作为一家大公司,看到网景的成功,他心里当然很不舒服了,所以他就决定自己开发一个客户端语言。微软一直就一直干这种事,对吧?所以他就在转年的1996年发布了IE3.0,现在我们用到的IE,你可以看到已经很高的版本了。但是96年的时候发布的是IE3.0的版本,同时发布了,同时做了一件什么事,就是在3.0的版本实现了微软自己的客户端语言,这是JScript。


这是微软自己的客户端语言,这个时候问题就来了,这个时候市面上同时存在了三种客户端语言、网景的JavaScript、微软的JScript、还有我们刚开始提到的Nombas的ScriptEase三种语言,你可以想象三种语言混在一起,这个是什么情况?也有人称为是JS历史上一个三足鼎立的时期,这个是1996年的事情,所以转过来转过头来,到了97年的时候,大家就在想这个不行,对吧?各发展各的,这以后肯定就乱了,所以大家最后决定就是一起找一个中间人来做一个公共的标准,大家都一起遵循的标准,就像天龙8部一样,找个带头大哥,这带头大哥是谁?


就是欧洲计算机制造商,协会简称ECMA也叫艾克玛读音叫艾克玛,当时提交给艾克马的是以网景公司发布的JavaScript为1.0为蓝本的,当时以这为蓝本提交给了ECMA,ECMA收到蓝本以后,就找网景公司,还有微软,SUN等一些大公司,当然其中还包括一些其他的这种组织,找了一些内部他们的这些组织的程序员,然后组成了一个小组,这个小组叫做39号技术委员会,简称TC39这么一个小组共同来完成一个规范。


规范的名字叫做ECMA-262这么一个规范,在规范当中定义了一个语言的名字叫ECMAScript ,就是E C M A Script ,怎么读都行,这个才是我们现在所使用的JavaScript,你想这个时候已经出了4种语言了,对吧?前面说了三种,大家三个公司各玩各的,三种语言,然后找了一个中间人,又搞出来一种语言,叫ECMAScript ,就是国际标准的语言。但是97年的这个时候发生了一个什么事?


一个特别有意思的事,就是年初的时候,三家公司提交给了ECMAScript 1.1的版本,然后在这个版本之上做国际通用的标准,但是这个标准从街道一直到制定完成,中间不是有一个时间段吗?在这个时间段当中,网景公司发布了JavaScript的1.2的版本,并且在他的Navigator4这款浏览器上搭载了1.2的JavaScript,微软公司也在同年发布了IE 4,你看这两两个公司版本号都一样的,发布了IE4、IE 4里头实现了JS 3.0的,就是完成了JS 3.0的实现。


而且当时这两家公司都在大肆的宣扬就是自己的浏览器嘛,为了强制市场大肆渲染器,微软公司怎么说的,微软公司说自己是第1个兼容ECMAScript ,也就是介入国际标准的浏览器,然后网景公司怎么说,国际标准是在我的1.1的版本上做的规范。然后我现在已经做到1.2了,就是这么做宣传,但是你要知道一件事情,浏览器发布的时候,国际标准还没制定出来,中间因为我中间时间差,他们浏览器发布的时候,国际标准还没制定出来,这就出现一个什么情况呢?


最后国际标准制定出来以后出现的一个情况,就是网景公司发布的Navigator 4,这个浏览器就它里面实现的JavaScript的1.2和国际标准不兼容,国际标准是建立在1.1的基础上,1.2和1.1不兼容。然后历史上第1个宣称自己兼容国际标准的一个IE 4和国际标准也不兼容。这一年大家还是各玩各的,转眼到了第2年,98年的时候,有一个组织叫做国际标准化组织,简称ISO大家都知道这个组织是吧?组织也开始使用ECMAScript 标准,其实从这个时候开始,各个浏览器的生产商才开始将ECMAScript 作为自己浏览器的一个基础,然后再在这个基础上做各自的实现,这个时候才开始慢慢的统一出来了。


而在ECMAScript的标准制定了以后,也经历了几次改版,一共是5次。我们后面就说第一版、第2本、第3版、第4版、第5版这样说,这个里面的故事也非常有意思,因为刚才我们说过了吗?第一版是在JavaScript 1.1的基础上做的修改,这个时候我们要重点说一下,因为刚才我们提到了,可能细心的朋友会注意到这点,就是加JavaScript 1.2和1.1不兼容。为什么不兼容?因为ECMAScript则在上市第一版的时候制定了三个原则,第1个原则就是把所有和浏览器相关的代码全部删掉,因为这一点导致了1.1和1.2不兼容,这是最重要的一个原因。


第2个要求在ECMAScript里头要全面的支持Unicode的编码,这是为了支持日后的多语言开发。还有一个要求就是要求对象和平台无关,这3点你反过来去看特别的重要,为什么说特别重要?咱们可以因为之前我也说了,你要站在当时的人的一个角度上去考虑问题,咱们也看看当时的这些设计人员,还有这些工程师,他们是怎么思考问题的。我再重复一下这三点,第1点把和浏览器相关的代码全部删掉。第二点支持Unicode的标准。第三点要求对象和平台无关。


其实从这三点就能看出来,JavaScript在设计之初,注定不是一门客户端语言,可能很多人觉得JavaScript认为运行在浏览器当中的和HTML、CSS配合,然后实现一些各种各样的效果,各种各样的功能,其实并不是这样,JavaScript的设计之初就没有把它定义成一种只能在客户端时使用的语言。你看它在设计的时候把和浏览器相关的代码全部删掉了,而是要求对象和平台无关,其实这就是成就了JavaScript,可以在各种平台上运行,而且可以在前端后端以及其他的各种环境当中运行的一个重要的原因,现在有很多人知道现在也出了node.js了,是运行在服务端,而且在很多其实你不知道的环境里头也在使用JS比如说机顶盒,有很多机顶盒里头也在用JS对吧?


ECMAScript 1.0的版本是在JavaScript的1.1的基础上做的一些删除处理,因为他把和浏览器相关的代码全都删掉了嘛,提交给ECMA的1.1的版本,本来里面东西就不多,因为刚开始的版本你再删一删,其实就没有什么了,然后在他的第2次升级,也就是说ECMAScript的第2版本,我们现在说的第2版本里头整个的第2本没有对第一版做任何的修改,只是进行了一些整理,把这些文档规范重新整理了一遍,直到第3版的时候,其实才真正定义了JavaScript。


我们现在常用的一些东西,比如这种字符串的处理、正则、表达式的处理、异常处理,还有流程,控制语句一些处理都是在第三板中定义的,这也是你在看书的时候会发现所有的这些东西他都会告诉你,这个是在ECMA3中来定义的一些东西,I特码三定义完了以后就改第4版,第3版定义完了以后就开始定义第4版,这个时候其实如果你之前看过JS的书的话,你会发现一个问题,书里给你讲的一些属性也好,方法也好,或者一些新的知识也好,要不就是在第3版定义的,要不就是第5版定义的,你从来没看过在第4版定义的,对吧?


这是为什么当时第4版定义的时候,因为当时大家也发现了JS它的强大的功能,还有对整个浏览器人机交互这种感受的提升非常重要,所以在第4版当中加了特别多的新的特性,甚至包括新的数据结构,包括类包括继承,这种东西在第4版中完全定义,而且整个对第3版进行了大量的修改。这就导致了一件什么事?什么事情?就是第4版定义的JS几乎就是开发了一门新的语言,是完全新的语言,增加了很多东西。


当时TC39这个小组里面,因为因为毕竟你要开发一门新的语言,所以当时就出现了两种声音,1个第1种就是说继续我们做第4版,开发一门语言,就新的语言,对吧?开发一门新的语言。还有一个声音,就是说我们不做大范围的修改,我们只做小范围的修改,我们做一个3.1的版本做一个小范围的修改,后来大家因为两两种声音,你最后必须要选择一个吗?大家就投票,就是最后投票,更多的人赞成说我们不做大范围的修改,只做小范围的修改。


于是就定义了一个叫3.1的版本,3.1的版本没有发布,而且在第4版发布之前,整个前面的东西都被终止掉了,这也就是导致后来没有第4版是这么一个原因。而刚才我们说过3.1的版本也就演变成了后来的第5版本。我们现在你能使用到的一个最新版本,第5版前面说了一些JavaScript的历史,这里要格外强调了一下,就是说我们这次所要学习的JS实际上它是由三个部分组成的,刚才说到的ECMAScript就是国际标准的,只是这三个部分的其中之一,另外两个部分,一个叫DOM,一个叫BOM。


就是文档对象模型和浏览器对象模型。这两个东西我们会在后续的章节当中详细的去讨论,其中涉及到的一些历史和故事,我们也会放到后面的东西再慢慢说这个事。其实纵观JS的历史,你会发现这门语言可能并没有你想象的历史那么悠久,从国际标准制定开始,也就是从98年开始,发洪水那年到现在就十十几年的时间,对吧?也不是很长的时间,应该算是一门比较新的语言,也不知道这么说对不对?


反正时间不长。如果你想真的去系统的了解一下这门语言,或者开始学习一门语言,甚至说如果你是一个有过一些JS开发经验的想重新回过头来把整个的这个知识体系完整的梳理一遍的话,现在你就可以到书店或者去网上订购一本JavaScript的高级程序设计,就是红皮书红色皮儿的这本书,然后跟着我们节目一起来看。好了,这期节目就到这里结束,最后送给大家一句好听的歌曲,然后大家一起放松一下心情。我们下期再见。

70
回复 编辑