1995 年 12 月 4 日,网景和 Sun 发表了一份联合声明,宣布推出 JavaScript。它是一种开放的、跨平台的、易于使用的对象脚本语言,用于在企业网络和互联网上实时创建和定制应用程序。历史上,一般将这一天作为 JavaScript 的诞辰。

25 岁,对于一门编程语言来说,不算长也不算短。JS 诞生的初衷很简单,没成想现在发展得如火如荼,已经成为程序员学习最广的一门编程语言。JS 诞生的过程也具有戏剧性,可能是唯一一门被老爹嫌弃一生的编程语言。接下来咱们就来看看 JS 的故事,随后,我会为大家学习 JS 推荐几本好书。

"1994年,网景公司(Netscape)发布 Navigator 浏览器 0.9 版。这是历史上第一个比较成熟的网络浏览器,轰动一时。但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力。......网景公司急需一种网页脚本语言,使得浏览器可以与网页互动。"

网页脚本语言到底是什么语言?网景公司当时有两个选择:一个是采用现有的语言,比如 Perl、Python、Tcl、Scheme 等等,允许它们直接嵌入网页;另一个是发明一种全新的语言。

这两个选择各有利弊。第一个选择,有利于充分利用现有代码和程序员资源,推广起来比较容易;第二个选择,有利于开发出完全适用的语言,实现起来比较容易。

到底采用哪一个选择,网景公司内部争执不下,管理层一时难以下定决心。

就在这时,发生了另外一件大事:1995 年 Sun 公司将 Oak 语言改名为 Java,正式向市场推出。

Sun 公司大肆宣传,许诺这种语言可以"一次编写,到处运行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。

网景公司动了心,决定与 Sun 公司结成联盟。它不仅允许 Java 程序以 applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将 Java 作为脚本语言嵌入网页,只是因为这样会使 HTML 网页过于复杂,后来才不得不放弃。

总之,当时的形势就是,网景公司的整个管理层,都是 Java 语言的信徒,Sun 公司完全介入网页脚本语言的决策。因此,Javascript 后来就是网景和 Sun 两家公司一起携手推向市场的,这种语言被命名为"Java+script"并不是偶然的。

此时,34 岁的系统程序员 Brendan Eich 登场了。1995 年 4 月,网景公司录用了他。

Brendan Eich 的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将 Scheme 语言作为网页脚本语言的可能性。Brendan Eich 本人也是这样想的,以为进入新公司后,会主要与 Scheme 语言打交道。

仅仅一个月之后,1995 年 5 月,网景公司做出决策,未来的网页脚本语言必须"看上去与 Java 足够相似",但是比 Java 简单,使得非专业的网页作者也能很快上手。这个决策实际上将 Perl、Python、Tcl、Scheme 等非面向对象编程的语言都排除在外了。

Brendan Eich 被指定为这种"简化版 Java 语言"的设计师。

但是,他对 Java 一点兴趣也没有。为了应付公司安排的任务,他只用 10 天时间就把 Javascript 设计出来了。

由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript 写出来的程序混乱不堪。如果 Brendan Eich 预见到,未来这种语言会成为互联网第一大语言,全世界有几百万学习者,他会不会多花一点时间呢?

总的来说,他的设计思路是这样的:

1.借鉴 C 语言的基本语法;

2.借鉴 Java 语言的数据类型和内存管理;

3.借鉴 Scheme 语言,将函数提升到"第一等公民"(first class)的地位;

4.借鉴 Self 语言,使用基于原型(prototype)的继承机制。

所以,Javascript 语言实际上是两种语言风格的混合产物——(简化的)函数式编程+(简化的)面向对象编程。这是由 Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。

多年以后,Brendan Eich 还是看不起 Java。他说:

"Java(对Javascript)的影响,主要是把数据分成基本类型(primitive)和对象类型(object)两种,比如字符串和字符串对象,以及引入了 Y2K 问题。这真是不幸啊。"

把基本数据类型包装成对象,这样做是否可取,这里暂且不论。Y2K  问题则是直接与 Java 有关。根据设想,Date.getYear() 返回的应该是年份的最后两位:

var date1 = new Date(1999,0,1);

var year1 = date1.getYear();

alert(year1); // 99

但是实际上,对于 2000 年,它返回的是 100!

var date2 = new Date(2000,0,1);

var year2 = date2.getYear();

alert(year2); // 100

如果用这个函数生成年份,某些网页可能出现"19100"这样的结果。这个问题完全来源于 Java,因为 Javascript 的日期类直接采用了 java.util.Date 函数库。Brendan Eich 显然很不满意这个结果,这导致后来不得不添加了一个返回四位数年份的 Date.getFullYear() 函数。

