您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

从脚本到主流,JavaScript的扶正之路

时间:2020-05-02 10:07:43  来源:  作者:

说到最流行的编程语言,可能要数JAVAScript,Java和Python了。但是向上追溯几年、十年、甚至是20年,在2000年的时候你绝不会相信,如今JavaScript将成为世界上最受欢迎的语言之一。那时候的JavaScript不仅无法完成专业语言所能做到的各个功能,甚至也没有被设计成一种严肃的编码工具。本文我们一起来致JavaScript发展的那些岁月。

概述

1995年,网景通信公司Netscape意识到,需要给浏览器一个简便可用的浏览器动态脚本程序以便于Microsoft的IE做市场竞争。于是在结束与Sun Microsystems战略合作伙伴的之前,利用最后一段时间,让Sun的Brendan Eich在不到10天时间内创造了一个新的语言,并将它嵌入了Netscape 2浏览器中。

从脚本到主流,JavaScript的扶正之路

 

并且当时为了蹭Java的热度,他们将该语言叫做JavaScript。但是实际上和Java语言没有半毛钱的关系。Java和JavaScript这两个类似的名称引起了很多人多年的困惑,至今还是个个问题。(JavaScript现在是甲骨文的商标名称,随意使用可能会有版权问题。)

第一章 伊始:滚动按钮时代

在JavaScript诞生的头五年中,它是不便使用Java (Applet)编程的人们的一个白板工具。其拥趸包括业余爱好者,以及急于做简单完成任务的人。还有Web设计师一群新生技术工种,其工作是使网页用户界面看起来更加时尚和图形化。他们想要的东西比<blink>标签更精致,比GIF的旋转的地球仪更现代。

在专业领域,这是JavaScript的主要工作,创建UI胶水,将过度设计的网页粘合在一起。当你需要一个交互式按钮,一个弹出菜单,一个图像跨过动态效果时,你会用到 JavaScript。

从脚本到主流,JavaScript的扶正之路

 

不久之后,JavaScript开始被大量使用于创建类似效果:每当鼠标经过时,就将一个图像换成另一个。

尽管认为开发人员会使用代码来自动执行发光按钮,然后将其代码分发到网页上似乎有些疯狂,但这是每个人都一遍又一遍地做的事情(今天,css提供了这种装饰,它使用样式设置和动画而不是预先生成的图像文件,以更易于维护的方式来做到了这一点。)。很少有人期望JavaScript会走得更远。而且,许多编码人员更乐于使用服务器端编程语言,让它们按需提供正确的JavaScript脚本。 JavaScript可以为应用程序中的业务逻辑提供支持的想法就像用Excel宏替换数据库存储过程一样荒唐。

第二章 限制:沙盒的囚徒

今天,当人们批评JavaScript时,通常是由于其语言本身的局限性:补补修修的面向对象功能,弱类型安全,笨拙的DOM模型,==与===的混淆等等。但JavaScript并非天生就是如此。毕竟,有许多丑陋的编程语言,也都是因为在正确的时间出现正确的领域而变得重要。(比如BASIC,COBOL,SQL和php)JavaScript是当时所有Web浏览器中唯一支持的语言,伴随着Web正占领世界的同时,它肯定在正确的时间出现在了正确的位置。

JavaScript的真正限制是沙盒,严格控制的环境,可将代码固定在适当的位置。沙箱将JavaScript与桌面世界隔离开来。例如,JavaScript代码无法直接访问文件系统,显示器或任何硬件。更严重的是,它切断了JavaScript与Web服务器上所有内容的联系,例如存储用户列表和产品目录的数据库以及运行业务逻辑的服务器端代码。JavaScript被迫独自战斗的一线,但是也是整日忙忙碌碌而无所事事,只能旋转Web页面上的按钮。

第三章 反叛:Ajax和XMLHttpRequest

然而幸运的是微软并没有对JavaScript产生多大的敌意,也在IE中保留了它。并打算以"拥抱,扩展和扑灭"的理念消耗竞争对手。

