林大妈的JavaScript基础知识(一):JavaScript简史
前言:做一名Web设计师是一件令人兴奋的事。在Web技术中,JavaScript是一个经历从被人误解到万众瞩目的巨大转变,在历史的冲击中被留存下来的个体。因为JavaScript的引导,Web开发也从混乱无序的状态转变为需要经过严格训练才能胜任的工作。当大家谈论起Web开发时,自然会提到Web标准中的三门语言:①HTML(超文本标记语言)②CSS(层叠样式表)③JavaScript(没法翻译)。通常来说HTML和CSS总是占据着核心地位,但它们三者之间不存在对抗关系,反而是交融、互助的关系(尽管现在大家都在提倡各种分离的概念)。网页的重要意义是与用户进行交互。其中,JavaScript就是充当着使网页具备交互能力的程序设计语言。
JavaScript的出现
JavaScript是由Netscape(网景)和Sun(Java语言的起源,后被Oracle收购)两家公司合作开发的。在JavaScript出现前,尽管我们拥有“HTML(超文本标记语言)”这个工具,起初我们使用它来规范科研文献,但我们可以想象当时的HTML其实只是简单的超文本文档,只能完成基本的内容显示与跳转等功能。但JavaScript出现后,HTML瞬间从单一的文本升级为了具有强大交互性的工具。1995年,JavaScript出现在了Netscape Navigator 2浏览器中。
当时Netscape Navigator毋庸置疑地主宰了浏览器市场,微软推出的IE浏览器在他面前只是一个弟弟。在IE3出现时,微软发布了VBScript,同时以JScript为名发布了JavaScript的一个版本,跟上了Netscape的步伐。在竞争面前,Netscape和Sun公司联合ECMA(欧洲计算机制造商协会)对JavaScript制定了标准,终于出现了ECMAScript语言。而我们常说的ES5,ES6中的ES,其实就是ECMAScript的简写,而JavaScript实际上也就是ECMAScript。梗:我们常说的雷锋与雷峰塔的关系,跟Java与JavaScript的关系非常类似,后来大家以此调侃JavaScript。
JavaScript是一种脚本语言,它在一般情况下只能应用在Web浏览器去完成操作而很少像Java、C++这种编译型语言一样独立运行。因此,JavaScript具有与编译型语言的两种对立的特性:局限性和简单性。
最后要提出的是两个概念:
① 由于JavaScript提供了一些操控Web浏览器的手段,可以调整浏览器的窗口高度、位置等属性,这种办法被称为BOM(Browser Object Model),例如window对象就是BOM中的一 个较为核心的对象;
② HTML本身是树形的结构,JavaScript同样提供了许多操纵HTML树的方法,同样可以对它们进行属性的调整,这种办法被称为DOM(Document Object Model),例如document对象就是DOM中的一个较为核心的对象。DOM
在JavaScript编程中,有一个重要的概念叫作DOM(文档对象模型)。所谓的DOM,就是一种将文档内容进行抽象,以及赋予意义的方法。你也可以用我们程序设计中“类”里面的“方法”来理解DOM,因为本质上DOM就是一种API,JavaScript可以通过这些API更方便地操控标记语言中的元素。在现实世界中,我们人类对世界的认识也可以总结为一套类似的方法,称为WOM(该概念源自《JavaScriptDOM编程艺术》一书,个人认为非常地贴切),中文叫做“世界对象模型”。我们用“车”、“房子”、“树”云云来定义我们身边的事物,以此来称呼这些事物,我们身边的人也一定会在一瞬间内反应过来,“哦你讲的是这一个物品”。类比到HTML5中,我们用
像以上这些初级的、试验性质的、还未形成统一标准的DOM,我们把它称为“第0级DOM(DOM Level 0)”。
浏览器战争
时间来到了1997年,Netscape公司在6月发布了Netscape Navigator 4,对应的,微软也在10月发布了IE 4。两格浏览器都对早期的版本进行了改进,扩展了DOM,这意味着通过JavaScript可以完成更多的功能了。我们迎来了“DHTML(Dynamic HTML,动态的超文本标记语言)”的概念。区别于像HTML、JavaScript这些技术,DHTML只是一种概念。这个概念的意思就是:
① 使用HTML编写网页的元素;
② 使用CSS设置这些元素的样式;
③ 使用JavaScript操控页面、改变样式,以及实现动态的交互。尽管技术一直在发展,我们却迎来了噩耗:为了竞争,两种浏览器分别使用了两种不相容的DOM。虽然大家的目标都是相同的——实现美观动态交互性强的网页,但实现的方式却大相径庭。这使得开发网页的成本变得十分高,为了让使用不同浏览器的用户都可以浏览网页的内容,我们必须编写不同规范的代码。DHTML本来是绝对好的,它符合人类对科技发展的憧憬,但在实现的路上却因为某些商业原因遭遇了空前的困境。很快,DHTML被大家认定为“宣传的噱头”与“难以实现”。
标准化解决问题
浏览器制造商在以DOM为武器对抗时,浏览器开发工作十分困难。此时W3C(World Wide Web Consortium,万维网联盟)小组站出来了,他们制定了一个标准的DOM。而值得庆幸的是,浏览器制造商也肯放下敌意协作制定标准。1998年,我们迎来了“第1级DOM(DOM Level 1)”:
var pdisplay = document.getElementById('p').style.display
乍一看似乎并没有什么区别,事实上第1级DOM已经可以让任何一种程序设计语言对任何一种标记语言进行操控了,这是对未来HTML和XML发展的巨大推动(我们现在一般使用的是DOM Level 3)。浏览器战争结局以及后续发展
以前我们用的是windows 98 或者是windows XP之类的操作系统,里面通常会在桌面就有一个IE浏览器的快捷方式。我们通过这个缩影可以联想到,微软在浏览器市场份额上战胜了Netscape。时至今日,大家提到IE浏览器时,总是说它是罪恶的,微软后来自己也推出了Microsoft Edge浏览器。其中的原因就是IE浏览器在许多方式上不遵循W3C的标准,导致增大了许多开发上的负担。从2003年到现在,许多浏览器诞生了。苹果公司发布了它基于Webkit的Safari浏览器,从一开始就坚定不移地遵循W3C的标准;Firefox、Chrome、Opera这些被大家推荐使用的,以及其他浏览器们都对DOM有良好的支持,包括很多手机浏览器。2014年,HTML5诞生了,它与DOM、AJAX等等技术的配合,使互联网产生了巨大的飞跃,现代浏览器对于DOM特性的覆盖率高达95%,虽未到100%,但我们基本可以过上编写一个脚本可以在多处兼容运行的幸福生活了。最后
之所以花这么大篇幅在介绍JavaScript的历史时介绍了DOM和浏览器的发展,是因为它们是JavaScript的载体,我们必须也要重视DOM和浏览器兼容等知识的学习。以及我们需要感恩这些制定标准,效忠于科技发展的伟人们。多亏了标准化的DOM,我们才能在不同浏览器中实现一致的梦想。
林大妈的JavaScript基础知识(一):JavaScript简史的更多相关文章
- 【javascript基础知识】javascript中的转义序列和特殊数值常量
javascript的转义序列 \0 NUL字符(\u0000) \b 退格符(\u0008) \t 水平制表符(\u0009) \n 换行符(\u000A) \v 垂直制表符(\u000B) \f ...
- Javascript 基础知识学习--javascript中的参数传递都是按值传递的
ECMAScript中所有函数的参数传递都是按值传递的,无论参数是值类型还是引用类型的.过去我跟大多数人一样觉得跟传值类型相关. 自己写了一个测试的例子,确实如此 function add(a) { ...
- Javascript基础知识总结一
Javascript基础知识总结一 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...
- 学习javascript基础知识系列第二节 - this用法
通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...
- 学习javascript基础知识系列第三节 - ()()用法
总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...
- javascript 基础知识学习1
JavaScript 是脚本语言.浏览器会在读取代码时,逐行地执行脚本代码.而对于传统编程来说,会在执行前对所有代码进行编译.基础知识:1).JavaScript 对大小写敏感.JavaScript ...
- JavaScript 基础知识 - BOM篇
前言 本篇文章是JavaScript基础知识的BOM篇,如果前面的<JavaScript基础知识-DOM篇>看完了,现在就可以学习BOM了. 注意: 所有的案例都在这里链接: 提取密码密码 ...
- JavaScript基础知识(一)
一.JavaScript基础 1.JavaScript用法: HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 ...
- 林大妈的JavaScript基础知识(三):JavaScript编程(3)原型
在一般的编程语言中,我们使用继承来复用代码,做成良好的数据结构.而在JavaScript中,我们使用原型来实现以上的需求.由于JavaScript专注于对象而摒弃了类,我们要明白原型和继承的确是有差异 ...
- 林大妈的JavaScript基础知识(三):JavaScript编程(2)函数
JavaScript是一门函数式的面向对象编程语言.了解函数将会是了解对象创建和操作.原型及原型方法.模块化编程等的重要基础.函数包含一组语句,它的主要功能是代码复用.隐藏信息和组合调用.我们编程就是 ...
随机推荐
- 基于uReplicator复制的kafka主备集群间的切换策略
一.概述 目前基于中间件uReplicator实现了kafka集群间的迁移复制,可以实现跨区.跨云的kafka集群间复制同步,也可以实现kafka集群的冷热互备架构:在实现集群间同步以后,需要解决一个 ...
- spring 5.x 系列第1篇 —— springmvc基础 (xml配置方式)
文章目录 一.搭建hello spring工程 1.1 项目搭建 1.2 相关配置讲解 二.配置自定义拦截器 三.全局异常处理 四.参数绑定 4.1 参数绑定 4.2 关于日期格式转换的三种方法 五. ...
- 【Linux杂记】Linux配置静态IP地址,修改主机名、host
博主使用的系统是:乌班图16.04 1.设置静态IP方法如下: #sudo vim /etc/network/interfaces #修改如下部分: auto eth0//ipconfig命令查看网卡 ...
- 编译php扩展
在php编译安装好的情况下php扩展编译 php的很多模块都是以php的扩展形式来进行的.所以在php安装好的环境下需要用到之前安装时没有编译安装的php扩展的时候,这个时候编译安装php扩展就显得尤 ...
- 渐进式web应用开发---service worker (二)
阅读目录 1. 创建第一个service worker 及环境搭建 2. 使用service worker 对请求拦截 3. 从web获取内容 4. 捕获离线请求 5. 创建html响应 6. 理解 ...
- spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRpcEnv
在前面源码剖析介绍中,spark 源码分析之二 -- SparkContext 的初始化过程 中的SparkEnv和 spark 源码分析之四 -- TaskScheduler的创建和启动过程 中的C ...
- Maven下载Jar包(bat脚本)
1.创建一个bat文件叫download.bat 2.里面写入以下代码 call mvn -f pom.xml dependency:copy-dependencies 3.创建pom.xml文件 4 ...
- 【POJ - 2386】Lake Counting (dfs+染色)
-->Lake Counting 直接上中文了 Descriptions: 由于近日阴雨连天,约翰的农场中中积水汇聚成一个个不同的池塘,农场可以用 N x M (1 <= N <= ...
- 微信小程序源码
内带scroll滚动轮播:如图: 微信小程序开发工具:微信开发工具: 文件目录: images:小程序的图标 pages:小程序页面 utils:方法js git地址:https://gi ...
- OCR文字识别笔记总结
OCR的全称是Optical Character Recognition,光学字符识别技术.目前应用于各个领域方向,甚至这些应用就在我们的身边,比如身份证的识别,交通路牌的识别,车牌的自动识别等等.本 ...