1.关于JavaScript的介绍

初识JavaScript

译者:张帆

JavaScript有何特别之处?我们可以用它来实现什么?有哪些其他技术也能发挥很好它的作用?,让我们来一探究竟。

JavaScript是什么?

JavaScript一开始设计出来的初衷是“使网页更加生动”。
JavaScript里的程序称为脚本,脚本可以写在HTML里,并且当页面加载时会自动执行。脚本被提供并且可以作为纯文本来执行。它们不需要一个特别的准备或者编译器来运行,从这方面说,JavaScript与另一个叫Java的编程语言有着巨大的差异。

为什么会被称为JavaScript?

当JavaScript最初被设计出来的时候, 有另一个名字:“LiveScript”。但当时Java十分流行,因此,将JavaScript这一新的语言定位为Java的“小兄弟”将会有助于其发展。
随着JavaScript的不断发展,它已经变成一个完全独立的编程语言,它有自己的 ECMAScript文档,而且和java再无任何关系了。

如今,JavaScript不仅可以在浏览器里运行,而且还可以在服务器端运行,或者说只要有JavaScript引擎,任何设备都可以运行JavaScript。浏览器中都内嵌了一个JavaScript引擎,有时候我们称它为“JavaScript虚拟机”。
不同的引擎会有不同的内核名称,比如:

  • V8——在Chrome和Opera中使用
  • Gecko——在Firefox浏览器中使用
  • 还有一些其他的类似于不同版本IE浏览器使用的“Trident”、“Chakra”,Microsoft Edge使用的“ChakraCore”, safari使用的“Nitro”和“SquirrelFish”等等。

以上内容很好记,因为我们经常在网络开发者的文章中可以看到它们,而且我们也会用到这些,比如:V8支持X功能,那么很可能这个功能能够在Chrome和Opera中应用。

JavaScript引擎是如何工作的?

JavaScript引擎工作细节很复杂,但基础原理很简单。

  1. 脚本以纯文本的形式被编写和分发(可以通过“javascript minifiers”工具进行压缩和优化)
  2. JavaScript引擎(如果是浏览器的话,指内嵌引擎)会先解析脚本,然后编译成计算机语言
  3. 最后运行脚本,而且速度很快

引擎在执行过程的每个阶段都会进行优化,它甚至可以在运行的时候监控脚本,分析经过它的数据,并根据这些知识对机器代码进行优化。这就是代码运行如此之快的原因。

浏览器内嵌的JavaScript能做什么?

如今的JavaScript是一个“安全”的编程语言,它不提供对内存和CPU的低级访问,因为它一开始就是为那些并不需要这些的浏览器设计的。它的能力很大程度上依赖于运行JavaScript的环境。例如,Node.JS支持JavaScript读取/写入任意文件,执行网络请求等等。浏览器的JavaScript能够处理与网页操作,和用户以及服务器后端交互的任何事情。
比如,浏览器的JavaScript可以处理:

  • 在页面新建一个HTML,修改已有内容和样式
  • 根据用户操作做出反应,如鼠标点击、指针移动以及按键操作
  • 向远程服务器发送网络请求,下载和上传文件(就是我们所说的“AJAX”和“COMET”技术)
  • 获取并设置cookies,向访问者提问,显示信息
  • 记录浏览器端的数据(“本地存储”)

浏览器内嵌的JavaScript还不能做什么?

浏览器中的JavaScript能力因考虑用户的安全原因而受到限制,它目的是防止恶意网页访问私人信息或损害用户的数据。
比如以下受限制的例子:

  • 网页中的JavaScript可能没办法读取/写入硬盘上的任意文件,没办法复制、执行程序,它没有直接访问操作系统的功能
    现代浏览器允许JavaScript对文件进行操作,但是这种访问是有限的,并且是在用户进行某些操作后才会提供,例如在浏览器窗口“删除”文件或者是通过<input>标签来选择文件。
    有一些方法可以与摄像头/麦克风和其他设备进行交互,但是需要用户明确的许可,所以一个支持JavaScript的网页可能没办法偷偷地调用摄像头观察周围的环境并把信息送给国家安全局。
  • 不同的窗口一般来说是互不相干的,有时候会有联系,比如一个窗口用JavaScript打开另一个窗口,但在这种情况下,如果它们来自不同的站点(来自不同的域、协议或端口),就算来自一个页面的JavaScript也可能无法访问其他页面。这被称为“同源策略”。为了解决这个问题,这两个页面必须包含一个处理数据交换的特殊JavaScript代码。
    对用户的安全来说,这又是一个限制,一个用户偶尔打开的http://anysite.com 的页面不能打开或访问另一个网址为 http://gmail.com 浏览器窗口,也无法从那里窃取信息。
  • JavaScript可以轻松地通过网络与当前页面来自的服务器进行通信,但是它从其他站点/域名接收数据的能力受到了削弱,虽然有这个可能,但需要从远程服务器获取明确的协议(在HTTP头信息显示),但这也是安全限制。

如果JavaScript在浏览器之外比如服务器端运行,这么多限制就不存在了,现代浏览器允许安装扩展插件,这样可能会获取更多的权限。

什么使得JavaScript如此不同?

关于JavaScript,至少有三件很棒的事情:

  • 与HTML/CSS完全集成
  • 简单的事情简单做
  • 被所有主流浏览器支持并默认启用

以上,只存在JavaScript中并没有其他的浏览器技术。
这就是JavaScript如此不同的原因,这也是为什么JavaScript是目前创建浏览器交互界面使用最广泛的工具。
当我们准备学习一项新技术的时候,最好去观望一下它的未来,所以,让我们来看看包括新语言和浏览器能力在内的现代趋势。

JavaScript之外的语言

JavaScript的语法并不符合每个人的需求,不同的人希望有不同的功能细节。这很正常,因为项目和需求对每个人来说都是不同的。所以,最近有很多新的语言如雨后春笋般冒出来,浏览器在运行他们之前会先将它们转化成JavaScript。
现代工具能够使这种转化非常快捷和透明,这实际上允许开发者使用另一种编程语言去编码,然后它会自动进行转化。
这里是一些类似于这种语言的例子:

  • CoffeeScript 相对JavaScript来说,像是“语法糖果”,它使用更简短的语法,允许使用更加精确清晰的代码,通常使用Ruby的人会喜欢它。
  • TypeScript专注于添加“严格的数据输入”,以简化复杂系统的开发和支持。它是由微软开发的。
  • Dart 是一个独立的语言,它有自己的引擎,通常在非浏览器环境中运行(比如移动app),它最初是由谷歌提供的,作为JavaScript的替代品,但是现在,浏览器需要将它转换成JavaScript,就像上面的一样。

还有更多其他的语言,当然,即使我们使用其中一种语言,我们也应该了解JavaScript来真正理解我们在做什么。

总结

  • JavaScript最初被创建为一种基于浏览器的语言,但是现在它也被用于许多其他的环境中。
  • 如今,JavaScript有一个独特的地位,它是一种被广泛采用的浏览器语言,与HTML / CSS完全集成。
  • 有很多语言可以“转换”到JavaScript并提供某些特性。在掌握了JavaScript之后,建议至少简要地看一下它们。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容