当时Microsoft的一个团队正在研究一种使Outlook的Web前端响应速度更快的方法。他们正在构建一个名为Outlook Web Access的产品,看起来像这样:

从脚本到主流,JavaScript的扶正之路

 

微软团队的目标是相对适度的。他们想开发一个在浏览器中运行的高效电子邮件阅读器。最重要的是,他们不想每隔几秒钟刷新一次整个页面。取而代之的是,他们采用的是一种允许网页在后台静默检查新邮件的技术。这个目标现在看来似乎并没有啥大不了,但请记住那个年代Gmail还没有出现呢,谷歌也才刚刚出现,没有啥名气。

微软团队使用一种被称为XMLHttpRequest的ActiveX组件创建了一些管道。 XMLHttpRequest的基本思想很简单:它为JavaScript代码提供了一种进行Web请求的方法。就像浏览器可以联系网络服务器并发出请求(例如,"嘿,请给我一个页面!")一样,JavaScript代码也可以使用XMLHttpRequest对象发出自己的请求(例如,"嘿,请再给我发送一些邮件")。

从脚本到主流,JavaScript的扶正之路

 

突然之间,潘多拉魔盒被打开了,Web页面开始可以调用Web服务器的所有资源:

需要数据库中的一些数据吗?调用服务器并查询。

服务器需要执行计算,安全测试,超级机密验证检查吗?也请调用服务器。、最重要的是,在后台进行调用时,页面显示不会受到影响。

但是XMLHttpRequest也有很多问题。首先,它的名称很奇怪,大小写不一致,导致区分大小写的语言(例如JavaScript)很头痛。

其次,就像它名字表明的一样请求发送和接收使用XML消息。现实情况是,消息几乎可以是任何东西,普通文本,html块或序列化为JSON的JavaScript对象。但是最大的问题当属的XMLHttpRequest的的支持技术。它是用ActiveX构建的,这样它只支持在windows计算机上运行,​​只能在Internet Explorer中运行。

这些怪癖都没有阻止它。在短短的几年内,其他浏览器都提供了自己的XMLHttpRequest实现-代码中的相同对象,但没有ActiveX麻烦。

尽管微软创建了XMLHttpRequest,但是并没有在自己的Web开发得到充分利用它。甚至在,他们后续的公共Web的电子邮件系统Hotmail中也没有使用。

相反,是谷歌首先利用XMLHttpRequest技术开发出了让世界震惊的Web产品。谷歌首先在2004年使用开发了公共Web邮箱Gmail;

从脚本到主流,JavaScript的扶正之路

 

接着,次年又开发出了google Maps。

从脚本到主流,JavaScript的扶正之路

 

这两个伟大的产品开始让XMLHttpRequest和Ajax技术大放异彩而流行于世。

第五章 扶正:通往现代的道路

XMLHttpRequest是改变JavaScript进程的关键要素。但是,此后还有很多拐点。

多年以来,JavaScript语言一直处于冻结状态。市场领先的IE浏览器要伴随着操作系统升级而升级,版本迭代非常缓慢。开发人员被迫要编写大量的脚本检查不同IE浏览器版本来进行适配。

从脚本到主流,JavaScript的扶正之路

 

在2006年,开发人员通过使用jQuery框架,获得了形式上的统一解决方案。尽管jQuery在今天已经过时了,但是10年前,如果把真正的时间用在构建功能而非解决浏览器兼容性的问题上时,这是必不可少的工具。

从脚本到主流,JavaScript的扶正之路

 

谷歌在2008年发布了一个名为V8的新JavaScript引擎。

从脚本到主流,JavaScript的扶正之路

 

如果说jQuery的出现为Web开发人员提供了广泛的兼容性,而V8则为他们提供了出色的性能。而且由于V8引擎是一个单独的开源组件,因此其他项目也可以使用它。后来,因此,而衍生了诸如Node.js和Electron之类伟大项目。

从脚本到主流,JavaScript的扶正之路

 

