Android开发为什么要学习JavaScript?
这个其实也可以不学。正如我之前在《黑客与画家》的读书感悟中的介绍(传送门),编程语言会返过来对程序员的思维造成一定的影响,现在用多了Java 6做为开发语言的Android应用开发人员学习一门动态语言是很有必要的。所以,我觉得你可以不学JavaScript,但一定要选择一门动态语言(如Python或者Ruby)来体验一下。
学习JavaScript的如处:
- 前端、后端和移动端现在都可以用JavaScript开发,这个好处是显而易见的。
- JavaScript语言很简洁,有很多的学习资源;
- 记得著名的Atwood定律吗?“凡是能用JavaScript写出来的,最终都会用JavaScript写出来。 ”
即使不介绍JavaScript语言本身的好处,单微信小程序选择JavaScript开发都可以引起我们的重视。对于很多移动端的开发来说,React Native、Weex或者微信小程序对我们是一种冲击,但其实也是机会不是吗?你至少比只会JavaScript开发的人更了解原生,有更多的经验,我们不妨抛弃以前的语言偏见(或者看不到其他语言的短见),来体验一把JavaScript带给我们的全新感受。
JavaScript的历史
1995年面市的JavaScript其实和Java关系并不大(除了借鉴一些语法样式),在当时有可能只是做为一种营销手段,所以才效仿当时已颇为有名的Java,将名子由最初的LiveScript改为JavaScript。稍微了解一下JavaScript的语言规则就会发现,JavaScript和Python或者Ruby这样的轻型脚本语言,或者Lisp之类的以函数作为主体的程序设计语言很相似。
JavaScript简史:
网景公司和微软公司都在开分各自的JavaScript的实现版,为了防止因两家公司独自开发而导致JavaScript分裂及其他的一些问题,网景公司提出了名为Ecma Interational的JavaScript标准化组织,将语言规则的制定权交给了中立的标准化组织。
所以,现在你接触的JavaScript是一种符合ECMAScript标准的程序设计语言,虽说某些时候JavaScript会是ECMAScript标准的超集,往往很多功能是先由JavaScript实现最后才会被ECMAScript定为标准。即是说ECMAScript的标准有很多个实现版本,如微软的IE、Google的Chrome都有各自的JavaScript引擎,兼容老板本的IE也是一个让开发头痛的问题。
目前主流的流览器都支持ECMAScript 5版(到了2012年底,所有主要浏览器都支持ECMAScript 5.1版的全部功能),2015年6月,ECMAScript 6正式发布,并且更名为“ECMAScript 2015”。ECMAScript 6版加入了些新的元素,不过浏览器还不完全支持ECMAScript 6的语法,所以之后你会遇到一个转换程序帮助你把E6的代码转换成E5的。
太多的细节现在也不需要知道得太多,我们只要有一个概念:ECMAScript是规范,而每个浏览器产商都有各自的实现。
JavaScript的特点
JavaScript程序设计语言有如下几个特点:
- 解释型语言
- 类似于C和Java的语法结构
- 动态语言
- 基于原型的面向对象
- 字面量的表现能力
- 函数式编程
稍后的章节我们会解释这几个特点。2009年,Node.js项目诞生,它标志着JavaScript可以用于服务器端编程,从此网站的前端和后端可以使用同一种语言开发。
在Node.js把JavaScript的领域扩展到后端之前,人们的印象中JavaScript大多数用在客户端(浏览器),所以JavaScript和DOM感觉密不可分,但实际上DOM对于客户端JavaScript来说,仅仅是一个宿主对象。JavaScript中对于不同的运行环境,有着不同的内置宿主对象,浏览器客户端JavaScript的全局对象被称作window对象。在启动中,JavaScript从宿主环境获取的对象树被称为宿主对象。
DOM(Document Object Model) 是一套对文档内容进行抽象和概念化的方法、是对外提供的操纵浏览器内容的API。JavaScript对网页进行的所有操作都是通过DOM进行的、用于改变浏览器呈现的内容与方式。
在Android应用中或者说在传统的编程习惯中,我们喜欢找到main函数(程序的入口),这样我们才能知道代码从哪里开始执行。在Android应用中,一个APK的应该是以Application.onCreate做为起点。
在Android的Application中,虽然还有attachBaseContext会更早被调用,但我们一般还是以onCreate做为自己应用的起点。
而JavaScript代码的执行起点在哪里呢?
JavaScript是一种描述型脚本语言,它不同于java这种编译性语言,它不需要进行编译成中间语言,而是由浏览器(或者执行引擎)进行动态地解析与执行。而你熟知的Android应用是会被编译成字节码(dex),最后由DVM虚拟机执行dex。
JavaScript的代码块被读取解析时,执行顺序是至上而下的。引擎是从JavaScript文件的顶部由上到下逐条执行语句,直到文件尾部执行完每一条代码。没有我们所说的main入口。而且一个脚本定义的函数或全局变量,后面加载的脚本也可以调用,这也是一个让静态语言习惯的开发不适应的地方。
环境准备
环境其实很容易准备,一是直接利用浏览器客户端,建议用Google的Chrome,IE有些版本的话问题比较多。所以我们需要写一个Html解本来引入我们的JavaScript代码,然后在浏览器打开这个Html文件即可运行我们的代码。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>学习JavaScript</title>
</head>
<body>
<h1>学习JavaScript</h1>
<p>
Android开发学习JavaScript系列(简书:goeasyway)
</p>
<script>
console.log('Hello World!');
</script>
</body>
</html>
用Chrome浏览器打开这个文件,在Console选项可以看到console.log的执行结果:
Mac上打开 Chrome DevTools ,并聚焦在 console 上的快捷键为:Cmd + Opt + J。
也可以在任意的页面元素中鼠标右键,选择审查元素(Inspect Element)进入。
二是利用Node.js(安装请点击:https://nodejs.org ),写JavaScript代码后通过“node xxx.js”查看结果。如testjs.js文件内容如下:
console.log('Hello World!');
输入如下命令可以看到结果。
node testjs.js
当然还有其他的方式来测试代码,如一些在线测试JavaScript的网站。不过对于我们之后的学习来说,有这两种方式已经足够了。至于IDE工具大家可选择自己喜欢的,如Sublime、Webstorm或者其他的一些文本编辑器都可以。