DOM概述
【DOM概述】
DOM基本概念
DOM(Document Object Model,文档对象模型)是 JavaScript 操作 HTML 文档的接口,使文档操作变得非常优雅、简便。
DOM 最大的特点就是将 HTML 文档表示为 “节点树”。
DOM节点树
一个文档的所有节点,按照所在的层级,可以抽象成一种树状结构。这种树状结构就是 DOM 树。它有一个顶层节点,下一层都是顶层节点的子节点,然后子节点又有自己的子节点,就这样层层衍生出一个金字塔结构,又像一棵树。
浏览器原生提供document节点,代表整个文档。
12document// 整个文档树
文档的第一层有两个节点,第一个是文档类型节点(<!doctype html>),第二个是 HTML 网页的顶层容器标签<html>。后者构成了树结构的根节点(root node),其他 HTML 标签节点都是它的下级节点。
除了根节点,其他节点都有三种层级关系。
父节点关系(parentNode):直接的那个上级节点
子节点关系(childNodes):直接的下级节点
同级节点关系(sibling):拥有同一个 ...
严格模式
【严格模式】
除了正常的运行模式,JavaScript 还有第二种运行模式:严格模式(strict mode)。顾名思义,这种模式采用更加严格的 JavaScript 语法。
同样的代码,在正常模式和严格模式中,可能会有不一样的运行结果。一些在正常模式下可以运行的语句,在严格模式下将不能运行。
设计目的
早期的 JavaScript 语言有很多设计不合理的地方,但是为了兼容以前的代码,又不能改变老的语法,只能不断添加新的语法,引导程序员使用新语法。
严格模式是从 ES5 进入标准的,主要目的有以下几个。
明确禁止一些不合理、不严谨的语法,减少 JavaScript 语言的一些怪异行为。
增加更多报错的场合,消除代码运行的一些不安全之处,保证代码运行的安全。
提高编译器效率,增加运行速度。
为未来新版本的 JavaScript 语法做好铺垫。
总之,严格模式体现了 JavaScript 更合理、更安全、更严谨的发展方向。
启用方法
进入严格模式的标志,是一行字符串use strict。
1'use strict';
老版本的引擎会把它当作一行普通字符串,加以忽略。 ...
语法之console 对象与控制台
【语法之console 对象与控制台】
console 对象
console对象是 JavaScript 的原生对象,它有点像 Unix 系统的标准输出stdout和标准错误stderr,可以输出各种信息到控制台,并且还提供了很多有用的辅助方法。
console的常见用途有两个。
调试程序,显示网页代码运行时的错误信息。
提供了一个命令行接口,用来与网页代码互动。
console对象的浏览器实现,包含在浏览器自带的开发工具之中。以 Chrome 浏览器的“开发者工具”(Developer Tools)为例,可以使用下面三种方法的打开它。
按 F12 或者Control + Shift + i(PC)/ Command + Option + i(Mac)。
浏览器菜单选择“工具/开发者工具”。
在一个页面元素上,打开右键菜单,选择其中的“Inspect Element”。
打开开发者工具以后,顶端有多个面板。
Elements:查看网页的 HTML 源码和 CSS 代码。
Resources:查看网页加载的各种资源文件(比如代码文件、字体文件 CSS 文件等),以及在硬盘上创建 ...
语法之编程风格
【语法之编程风格】
概述
“编程风格”(programming style)指的是编写代码的样式规则。不同的程序员,往往有不同的编程风格。
有人说,编译器的规范叫做“语法规则”(grammar),这是程序员必须遵守的;而编译器忽略的部分,就叫“编程风格”(programming style),这是程序员可以自由选择的。这种说法不完全正确,程序员固然可以自由选择编程风格,但是好的编程风格有助于写出质量更高、错误更少、更易于维护的程序。
所以,编程风格的选择不应该基于个人爱好、熟悉程度、打字量等因素,而要考虑如何尽量使代码清晰易读、减少出错。你选择的,不是你喜欢的风格,而是一种能够清晰表达你的意图的风格。这一点,对于 JavaScript 这种语法自由度很高的语言尤其重要。
必须牢记的一点是,如果你选定了一种“编程风格”,就应该坚持遵守,切忌多种风格混用。如果你加入他人的项目,就应该遵守现有的风格。
缩进
行首的空格和 Tab 键,都可以产生代码缩进效果(indent)。
Tab 键可以节省击键次数,但不同的文本编辑器对 Tab 的显示不尽相同,有的显示四个空格,有的显示两个空格,所以有人 ...
语法之错误处理机制
【语法之错误处理机制】
错误处理机制是指预估代码执行过程中可能发生的错误,然后最大程度的避免错误的发生导致整个程序无法继续运行
Error 实例对象
JavaScript 解析或运行时,一旦发生错误,引擎就会抛出一个错误对象。JavaScript 原生提供Error构造函数,所有抛出的错误都是这个构造函数的实例。
12var err = new Error('出错了');err.message // "出错了"
上面代码中,我们调用Error()构造函数,生成一个实例对象err。Error()构造函数接受一个参数,表示错误提示,可以从实例的message属性读到这个参数。抛出Error实例对象以后,整个程序就中断在发生错误的地方,不再往下执行。
JavaScript 语言标准只提到,Error实例对象必须有message属性,表示出错时的提示信息,没有提到其他属性。大多数 JavaScript 引擎,对Error实例还提供name和stack属性,分别表示错误的名称和错误的堆栈,但它们是非标准的,不是每种实现都有。
message:错误提示信息 ...
标准库之JSON对象 JSON5
【标准库之JSON对象 JSON5】
JSON 格式
JSON 格式(JavaScript Object Notation 的缩写)是一种用于数据交换的文本格式,2001年由 Douglas Crockford 提出,目的是取代繁琐笨重的 XML 格式。
相比 XML 格式,JSON 格式有两个显著的优点:书写简单,一目了然;符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。所以,JSON 迅速被接受,已经成为各大网站交换数据的标准格式,并被写入标准。
每个 JSON 对象就是一个值,可能是一个数组或对象,也可能是一个原始类型的值。总之,只能是一个值,不能是两个或更多的值。
JSON 对值的类型和格式有严格的规定。
复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
原始类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity, -Infinity和undefined)。
字符串必须使用双引号表示,不能使用单引号。
对象的键名必须放在双引号里面。
数组或对象最后一个成员的后面,不能加 ...
标准库之RegExp对象
【标准库之RegExp对象】
什么是正则表达式
正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用来按照“给定模式”匹配文本。
比如:验证手机号、验证邮箱、验证身份证……
快速感知正则表达式
用一个例子快速演示正则表达式基本使用方法:检查某个字符串是否是 6 位数字。
正则表达式“按位”描述规则
正则表达式“按位”描述规则,是指它是一位一位的描述字符串的构成形式。
比如检查字符串是不是这样的:以字母 m 开头,然后是 3 个数字,最后以字母 n 结尾。
正则表达式的创建
使用 /内容/ 的语法形式,可以快速创建正则表达式
也可以使用 new RegExp('内容') 的形式,创建正则表达式
使用 typeof 运算符检查正则表达式的类型,结果是 object
新建正则表达式有两种方法。一种是使用字面量,以斜杠表示开始和结束。
1var regex = /xyz/;
另一种是使用RegExp构造函数。
1var regex = new RegExp('xyz');
上面两种写法是等价的,都 ...
标准库之Math对象和String对象
【标准库之Math对象和String对象】
Math对象
Math是 JavaScript 的原生对象,提供各种数学功能。该对象不是构造函数,不能生成实例,所有的属性和方法都必须在Math对象上调用。
Math对象提供以下一些静态方法。
Math.abs():绝对值
Math.ceil():向上取整
Math.floor():向下取整
Math.max():最大值
Math.min():最小值
Math.round():四舍五入
Math.random():随机数
Math.abs()
Math.abs方法返回参数值的绝对值。
12Math.abs(1) // 1Math.abs(-1) // 1
Math.max(),Math.min()
Math.max方法返回参数之中最大的那个值,Math.min返回最小的那个值。如果参数为空, Math.min返回Infinity, Math.max返回-Infinity。
1234Math.max(2, -1, 5) // 5Math.min(2, -1, 5) // -1Math.min() // InfinityMath.max() ...
标准库之Date对象
【标准库之Date对象】
掌握 Date 日期对象的使用,动态获取当前计算机的时间。
普通函数的用法
Date对象可以作为普通函数直接调用,返回一个代表当前时间的字符串。
12Date()// "Tue Dec 01 2021 09:34:43 GMT+0800 (CST)"
注意,即使带有参数,Date作为普通函数使用时,返回的还是当前时间。
12Date(2000, 1, 1)// "Tue Dec 01 2021 09:34:43 GMT+0800 (CST)"
上面代码说明,无论有没有参数,直接调用Date总是返回当前时间。
构造函数的用法
Date还可以当作构造函数使用。对它使用new命令,会返回一个Date对象的实例。如果不加参数,实例代表的就是当前时间。
1var today = new Date();
Date实例有一个独特的地方。其他对象求值的时候,都是默认调用.valueOf()方法,但是Date实例求值的时候,默认调用的是toString()方法。这导致对Date实例求值,返回的是一个字符串,代表该实例对应的时间。
1234 ...
数组及常用方法
【数组及常用方法】
什么是数组
数组(Array),顾名思义:用来存储一组相关值的类型。
数组也是一个对象,是一个用来存储数据的对象和Object类似,但是它的存储效率比普通对象要高
数组中保存的内容我们称为元素
数组使用索引(index)来操作元素
索引指由0开始的整数
数组可以方便地对一组值进行求和、计算平均值、逐项遍历等操作。
1var scoreArr = [87, 89, 93, 71, 100, 68, 94, 88];
数组名习惯以 Arr 结尾。
数组的定义
方括号定义法
1var arr = ['A', 'B', 'C', 'D'];
new 定义法
1var arr = new Array('A', 'B', 'C', 'D');
12var arr = new Array(4);// 定义一个长度为 4 的数组,但是这 4 项都是 undefined
两种定义方法根据实际需求选择即可,两者的底层都是 ...