2008年下半年,W3C推出第一个HTML5的工作草案。HTML5本身并不是关于JavaScript的,而是与一波新的JavaScript API配对使用的。突然之间,开发人员有了用于存储本地数据,管理浏览器历史记录,使用音频和运行后台任务的工具。网络功能和桌面功能之间的差距再次缩小。

从脚本到主流,JavaScript的扶正之路

 

第六章 涅槃:现代的JavaScript

JavaScript的成功是否是其在浏览器中享有特权的必然结果?还是需要运气和完美时机?

我觉得很多是为了兼顾和均衡。根据经济学定理,为了防止一家独大,各大公司之间互相让利权衡后的结果。

结果是JavaScript被迫赢得了成功。在JavaScript的一生中,从来没有很多人喜欢。刚开始大家支持Java applet,接着是Flash,还有微软版的Silverlight。JavaScript面对了这些挑战者,并(被)击败了所有他们。

JavaScript的未来是一条迅速分支的道路。现在JavaScript有在Web服务端运行的(Node.js),也有桌面应用程序(Node.js和Electron)。也有了诸如TypeScript的更高级先进方言,它们可以编译为JavaScript,从而为开发人员提供了一种在不违反规范的前提下舒适开发的方法。将来借助WebAssembly可能还会完全摆脱语言限制,为开发人员提供一种通过JavaScript引擎来使用他们想要的任何高级语言的方法。

JavaScript尽管有很多不是之处,但是他确实天(各大经济巨头)选之子。Brendan Eich将JavaScript放入Netscape Navigator中,而我们正想法设法整个世界装入浏览器。这就是现代的Web,以及将来物联网



