这个颜色是正文,这个颜色是正文旁侧栏或者up自己添加的额外内容,这个颜色是专业术语、核心概念。
JS是Web的编程语言。
几乎所有现代网站都会用到JS,以及所有现代浏览器——PC里,游戏主机里,平板里,智能手机里,都自带JS解释器。
JS是Web开发者必学的三种技术之一:HTML表示网页的内容,CSS展现网页的外观,JS决定网页的行为。
||
如果你学过其他编程语言,有助于你理解JS是一门高级,动态,弱类型(untyped),适用于OOP和函数式编程的解释型编程语言。
JS句法(syntax)派生自Java,第一类(first-class)函数来源于Scheme,基于原型的继承机制取材于Self。
JS名字里虽带Java,但和Java无半点儿关系,二者存在很多不同。
JS经过长期发展,从最初的脚本语言,逐渐进化成通用目标(general-purpose)语言。
||
JS由网景公司创造,而JS商标则是Sun公司用来描述网景的语言实现(implementation of the language)的。
网景把语言提交给ECMA(European Computer Manufacturer's Association,欧洲计算机制造商协会)做标准化,因为商标缘故,另起别名ECMAScript。
微软为了规避商标问题,用JScript称呼自己的语言实现。
但习惯难改,JS这个名字广为人知,而ECMAScript(ES)更多用来指语言标准。
||
老版犀牛书讲的是ES5标准。
||
光有语言不足以开发,还需要由一个平台(platform),或标准库,或API来提供一些功能,比如I/O功能。
JS语言核心(core JS language)定义了一个最小API(minimal API),用来处理文本,数组,日期和正则表达式,但没提供I/O功能。
I/O以及一些诸如网络,存储,图形学等复杂功能由JS所处的(JS is embeded)“宿主环境(host environment)”提供。
通常宿主环境就是浏览器。
而在浏览器环境中的JS加上基于浏览器(browser-based)的API叫做“客户端JS”。
||
学习JS,需要准备一个JS解释器。但并不用主动搜索下载安装它,因为浏览器里自带,随便哪个浏览器都行。
||
打开浏览器的开发者工具,选中Console标签,这就是JS解释器了。
||
所有浏览器都实现了一个简单的控制台(console)API。
你可以使用函数
在控制台显示文本,可以用来debug时显示信息。
还有一个函数
用处和上面函数一样,但它是在网页里弹出一个模态对话框(modal dialog box)。
||
JS的注释
变量是某个值的符号化?名字(symbolic name)
给变量赋值
除了数字值,JS还有其他类型的值
||
除了这些类型,JS中还有最重要的两种类型——对象和数组。
对象是名字/值对(name/value pair)组成的合集(collection),或者说字符串到值的映射(string to value map)的合集。
插一段,在解释器里直接输入对象,有些麻烦,不好调格式,我们这样:
插播完毕。
我们可以取用对象里的属性值
数组,就是带有数值索引的列表(numerially indexed lists),举例就是排好队,从头开始报数,1,2,3,4,5,但编程里面的是从0开始计数,0是第1个,所以索引是0,1,2,3,4,...
数组元素可以是对象,对象属性值可以是数组。
数组元素也可以是数组,俄罗斯套娃。
||
上面这种叫做初始化表达式(initializer expression)。
那问题来了:啥是表达式?
表达式是JS中的一种短语(phrase),它可以被求值(evaluated,动词)从而产生一个值。
使用 . 和 [] 来获取属性值和数组元素也是一种表达式。
||
除此之外还有加入运算符(operator)的表达式,就像数学里做加减乘除那样。
运算符作用在值(这时的值又叫操作数operands)上,产生一个新值。
简写运算符
相等运算符:测试两个值是否相等或不等。
关系运算符:小于,大于,小于等于,大于等于。
这两种表达式求出的值是布尔值。
如果说表达式是JS的短语,那么JS的句子叫做语句(statement)。
以分号结尾的就是语句。
语句和表达式有很多重叠之处,一般来讲的区分方式是:
表达式只产出一个值,但没“做事儿”(doesn't do anything)——指没改变程序的状态(state)。
而语句,它没有值,或者有值但我们不关心这个值,但它改变了程序的状态。
在上面的代码里看到了变量声明语句,它引入了一个变量到程序里,改变了程序状态。
赋值语句,改变了变量的值,也改变了程序状态。
||
接着讲另一个概念——函数:它是一个具有名字的,带有参数的JS代码块(block),你可以只定义一次,然后在程序中不同位置调用(invoke)任意多次。
我们把函数作为值赋给对象里的属性,就得到了方法。
所有JS对象都有方法。
这些是标准库自带的,说白了就是别人写好,你能直接用的方法
你也可以写你自己的方法。
||
说完了简单的语句,下面来介绍控制结构语句——分支、循环
分支
while循环
for循环
||
我们以一个2D平面内坐标点为例。
创建自定义JS对象,首先要写一个函数,这个函数有特殊的含义和名字,叫构造器。用构造器初始化一个新的Point对象。
然后我们使用构造器函数,传入横纵坐标参数,创造新的Point对象。
但现在这个对象里没有方法,我们以一个特别的方式添加方法。
我们不是往创建的对象里添加方法,构造器是函数,自然也没有属性。
但构造器有一个与它关联的对象,叫做原型,我们把方法赋给原型的属性。
接着
||