如果不是公司的决策,Brendan Eich 绝不可能把 Java 作为 Javascript 设计的原型。作为设计者,他一点也不喜欢自己的这个作品:

"与其说我爱 Javascript,不如说我恨它。它是 C 语言和 Self 语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:'它的优秀之处并非原创,它的原创之处并不优秀。'(the part that is good is not original, and the part that is original is not good.)"

(完)

更多 JavaScript 豆瓣高分好书,期待你的阅读!

本书是 JavaScript 经典图书的新版。第 4 版涵盖 ECMAScript 2019,全面、深入地介绍了 JavaScript 开发者必须掌握的前端开发技术,涉及 JavaScript 的基础特性和高级特性。书中详尽讨论了 JavaScript 的各个方面,从 JavaScript 的起源开始,逐步讲解到新出现的技术,其中重点介绍 ECMAScript 和 DOM 标准。在此基础上,接下来的各章揭示了 JavaScript 的基本概念,包括类、期约、迭代器、代理,等等。另外,书中深入探讨了客户端检测、事件、动画、表单、错误处理及 JSON。本书同时也介绍了近几年来涌现的重要新规范,包括 Fetch API、模块、工作者线程、服务线程以及大量新 API。

很多人对 JavaScript 这门语言的印象都是简单易学,很容易上手。JavaScript 语言本身有很多复杂的概念,语言的使用者不必深入理解这些概念也可以编写出功能全面的应用。殊不知,这些复杂精妙的概念才是语言的精髓,即使是经验丰富的 JavaScript 开发人员,如果没有认真学习的话也无法真正理解它们。本册介绍两个主题:“作用域和闭包”以及“ this和对象原型”,深入挖掘 JavaScript 语言本质,打通 JavaScript 的任督二脉。

很多人对 JavaScript 这门语言的印象都是简单易学,很容易上手。JavaScript 语言本身有很多复杂的概念,语言的使用者不必深入理解这些概念也可以编写出功能全面的应用。殊不知,这些复杂精妙的概念才是语言的精髓,即使是经验丰富的 JavaScript 开发人员,如果没有认真学习的话也无法真正理解它们。这本书直面当前 JavaScript 开发者不求甚解的大趋势,深入理解语言内部的机制。本册是其中卷,主要介绍了类型、语法、异步和性能。

本套书直面当前 JavaScript 开发人员不求甚解的大趋势,深入理解语言内部的机制,全面介绍了 JavaScript 中常被人误解和忽视的重要知识点。本书是其下卷,主要介绍了 JavaScript 入门知识和对 ES6 及未来发展趋势的展望。

本书从实际开发角度介绍 ES6 及后续更新版本特性,以循序渐进、通俗易懂的方式讲解各种复杂的技术,比如异步控制流、声明对象及函数的使用等,并从实践角度提供了许多建议,既能帮助广大前端开发者建立一个完整的知识体系,也能助其在工作中如虎添翼,开发出更好的 Web 应用。

本书在尊重《设计模式》原意的同时,针对 JavaScript 语言特性全面介绍了更适合 JavaScript 程序员的了 16 个常用的设计模式,讲解了 JavaScript 面向对象和函数式编程方面的基础知识,介绍了面向对象的设计原则及其在设计模式中的体现,还分享了面向对象编程技巧和日常开发中的代码重构。本书将教会你如何把经典的设计模式应用到 JavaScript 语言中,编写出优美高效、结构化和可维护的代码。

史上最轻松 JavaScript 入门书,全彩印刷,本书从 JavaScript 的基础知识逐渐深入到高阶话题,包括对象、函数、浏览器的文档对象模型、类型、数组、原型、闭包等。读者会在阅读的过程中玩游戏、解谜题,并且以你想象不到的方式与 JavaScript 交互。此外,读者还会写大量的代码,以便构建自己的 Web 应用。

本书首先介绍了 JavaScript 语言的基础知识(包括 ECMAScript 和 TypeScript),其次讨论了数组、栈、队列、双端队列和链表等重要的数据结构,随后分析了集合、字典和散列表的工作原理,接下来阐述了递归的原理、什么是树以及二叉堆和堆排序,然后介绍了图、DFS 和 BFS 算法、各种排序(冒泡排序、选择排序、插入排序、归并排序、快速排序、计数排序、桶排序和基数排序)和搜索(顺序搜索、二分搜索和内插搜索)算法以及随机算法,接着介绍了分而治之、动态规划、贪心算法和回溯算法等高级算法以及函数式编程,最后还介绍了如何计算算法的复杂度。

文转载自阮一峰老师博客文章,原文链接:

