也许你听过有人说学会了一门编程语言以后再学其他编程语言就很快上手了,其实这句话是不对的。在已经有编程语言占领了市场以后,又有新的编程语言被创造出来并且对外发布投入使用,多半是因为现有的编程语言在解决某方面问题时不尽人意;如果这个新的编程语言还变得很流行的话,那一定是因为这个编程语言的某些特点存在很大的优势。
javascript语言能成为现代互联网应用开发使用范围最广的编程语言其自身特点也是十分显著的。
一 学习任何一门编程语言首先要看的就应该是这个编程语言的变量类型。
1. JS是动态类型的编程语言。
js和python、php这类的编程语言一样,声明变量时无需指明变量类型,比如 var a,就是一个变量声明,既可给a赋值一个数值 a=3 也可以让a指向一个字符串 如 a=“hello”。
与动态类型相对的就是静态类型了,比如java 、c、 c++,静态类型的编程语言声明变量时需要说明变量类型,且一旦确定变量类型后,变量就只能存放这种类型的值,常见的静态类型声明时这样的 int a又或者 var a:Integer 。
2.JS是强类型语言
关于这一点,很多人可能都存在误解,不过这也不奇怪,因为很多学校早期使用的计算机c语言教材中就出现了错误,导致很多人都弄错了。
与强类型对应的是弱类型,java是强类型,但是C语言是弱类型,js和python是强类型,php是弱类型。区分是不是强类型关键是看变量所指向的存储单元中保存数据时是否区分数据类型而不是看声明变量时有没有指明类型。
以c语言为例,比如变量int a所在内存中保存的数据是 b’00000000 00000000 00000000 01000001’ ,很显然这只是一个二进制的值,尽管它的声明是int类型,但它在程序中记录的不一定就是一个数值,它表示什么含义我们只能通过阅读程序才能确定,如果控制台输出时使用 c%,那么输出a的到的事字符 ‘A’,如是使用d%,输出的就是数值65,如果用于信号输出,它表示的就是输出电位。
与c、php语言不同,js是强类型语言,尽管作为动态类型的js声明变量时不需要指定类型,但是一旦赋值后,js在保存变量的时候除了记录值本身,还会标注出变量值的类型,比如在js中a=3,a=3.0 a=“3.0”就是完全不同的3个值,强类型在计算的时候需要做类型转换操作,虽然有些变量转换过程是隐式转换(编译器完成)。
二 编程语言的程序设计模式
在本文开始时,笔者提到过很多人认为学会一门语言以后再看其他语言就能很快上手的误解,存在这个误解大概是因为普通人在学第一个编程语言时会遇到的一个巨大障碍,那就是程序逻辑。人类要想让计算机帮助人类解决问题就必须学会像计算机一样思考,顺序、循环、分支就是程序逻辑的基础,大学的c语言考试基本上也就是考核程序逻辑为主。
然而程序逻辑只是人类思考问题的一个角度,一种思维框架而已,程序逻辑是高度数学化的,即便不是工程师人类也需要这种逻辑思维,在美国,小学生就开始学习编程了,这不是为了让小孩子长大以后都去当工程师,而是教会他们一种思维方式,就像经济学家、律师也都有各自的思维框架一样。
因此能用一门编程语言写顺序、循环、分支并不能算上手一门编程语言,真要说上手,至少需要掌握这门编程语言所推崇的设计模式。
JS是函数式的,它支持对象但非面向对象。
面向对象是设计模式吗?对没错,面向对象就是在解决复杂的应用开发中通过抽象业务而诞生的一种设计模式,早期的C语言本身是过程话的编程语言,但是这不妨碍C语言的使用者利用C语言实现面向对象,而面向对象的使用如此的频繁,于是C++诞生了,并且把面向对象直接集成到饿了语言特性里面,后面的java又对C++做出了优化。
JS语言本身并没有实现面向对象,而是通过原型机成链对对象继承做出了支持。即然面向对象只是一种设计模式,js当然也可以自己动手实现面向对象编程。
不过严格意义来讲,如果你真的希望用好js,那么类似java这样的完全面向对象编程并非最适合js的设计模式,因为js语言本身被设计为函数式的,函数式编程对人更友好。如果想要写出真正漂亮的js代码,建议读一读js函数式编程指南。(第3张图片中的这本书)
三 容器类型
掌握了变量的类型与使用,也知道了编程范式与适合的设计模式,那么接下来就要看容器类型了,现代化的编程语言多数都内置了大量好用的容器类型,比如数组,字典 ,链表等。
js中最常用的容器类型是由键值对构成的对象和可变数组,配合json类型表示方法使用起来十分灵活和方便,如果是在某些专业领域使用容器,那么js还提供了更为高效的容器类型,比如float32类型的列表,在最新的js官方文档中可以看到完整的容器类型和具体用法。
四 应用领域
js语言和语法特点了解清楚以后,那么我们就应该看看这门语言擅长的领域了。
1. dom编程,所有现代浏览器网页交互都使用js,无论是写公众号h5页面还是做个企业门户,只要需要页面且需要用户交互那就一定少不了js,推荐一本适合新手看的入门好书《javascript dom编程艺术》,dom编程是非常适合新人的领域。
2. 图形图像编程,网页游戏、微信小游戏(小程序)、数据可视化等领域,js的应用也十分广泛,h5的canvasAPi,以及SVG编程都需要使用js,随着移动设备的芯片越来越强大,网页3维图形渲染在性能上也已经不是问题,因此基于WEBGL的应用也越来越广泛,由于图形图像编程对人数学功底要求较高,不建议新人从中这块着手,如果感兴趣的可以关注我,单独私信。
3.nodeJS,由于nodeJS社区的兴起,js在服务器端的应用开发应用也越来越多,尤其是在游戏领域,nodejs除了在服务器端表现出色外,对于js项目的构建和自动化也起到了很大的促进作用,因此,各种基于js的前端开发技术应运而生,比如大名鼎鼎的react 与react native,这方面也推荐两本书给大家,一个是NodeJS实战,另一本是react实战。