Tags:JavaScript   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1、通过条件判断给变量赋值布尔值的正确姿势// badif (a === &#39;a&#39;) { b = true} else { b = false}// goodb = a === &#39;a&#39;2、在if中判断数组长度不为零...【详细内容】
2021-12-24  Tags: JavaScript  点击:(5)  评论:(0)  加入收藏
给新手朋友分享我收藏的前端必备javascript已经写好的封装好的方法函数,直接可用。方法函数总计:41个;以下给大家介绍有35个,需要整体文档的朋友私信我,1、输入一个值,将其返回数...【详细内容】
2021-12-15  Tags: JavaScript  点击:(19)  评论:(0)  加入收藏
作者:一川来源:前端万有引力 1 写在前面Javascript中的apply、call、bind方法是前端代码开发中相当重要的概念,并且与this的指向密切相关。本篇文章我们将深入探讨这个关键词的...【详细内容】
2021-12-06  Tags: JavaScript  点击:(19)  评论:(0)  加入收藏
概述DOM全称Document Object Model,即文档对象模型。是HTML和XML文档的编程接口,DOM将文档(HTML或XML)描绘成一个多节点构成的结构。使用JavaScript可以改变文档的结构、样式和...【详细内容】
2021-11-16  Tags: JavaScript  点击:(34)  评论:(0)  加入收藏
一、判断是否IE浏览器(支持判断IE11与edge)function IEVersion() {var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串var isIE = userAgent.indexOf("comp...【详细内容】
2021-11-02  Tags: JavaScript  点击:(39)  评论:(0)  加入收藏
Null、Undefined、空检查普通写法: if (username1 !== null || username1 !== undefined || username1 !== &#39;&#39;) { let username = username1; }优化后...【详细内容】
2021-10-28  Tags: JavaScript  点击:(50)  评论:(0)  加入收藏
1、前言async函数,也就是我们常说的async/await,是在ES2017(ES8)引入的新特性,主要目的是为了简化使用基于Promise的API时所需的语法。async和await关键字让我们可以用一种更简...【详细内容】
2021-09-17  Tags: JavaScript  点击:(61)  评论:(0)  加入收藏
为什么要使用 debugger这篇文章将介绍如何使用断点来进行 JavaScript 调试。在读这篇文章之前,需要问一个问题:为什么要使用断点来进行调试?我们首先需要认可使用断点的是必要...【详细内容】
2021-08-26  Tags: JavaScript  点击:(65)  评论:(0)  加入收藏
JavaScript 可以做很多好玩的事, 从复杂的框架到处理API,有太多的东西需要学习。但是,它也能让我们只用一行就能做一些了不起的事情。1. 获得一个随机的布尔值(true/false)该函数...【详细内容】
2021-08-19  Tags: JavaScript  点击:(76)  评论:(0)  加入收藏
JavaScript 提供了大量不同的处理数组的方法,这里花几分钟时间介绍 8 个项目中可以用到的数组方法。1. Array.map()使用.map() 方法,可以创建一个基于原始数组的修订版数组。....【详细内容】
2021-08-19  Tags: JavaScript  点击:(95)  评论:(0)  加入收藏
▌简易百科推荐
1、通过条件判断给变量赋值布尔值的正确姿势// badif (a === &#39;a&#39;) { b = true} else { b = false}// goodb = a === &#39;a&#39;2、在if中判断数组长度不为零...【详细内容】
2021-12-24  Mason程    Tags:JavaScript   点击:(5)  评论:(0)  加入收藏
给新手朋友分享我收藏的前端必备javascript已经写好的封装好的方法函数,直接可用。方法函数总计:41个;以下给大家介绍有35个,需要整体文档的朋友私信我,1、输入一个值,将其返回数...【详细内容】
2021-12-15  未来讲IT    Tags:JavaScript   点击:(19)  评论:(0)  加入收藏
1. 检测一个对象是不是纯对象,检测数据类型// 检测数据类型的方法封装(function () { var getProto = Object.getPrototypeOf; // 获取实列的原型对象。 var class2type =...【详细内容】
2021-12-08  前端明明    Tags:js   点击:(23)  评论:(0)  加入收藏
作者:一川来源:前端万有引力 1 写在前面Javascript中的apply、call、bind方法是前端代码开发中相当重要的概念,并且与this的指向密切相关。本篇文章我们将深入探讨这个关键词的...【详细内容】
2021-12-06  Nodejs开发    Tags:Javascript   点击:(19)  评论:(0)  加入收藏
概述DOM全称Document Object Model,即文档对象模型。是HTML和XML文档的编程接口,DOM将文档(HTML或XML)描绘成一个多节点构成的结构。使用JavaScript可以改变文档的结构、样式和...【详细内容】
2021-11-16  海人为记    Tags:DOM模型   点击:(34)  评论:(0)  加入收藏
入口函数 /*js加载完成事件*/ window.onload=function(){ console.log("页面和资源完全加载完毕"); } /*jQuery的ready函数*/ $(document).ready(function(){ co...【详细内容】
2021-11-12  codercyh的开发日记    Tags:jQuery   点击:(35)  评论:(0)  加入收藏
一、判断是否IE浏览器(支持判断IE11与edge)function IEVersion() {var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串var isIE = userAgent.indexOf("comp...【详细内容】
2021-11-02  V面包V    Tags:Javascript   点击:(39)  评论:(0)  加入收藏
Null、Undefined、空检查普通写法: if (username1 !== null || username1 !== undefined || username1 !== &#39;&#39;) { let username = username1; }优化后...【详细内容】
2021-10-28  前端掘金    Tags:JavaScript   点击:(50)  评论:(0)  加入收藏
今天我们将尝试下花 1 分钟的时间简单地了解下什么是 JS 代理对象(proxies)?我们可以这样理解,JS 代理就相当于在对象的外层加了一层拦截,在拦截方法里我们可以自定义一些个性化...【详细内容】
2021-10-18  前端达人    Tags:JS   点击:(51)  评论:(0)  加入收藏
带有多个条件的 if 语句把多个值放在一个数组中,然后调用数组的 includes 方法。// bad if (x === "abc" || x === "def" || x === "ghi" || x === "jkl") { //logic } // be...【详细内容】
2021-09-27  羲和时代    Tags:JS   点击:(58)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条