当前位置:首页|资讯

1

作者:入栈考试不及格发布时间:2024-11-03

这个颜色是正文,这个颜色是正文旁侧栏或者up自己添加的额外内容,这个颜色是专业术语、核心概念。

犀牛书(老版)

第一章 介绍JS

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解释器了。

Firefox浏览器开发者版

如图

||

所有浏览器都实现了一个简单的控制台(console)API。

你可以使用函数

在控制台显示文本,可以用来debug时显示信息。

还有一个函数

用处和上面函数一样,但它是在网页里弹出一个模态对话框(modal dialog box)。

||

1.1 JS核心 初识JS

JS的注释

变量是某个值的符号化?名字(symbolic name)

给变量赋值

输入x,回车,JS解释器会识别出这是个变量,然后对它求值(evaluate),变量求值就是自己关联的值,也就是之前被赋给它的值,所以解释器输出0。

除了数字值,JS还有其他类型的值

||

除了这些类型,JS中还有最重要的两种类型——对象和数组。

对象是名字/值对(name/value pair)组成的合集(collection),或者说字符串到值的映射(string to value map)的合集。

插一段,在解释器里直接输入对象,有些麻烦,不好调格式,我们这样:

左边算一个简单的文本编辑器,输入完JS代码,点 ×
发现输入的代码都复制到了解释器里,然后回车,运行

插播完毕。

我们可以取用对象里的属性值

空对象就是没有属性的对象

数组,就是带有数值索引的列表(numerially indexed lists),举例就是排好队,从头开始报数,1,2,3,4,5,但编程里面的是从0开始计数,0是第1个,所以索引是0,1,2,3,4,...

空数组,没有元素,元素个数为0

数组元素可以是对象,对象属性值可以是数组。

表示直角坐标系中两个点

数组元素也可以是数组,俄罗斯套娃。

||

上面这种叫做初始化表达式(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对象。

但现在这个对象里没有方法,我们以一个特别的方式添加方法。

我们不是往创建的对象里添加方法,构造器是函数,自然也没有属性。

但构造器有一个与它关联的对象,叫做原型,我们把方法赋给原型的属性。

取用构造器Point的prototype属性来调用原型,这里定义的是求这个点的极坐标极径 r。

接着

对象会自动继承原型里的方法

||


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1