初识JavaScript
初识JavaScript
回顾C语言
作为一个将C语言熟记于胸的程序员,你一定对“编程”这一充满哲学色彩的活动产生了自己独特的理解吧!
(什么?你还没有理解“编程”的世界观?那不妨来设计看看自己的语言吧!)
在笔者看来,编程即是人脑思维和计算思维沟通的过程。当然在这其中需要解构各种各样的计算原理与计算方法,用编程语言来组合成各种各样的算法,去操纵各种各样的虚拟对象实现各样的过程。
一门基于计算思维的编程语言拥有计算思维所映射的共通之处。
从我们学习的C语言来看,编程语言字面上的组合元素不就是:关键字、数据、变量名、运算符、标记符(语句)。紧接着由这5者按照语法组合成一个个的语句、形成一个个的代码块、最终组织成能够在一定环境下运行的代码。字面上的语法是有限的,但是组合变化却是无限的。
**首先是数据与数据结构。**在C语言中我们学习了char,int,float,double,long long int,long double等等类型的数据,还有string库引入的string以及C++引入的bool等。不同的数据类型有不同的数据结构,存放着不同种类的数据。C语言还引入了*指针类型,用于存放&地址类型的数据;引入了数组,用于提供连续数据的映射与存放。在这其中,涉及到了各种地址与存放空间的操作,使C语言复杂而灵活多变。
C语言还提供了更进一步的组合型数据结构:struct,union,enum,提供其他情况的数据联合模式。我们根据结构体和指针的特点结合形成链表结构,并学习了链表的各种操作,这是数据结构的实例。C/C++的STL库还提供了各样预设的数据结构类型,如:vector,array,list,forward_list,deque,queue,priority_queue,stack,set,multiset。(向量、列表、双向链表、单向链表、双头队列、队列、优先队列、栈、集合、重复元素组)等。当然还有以结构和数组为基础的前向星、线段树、平衡树等非库结构。
**接着是逻辑结构。**顺序结构;if else以及else if的条件结构以及switch(){case x: break;}的条件结构以及嵌套条件结构;for(;😉{}的初始化循环条件、跳出循环条件、每步运行的语句于一体的for循环结构,单纯指定跳出循环条件的while(){}、do{}while()循环结构;还有一些控制代码运行的关键字如break,continue,goto等。
**其次是数据运算的方法。**C语言提供了各式的运算符,以及组合成一个运算操作的函数结构,传入各样的参数,进行操作而输出或不输出结果。
C语言语义极其丰富,极少的符号与关键字就可以表示各样的意思。而解决语义丰富与理解矛盾的方法就是,调整运算符的优先级。数据类型、变量名、()、[]、*,5个部分进行组合就可以产生数组、指针、函数等等不同类型的表达式。
而各式各样函数的调用运算过程的组合可以产生递归结构,与循环过程的组合可以模拟递推过程。这些算法结构与数据结构的交互,构成了广度搜索、深度搜索、dijkstra、SPFA、并查集等算法,对实际问题求解带来着深层次的思维改变。
一门运用于实际场景的编程语言拥有与场景搭配的解析模式。
C语言作为底层语言,设计之初用于替代汇编,运行模式上属于先编译后执行的编译型语言,C++继承了这一特点;而Java为适配各个平台,在运行前需要先把.java编译为.class,进而在各个平台上由JVM解释并执行,C#也设计为该特性;Python的运用场景包括前端(网站前台部分,运行在浏览器上展现给用户浏览的网页部分)与后端,为解释型。
一门运用于解决问题的编程语言拥有解构问题的独特思想。
C语言基于数据的底层逻辑,因而更加注重方法的实现过程、数据的处理过程。C++语言引入对象,以“万物皆对象”的模式去理解计算单元和模拟单元,因而更加注重类的设计与建构,最终组合以解决问题。LISP以及采取函数式思想的Scala基于lambda演算的思维,将函数式解决问题的思想带到编程语言中。
从C语言到JavaScript
因此,从一门编程语言到另一门编程语言的学习中,重点在于语法的习惯与思维方式的转变。
JavaScript自然基于计算思维,因此必然以关键字、数据、变量名、运算符、标记符的形式进行组合,拥有与C语言共通而稍有差异的数据类型、数据结构模式,甚至拥有与C语言语法相同而超集的逻辑结构即顺序结构、条件结构、循环结构等,也拥有函数的处理模式。因此JavaScript可以写出C语言能够设计的各样的算法以处理各样的问题。
但是,JavaScript作为一门前端语言,运用场景在浏览器的实时加载与解析之中,因此设计为不需要经过编译而直接为浏览器所解释而执行。所以JavaScript是解释型语言,因此大多数网页前段的JavaScript脚本代码透明可见。解释型语言与编译型语言的一个不同之处在于,编译型语言的语法错误在编译时会编译不通过从而整个程序不可运行;而解释型语言的语法错误在解释运行时不通过时,其他部分依然解释成功并运行出了结果,因此语法错误的影响范围会降低而代码出现错误被检查出来的概率也相应地增大了。
在浏览器中,JavaScript作为控制各个元素的脚本语言,自然得跟浏览器的各种元素各种属性打交道。此时偏向过程的思想可能不适合解决这样的问题。对浏览器、网页的抽象有助于帮助分类地、分别地操控元素,面向对象的思想极大地契合HTML元素与节点的思想。因此采用面向对象的思想是JavaScript 的一个重要的特点,也是与C语言较大差异之处。此外,JavaScript还支持函数的柯里化,并且在ES6引入了lambda表达式(箭头函数),为函数式编程提供了更多的语法基础。可见,JavaScript不是采用唯一编程思想的思想性实践语言(如LISP),而是博采众长,以最大程度便利于前端开发。
事实上,前端开发中,完整的JavaScript由3部分组成,即核心语言、文档对象模型(DOM)、浏览器对象模型(BOM)。而JavaScript对于浏览器、网页的操纵也离不开DOM与BOM提供的各种对象、各种对象的属性与方法。
Hello World
在HTML文件中添加JS脚本支持,即加入语句块
<script>
</script>
在语句块内调用DOM的文档对象document,并调用其方法write(""),其中参数为一段字符串。
调用对象中的方法的方式与C语言中调用结构体内参数的方法类似,即以符号英文句号.
来引用对象中的方法。
document.write("Hello World");
现在,正式进入JavaScript的世界吧!