目录
1. 解释型语言和编译型语言
1.1 概述
计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序语言翻译成机器语言才能执行程序。程序语言翻译成机器语言的工具,被称为翻译器
翻译器翻译的方式有两种:一个是编译,另一个是解释。两种方式之间的区别在于翻译的时间点不同
编译器是在代码执行之前进行编译,生成中间代码文件
解释器是在运行时进行及时解释,并立即执行(当编译器从解释方式运行的时候,也称之为解释器)
1.2 执行过程
类似于请客吃饭:
- 编译语言:首先把所有菜做好,才能上桌吃饭
- 解释语言:好比吃火锅,边吃边刷,同时进行
2.关键字,标识符,保留字
2.1 标识符
标识符:就是指开发人员为变量,属性,函数,参数取的名字
标识符不能是关键字或保留字
2.2.关键字
关键字:是指js本身已经使用了的字,不能再用它们充当变量名,方法名。
包括:break,case,catch,continue,default,delete,do,else,finally,for,function,if,in,instanceof,new,return,switch,this,throw,try,typeof,var,void,while,with等。
2.3 保留字
保留字:实际上就是预留的“关键字”,意思是现在虽然还不是关键字,但是未来可能成为关键字,同时不能使用他们当变量名或方法名
3.运算符
运算符(opearator)也被称为操作符,是用于实现赋值,比较,和执行算数运算等功能的符号
3.1 算数运算符
注意:浮点数的算术运算会有问题(在进行判断时会出问题)
3.2 表达式和返回值
表达式:是由数字,运算符,变量等以能求得数值的有意义排列方式说得的组合
简单理解,:是由数字,运算符,变量等组成的式子
表达式式子的结果就是返回值
3.3 一元运算符
众多Js的运算符可以根据所需表达式的个数,分为一元运算符,二元运算符,三元运算符等
只有一个表达式就可以运算的运算符叫一元运算符。
我们可以使用++或者 -- 来表达让变量+1或者-1
使用场景:经常用于计数使用。比如进行10次操作,用它来计算进行了多少次了
自增分为
前置自增:
后置自增
1.前置自增和后置自增单独使用时二者并没有差别
2.一般开发中我们都是单独使用
3.后面i++后置自增会使用相对较多,并且都是单独使用
3.4 比较运算符
使用场景:比较两个数据大小,是否相等
>: 左边是否大于右边
<: 左边是否小于右边
>=: 左边是否大于或等于右边
<=: 左边是否小于或等于右边
==: 左右两边值是否相等
===: 左右两边是否类型和值都相等
!==: 左右两边是否不全等
NaN不等于任何人,包括他自己
比较结果是布尔型,结果只有true 或者false
开发过程中尽量使用===
字符串比较,是比较字符对应的ASCII码
3.5 逻辑运算符
使用逻辑运算符用来解决多重条件判断
符号 | 名称 | 日常读法 | 特点 | 口诀 |
&& | 逻辑与 | 并且 | 符号两边都为true结果才为true | 一假则假 |
|| | 逻辑或 | 或者 | 符号两有一个true就是true | 一真则真 |
! | 逻辑非 | 取反 | true变false,false变true | 真变假,假变真 |
3.6 运算符优先级
目标:掌握运算符优先级,能判断运算符执行的顺序
优先级 | 运算符 | 顺序 |
1 | 小括号 | () |
2 | 一元运算符 | ++ -- ! |
3 | 算术运算符 | 先* / %后 + - |
4 | 关系运算符 | > >= < <= |
5 | 相等运算符 | == != === !== |
6 | 逻辑运算符 | 先&& 后 || |
7 | 赋值运算符 | = |
8 | 逗号运算符 | , |
- 一元运算符 里面的逻辑非优先级很高
- 逻辑与比逻辑或优先级高
4. 表达式和语句
4.1 表达式和语句的区别
表达式是可以被求职的代码,js引擎会将其计算出一个结果
语句是一段可以执行的代码
区别:
表达式:因为表达式可被求值,所以他可以写在赋值语句的右侧
语句:而语句不一定有值,所以比如alert()for和break等语句就不能被用于赋值。
4.2 分支语句
1.程序的三大流程控制语句
以前我们写的代码,写几句就从上往下执行几句,这种结构叫顺序结构
有的时候要根据条件选择执行代码,这种就叫分支结构
某段代码被重复执行,就叫循环结构
2.if语句
if语句有三种使用:单分支,双分支,多分支
单分支if语法:
if (条件) {
满足条件要执行的代码
}
括号内的条件为true时,进入大括号里执行代码
小括号内的结果若不是布尔类型是,会发生隐式转换为布尔类型
如果大括号只有一个语句,大括号可以省略,但是不提倡
隐式转换时,除了0 其余数字型都为真,除了“”其余字符串都为真
双分支if语法
if (条件) {
满足条件要执行的代码
} else {
不满足条件要执行的代码
}
多分支if语法
使用场景:适合于有多个结果的时候,比如学习成绩可以分为:优 良 中 差
if (条件1) {
代码1
} else if(条件2) {
代码2
} else{
代码4
}
先判断条件1,若满足条件1就执行代码1,其他不执行
若不满足则向下判断条件2 ,满足条件2执行代码2,其他不执行
若依然不满足继续往下判断,以此类推
可以写n个
3.三元运算符
使用场景:其实是比if双分支跟简单的写法,可以使用三元运算符
符号:?与:搭配使用
语法:
条件 ? 满足条件执行的代码 :不满足条件执行的代码
一般用来取值
4.switch语句
语法:
switch (数据){
case 值1:
代码1
break
case 值2:
代码2
break
default:
代码n
break
}
释义:
找到更小括号里数据全等的case值,并执行里面对应的代码
若没有全等===的则执行default里面的代码
1.switch case语句一般用于等值判断,不适合于区间判断
2.swich case一般配合break关键字使用,没有break会造成case穿透
4.3 循环语句
1.断点调试
- 作用:学习时可以帮助更好的理解代码运行,工作时可以更快的找到bug
- 浏览器打开调试界面
1.按f12打开开发者工具
2.点到sources一栏
3.选择代码文件
2.while循环
1.基本语法:
while (循环条件) {
要重复执行的代码(循环体)
}
循环:重复执行一些操作,while:在....期间,所以while循环就是在满足条件期间,重复执行某些代码。
注意:
- 跟if语句很像,都要满足小括号里的条件为true才会进入循环体执行代码
- while大括号里代码执行完毕后不会跳出,而是继续回到小括号里判断条件是否满足,若满足又执行大括号里的代码,然后再回到小括号判断条件,直到括号内条件不满足,即跳出。
2. while循环三要素
循环的本质就是以某个变量为起始值,然后不断产生变化量,慢慢靠近终止条件的过程。所以while循环还具有三要素
1.变化起始值
2.终止条件(没有终止条件,循环会一直执行,造成死循环)
3.变量变化量(用自增或者自减)
3.循环退出
break:退出循环 ,一般用于结果已经得到,后续的循环不需要的时候可以使用
continue:结束本次循环,继续下次循环,一般用于排除或者跳过某一个选项的时候
4. for循环语法
把声明起始值,循环条件,变化量写到一起,让人一目了然,它是最常使用的循环形式
for (变量起始值;终止条件;变量变化量){
//循环体
}
使用for循环遍历数组
1.while(true)来构建“无限循环”,需要使用break退出循环
2.for(;;)也可以来构建“无限”循环,同时需要使用break退出循环
5.数组
数组(array)是一种可以按照顺序保存数据的数据类型
声明语法:
let 数组名 = [数据1,数据2,....,数据n]
let arr = new Array(数据1 ,数据2 ,..数据n)
数值是按顺序保存,所以每个数据都有自己的编号
计算机中的编号是从0开始的
在数组中,数据的编号也叫索引或下标
2,取值语法
数组名[下标]
3.一些术语
元素:数组中保存的每个数据叫数组元素
下标:数组中的数据的编号
长度:数值中数据的个数,通过数组的length属性获得
4.数组遍历(重点)
用循环把数值中每个元素都访问一遍,一般会用for循环遍历
5. 操作数组
数组本质是数据集合,操作数据无非就是增删改查语法:
查询数据:
数组[下标]
重新赋值
数组[下标]= 新值
数组添加新的数据
数值.push()方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度
语法:
arr.push(元素1,....,元素n)
arr.unshift(新增内容)方法将一个或多个元素添加到数组的开头,并返回该数组的新长度。
语法:
arr.unshift(元素1,。。。元素n)
删除数值元素
数组.pop()方法从数组中删除最后一个元素,并返回该元素的值
数值.shift()方法从数组中删除第一个元素,并返回该元素的值
数组.splice()方法 删除指定元素
语法:
arr.splice(start,deleteCount)//起始位置,删除几个元素
start起始位置,指定修改的开始位置(从0计数)
deleteCount
- 表示要移除的数组元素的个数
- 可选的。如果省略则默认从指定的起始位置删除到最后
数组排序
数组.sort()方法可以排序
语法:
arr.sort(function(a,b){return a-b}升序
arr.sort(function(a,b){return b-a}降序