http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html

当当6.7折购书☟☟☟

JavaScript,25 岁生日快乐!相关推荐

  1. JavaScript 22岁生日快乐!

    昨天是 JavaScript 22岁的生日.1995年12月4日,Netscape 公司联合 Sun 公司发布脚本语言 JavaScript,宣布这门语言将是 Java 的补充,用来操作网页. (当年 ...

  2. java创意生日快乐_Java,25岁生日快乐!

    原标题:Java,25岁生日快乐! 25年前, 我们无论如何也无法想象, 世界距离我们, 只有几次点击的距离. 而在今天, 这种便捷的生活方式 比以往任何时候都更重要. 这背后离不开Java, 以及无 ...

  3. Java 25 岁生日快乐!

    整理 | 屠敏 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 互联网是有记忆的,而 Java 作为一种编程语言,在支撑这份记忆的过程中,立下了汗马之劳. 5 月 2 ...

  4. 宇宙最強的IDE - Visual Studio 25岁生日快乐

    每位开发者从入门开始或多或少都会接触过 Visual Studio , 现今的 Visual Studio 除了支持传统的 C++ , C# , Visual Basic.NET ,F# 的编程语言外 ...

  5. JavaScript 25 岁了!

    本文已过原作者授权翻译. JavaScript于25年前(1995年12月4日)首次向公众推出.JavaScript 最初开发仅用了10天时间,便迅速成为最受欢迎的编程语言之一,如今全球有数百万的开发 ...

  6. PHP 还有未来么,还是 25 岁就“寿终正寝”了?

    作者 | BEN JAMES 译者 | Arvin,责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 1995年6月,拉斯穆斯·勒多夫(Rasmus Lerdorf)在Usenet小组中发 ...

  7. 华为epg-sms 多cp_Linux桌面上的SMS,Linux 25岁生日以及更多开源新闻

    华为epg-sms 多cp 在本周的开源新闻摘要中,我们介绍了Linux桌面上的SMS,Linux的25岁生日,廉价的生态家园等等. 2016年8月28日至9月3日的开源新闻摘要 KDE Con​​n ...

  8. 25 岁的老 Delphi,还值得程序员入手吗?

    Delphi 25岁了!尽管它不再是很多 Windows 开发的明显选择,但它的"长寿"证明了其性能之高.回想起来,为什么 Delphi 当初未能占领 Windows 开发市场的更 ...

  9. 他25岁当上985博导,今年秋季学生已招满

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI 25岁的 ...

最新文章

  1. StringUtils 正则校验
  2. python调用窗口_如何调用一个函数并在另一个窗口中打开?
  3. 用FFmpeg从视频截取任意一帧图片的解决办法~
  4. 三问Spring事务:解决什么问题?如何解决?存在什么问题?
  5. centos7.4 mysql启动,centos7下mysql服务启动失败_网站服务器运行维护,centos7,mysql
  6. php开发uki引流脚本,UKI引流脚本
  7. PHP 结合redis实现高并发下抢购、秒杀
  8. 银行账户系统需求分析实例
  9. linux源码安装mysql
  10. 2952 细胞分裂 2
  11. vue项目引入阿里巴巴矢量图标库图标
  12. 如何使用 SQL 对数据进行分析?
  13. 小散量化炒股记|只花几秒钟!多任务爬虫获取A股每日实时行情数据
  14. 天津大学计算机学院博士生导师,天津大学2020年博士研究生导师名单
  15. 常见软包电池厚度尺寸测量方法对比
  16. eclipse各(旧)版本,32位/64位下载官网地址
  17. VBA之正则表达式(1)-- 基础篇
  18. 火箭发射升空——数学模型P163 5.6
  19. 西游记中如来佛祖来降服孙悟空时为什么说可惜他的真面目
  20. 松尾环 matlab,猝发式直扩信号数字化接收机载波同步技术研究

热门文章

  1. 蓝牙 socket 建立不了_蓝牙电话之PBAP同步电话簿的安卓实现
  2. zigbee 串口不稳定_基于项目的ZigBee系统组网介绍
  3. elementui如何在input 框中搜索_在 Windows 10 中的文件资源管理器中删除搜索历史记录...
  4. rpm 安装 忽略依赖_解决RPM包依赖关系
  5. java程序的装载与检查_浅谈Java类型装载、连接与初始化
  6. python+flask+vue开发(1)--虚拟环境创建
  7. Facebook 开源了一整套重要的 Linux 内核组件与工具!
  8. svn在linux上的安装
  9. 使用HTML5的WebSocket实现服务端和客户端数据通信(有演示和源码)
  10. 同步机制之 ReentrantLock