1、编程中的三大流程控制结构
>> 顺序流程结构:最基本的流程,按照代码的顺序逐行执行。
>> 选择流程结构:当代码执行到某一段的时候,会根据条件进行判断,然后执行条件成立的代码。
>> 循环流程结构:根据条件,重复的执行某一段代码,当达到某一个条件时就会停止执行。
2、if
>> if 语句
if(条件表达式,必须返回 true 或者 false) {
// 当上方小括号内表达式返回为 true 时,执行这里的代码
}
var a = prompt('请输入一个数字');
(a > 10) {
console.log('a大于 10');
}
>> if else 语句
if(条件) {
// 条件成立的时候执行的代码
} else {
// 条件不成立的时候执行的代码
}
var a = prompt('请输入一个数字');
if(a > 10) {
console.log('a大于10');
} else {
console.log('a小于10');
}
注意:与三元运算符功能相同,但是结构比三元简单易懂,但是一般建议采用三元
if else if 语句
if(条件表达式1) {
// 条件表达式1为 true 的时候执行的代码
} else if(条件表达式2) {
// 条件表达式2为 true 的时候执行的代码
} else if(条件表达式n) {
// 条件表达式n为 true 的时候执行的代码
} else {
// 以上条件都不成立时执行的代码
}
注意:满足当前条件后,剩余的条件将不再执行(判断)
3、switch(主要用于判断值是否等于给定值)
switch(判断的变量值) {
case 值1:
// 执行的代码1
break; // 这里必须添加
case 值2:
// 执行的代码2
break;
...
default:
// 以上条件都不满足时执行的代码
}
4.循环
在满足一定条件的时候,重复执行一段代码,当不再满足条件时停止循环,重复执行的程序段称为循环体。
4.1、while 循环
先验证,再循环。
while(条件) {
// 循环体
// 迭代
}
4.2 do while
无论循环的判断条件是否为真,循环至少执行一次,然后再判断是否满足继续循环的条件。
do while 和 while 的区别:
* while 是先判断条件,然后再执行;
* do while 是先执行,然后再判断,无论条件是否成立,至少执行依次。
4.3、for 循环
应用最广泛的循环语句,是一种先验证的循环。
for(初始值;条件;迭代) {
// 循环体
}
break:立即退出循环
continue:结束本次循环,然后接着继续后面的循环。
5.Math
Math:是一个内置对象,拥有一些数学常数属性和一些数学函数方法。
常见 API
Math.PI :圆周率
Math.round(x):返回四舍五入后的整数
Math.ceil(x):向上取整
Math.floor(x):向下取整
Math.abs(x):绝对值
Math.max(x,y,z...):返回最大值
Math.min(x,y,z...):返回最小值
Math.pow(x, y):返回一个数的y次幂
Math.random():返回一个介于0到1之间的随机数
6.对象
>> 属性
obj.name = 值
obj.name
>> 方法
obj.sayHi = function() {}
obj.sayHi();
7.数组
7.1 理解
属于对象类型,数组是按一定顺序排列,具有某种相同性质的数据集合。
数组中的元素类型原则上可以是任意数据类型。
7.2 创建数组:
>> new(构造函数)
new Array()
>> 字面量
[]
7.3 数组的下标
数组中每个元素的标记,从0开始,依次增大。
7.4 取出数组的值
数组[下标]
7.5 数组的长度
数组.length
7.6 数组的方法
push() 向数组最后一位添加元素
pop() 删除数组最后一位元素
unshift() 始终向数组第一位插入元素
shift() 始终删除数组的第一位元素
splice(下标,删除的长度,增加的元素...)
reverse()颠倒数组中元素的顺序
sort() 对数组元素进行排序,默认是按照字母升序排列
sort(function(a, b) {
return a-b // 升序 return b-a // 降序
})
concat() 数组合并
indexOf() 判断当前数组是否包含某个指定的值,如果是返回下标,否则返回-1,并且只会匹配到第一个;
lastIndexOf() 从数组最后开始查找,匹配到返回下标,否则返回 -1;
join() 根据规则将数组元素拼接为字符串
7.7 数组遍历
>> for
for(var i = 0; i < 数组的长度; i++) {
数组[i]
}
>> Array.forEach(function(item, index, array) { // 遍历数组
// item:数组元素
// index:对应下标
// array:数组本身
})
>> Array.map(function(item, index, array){}) // 遍历数组,并且根据规则返回新数组
>> Array.some(function(item, index, array){})
>> Array.every(function(item, index, array){})
............
8、函数的认识
函数是定义一次但是却可以调用或执行任意多次的一段JS代码。
8.1、函数的作用:
>> 代码重用,提高代码使用效率,避免在程序中出现过多的重复性代码;
>> 以功能模块将代码分离,提高代码的可读性;
8.2、函数的使用
>> 函数声明:
function 函数名(参数) {
// 函数体-- 要执行的JS语句
}
>> 无参函数:在调用无参函数的时候,不需要给函数的参数传递数据
>> 有参函数:调用此类函数需要给函数传递参数。
8.3、函数的调用
>> 直接调用
函数名();
>> 可以在一个函数内部,调用其他函数
funtion foo() {
// ...
bar();
}
>> 函数内部调用自己(递归函数)
function foo() {
// ...
foo();
}
>> 对象的方法
对象.方法名()
8.4、参数的理解
>> 形参:
在定义函数时给函数设置的参数,该参数会在函数内部使用(可以理解为函数内部的变量)
function 函数名(形参) {}
>> 实参:
调用函数时,给函数传递的具体的值(即给形参赋值)。
函数名(实参);
8.5、返回值函数
是指调用函数后能得到一个结果。
关键词: return:
* 使用关键词 return 来返回结果,该结果可以是常量,也可以是变量,甚至是一个函数;
* 如果函数没有明确的返回值,那么返回值为 undefined;
* 在 return 之后的代码不再执行,即停止函数继续执行;
8.5.1、函数的注释方式
* 函数的作用
* @method 函数名
* @ param { 参数类型} 参数名 参数说明
* @return {返回值类型} 返回值说明
8.5.2、arguments 对象
>> 产生位置:只能在函数内部访问的一个对象,该对象会记录函数实参传递的个数,该对象的结构与数组类似。
>> 说明:
JS 不会验证传给函数参数的个数是否等于形参的个数,可以接受任意数量的实参,遗漏的参数将会传递 undefined 给形参,多余的参数可以忽略。
8.6、创建函数的方式:
>> 函数声明:
function 函数名(形参) {} // 具名函数
>> 函数表达式:
var 变量 = function(形参) {} // 匿名函数
注意:不能在变量赋值之前调用该函数。
>> 对象方法
对象.方法名 = function(形参) {}
8.6.1、提升
>> 函数提升:
通过函数声明的方式创建的函数,会被自动提升至当前作用域最顶层。
>> 变量提升
通过关键字 var 声明的变量,也会将声明的变量提升至当前作用域最顶层。
8.6.2、作用域
是指一个变量或者函数可以在哪个范围内使用。
>> 全局变量/全局函数:
定义在函数外部的变量(函数)称为全局变量,可在任意地方使用。
>> 局部变量/局部函数
定义在函数内部的变量(函数)称为局部变量,只能在函数内使用。
注意(重点):在当前作用域的最顶层声明变量、声明函数。
9、字符串方法
9.1 创建字符串的方法
>> 字面量的方式创建
var str = 'abc';
>> 构造函数的方式创建:
var str = new String('abc');
9.2 在 js 中一切皆对象。
9.3 字符串的属性
.length 获取字符串的长度。
9.4 方法:
>> charAt(index):返回指定位置的字符,从 0 开始的。
>> substring(n, m):返回 n~m之间的字符,包含 n,不包含 m。
>> substr(n, length):截取字符串,从n开始,总共截取长度为 length。
>> slice(n, m):用法与 substring一致。
>> indexOf(str, n):从n开始搜索str在字符串中首次出现的位置。
>> match(str):查找字符串中特定的字符,如果找到则返回这个字符,否则返回 null。
>> replace(a, b):用字符串b替换字符串a。
>> search(a):用于检索字符串中指定字符的位置,如果没有找到返回-1.
>> split(str):用于将字符串分割为数组。
>> toLowerCase():将字符串转为小写。
>> toUpperCase():转为大写字母。
>> concat(str1, str2, ...):合并字符串
>> trim():去掉字符串前后空格,无法去除字符串中间的空格。
10、什么是正则表达式?
使用一种特定的符号来描述该组字符串的方法。
10.1、作用?
* 用于验证注册、登录时用户输入的信息;
* 关键词过滤
10.2、语法:
>> 构造函数
var 变量 = new RegExp('模式字符串', '修饰符');
>> 字面量方式:
var 变量 = /模式字符串/修饰符;
10.3、修饰符
>> g
全局匹配,查找所有符合条件的;
>> i
忽略大小写;
>> m
多行匹配。
10.4、正则验证规则
/^ 匹配开头
$/ 匹配结束
\d 匹配一个数字
\D 匹配一个非数字
\w 匹配一个可以组成单词的字符,包含字母、数字、下划线
\s 匹配一个空白字符
\n 匹配换行符
. 匹配换行符以外任意字符
\b 匹配一个单词边界,也就是单词和空格之间的位置
[xyz] 匹配这个集合中任意一个字符
[^xyz] 不匹配这个集合中的任意一个字符
[a-zA-Z]
[a-zA-Z0-9]
? 匹配前面的字符出现0次或者1次
* 匹配前面的字符出现0次或者多次
+ 匹配前面的字符出现1次或者多次
x|y 匹配x或者y
{n} 精确匹配前面字符出现 n 次
{n,m} 匹配n到m次
10.5、正则表达式方法:
>> pat.test(str)
直接返回布尔值,用于判断正则是否匹配成功;
>> exec()
检索字符串中指定的值,返回一个数组,在其中存放结果;
>> compile()
改变检索模式。
10.6、支持正则的字符串的方法:
search()
match()
replace()
split()
11 ECMAScript(核心语法)
>> 数据类型(重点)
布尔值的转换
>> 变量
>> 运算符
++
--
+=
!
? :
>> 循环、条件
双重for(难点)
>> 函数(重点)
提升
作用域(全局变量、局部变量)
arguments 对象(难点)
>> 数组(重点)
>> 字符串
>> 正则表达式(难点)
11.1、对象(未来)
11.2、ECMAScript 还包含哪些
>> 划分
ES3
ES5
ES6(ES2015)
ES7
ES8
ES9
>> 新语法
变量声明:const,let
箭头函数、函数默认值
第七种数据类型:symbol
扩展符
解构
模板字符串
promise
async
class
12、JS 组成?
> ECMAScript(核心语法)
>> DOM(document object model)(文档对象模型)
>> BOM(浏览器对象模型)
12.1、DOM
是一个使程序和脚本能够动态访问和更新文档内容、样式、结构的接口。
>> DOM 的原理的是将文档装入内容,以节点的形式解析为节点树。
>> DOM 提供相应的 API 对节点树进行增删改查,实现动态网页。
12.2、BOM
是浏览器对象模型。
12.2.1、能做什么?
>> 可以操作浏览器窗口
>> 提供导航对象
>> 提供定位对象
>> 提供屏幕相关对象
>> 提供cookie的支持
12.2.2、window 对象
12.2.3、 理解
该对象是基于浏览器的 js 顶层对象,在调用他的子对象时可以不用显示的指明window对象。
12.2.4、 全局函数/对象
alert() // window.alert()
document
12.2.5、 window.open(url, target, 新窗口的特性)
打开一个窗口
window.close() // 关闭当前窗口