一、运算符
1.1 算术运算符
数学运算符也叫算术运算符,主要包括加、减、乘、除、取余(求模)。
%取余:开发中经常作为某个数字是否被整除
1.2 赋值运算符
赋值运算符:= += -= *= /= %=
1.3 一元运算符
自增:++ 自减符号:-- 经常用于计数来使用
前置自增:先自加,再使用(记忆口诀:++在前先加)
后置自增:先使用,再自加(记忆口诀:++在后后加)
面试题:
let i = 1
console.log(i++ + ++i + i) //1+3+3=7
1.4 比较运算符
比较运算符(比较结果为boolean类型,即只会得到true或false):
>:左边是否大于右边 <:左边是否小于右边
>=:左边是否大于或等于右边 <=:左边是否小于或等于右边
==:左右两边是否相等 ===:左右两边是否类型和值都相等
!==:左右两边是否不全等
字符串比较,是比较的字符对应的ASCII码从左往右依次比较
如果第一位一样再比较第二位,以此类推
NaN不等于任何值,包括它本身(typeof NaN的结果为Number)
尽量不要比较小数,因为小数有精度问题(0.1+0.2 != 0.3)
不同类型之间比较会发生隐式转换
最终把数据隐式转换转成number类型再比较
所以开发中,如果进行准确的比较我们更喜欢===
或者!==
1.5 逻辑运算符
&& 逻辑与 并且 || 逻辑或 或者 ! 逻辑非 取反
逻辑运算符里的短路:&& 左边为false就短路 || 左边为true就短路
console.log(10 && 20); //20
console.log(10 || 20); //10
二、语句
2.1 表达式和语句
表达式:是一组代码的集合,JavaScript解释器会将其计算出一个结果
语句:js整句或命令,比如:if 语句、for循环语句
区别:表达式计算出一个值,但语句用来自行以使某件事发生(做什么事)
表达式:3+4 语句:alert()弹出对话框
其实某些情况,也可以把表达式理解为语句,因为它是在计算结果,也是做事
2.2 分支语句
分支语句可以让我们有选择性的执行想要的代码
分支语句包含:
if 分支语句
if 语句有三种使用:单分支、双分支、多分支
括号内的条件为true时,进入大括号里执行代码
小括号内的结果若不是布尔类型时,会发生隐式转换转为布尔类型
三元运算符
比 if 双分支更简单的写法,有时候也叫做三元表达式
条件 ? 满足条件执行的代码 : 不满足条件执行的代码
num1 > num2 ? num1 : num2
一般用来取值switch语句
1.switch case语句一般用于等值判断,不适合于区间判断
2.switch case一般需要配合break关键字使用,没有break会造成case穿透
2.3 循环结构
在JavaScript中有for循环、while、do…while三种循环结构。
2.3.1 断点调试
作用:学习时可以帮助更好的理解代码运行,工作时可以更快找到bug
浏览器打开调试界面
1.按F12打开开发者工具 2.点到sources一栏 3.选择代码文件
2.3.2 双重for循环
我们可以把里面的循环看做是外层循环的语句
外层循环循环一次,里面的循环执行全部
2.3.3 while循环
循环:重复执行某段代码,而while:在…期间
while大括号里代码执行完毕后不会跳出,而是继续回到小括号里判断条件是否满足,若满足又执行大括号里的代码,然后再回到小括号判断条件,直到括号内条件不满足,即跳出
while循环注意事项:循环的本质就是以某个变量为起始值,然后不断产生变化量,慢慢靠近终止条件的过程
所以,循环需要具备三要素:1.变量起始值
2.终止条件(没有终止条件,循环会一直执行,造成死循环)
3.变量变化量(用自增或者自减)
2.3.4 do while循环
do… while语句其实是while语句的一个变体。该循环会先执行一次代码块,然后对条件表达式进行判断,如果条件为真,就会重复执行循环体,否则退出循环。
三、数组
3.1 创建数组
利用new创建数组:
var 数组名 = new Array()
注意Array(),A要大写
利用数组字面量创建数组:
var 数组名 = []
var arr = [1,2,'三',true]
数组中可以存放任意类型的数据,例如字符串,数字,布尔值等
3.2 数组中新增元素
可以通过修改length长度以及索引号增加数组元素
可以通过修改length长度来实现数组扩容的目的:
var arr = ['red', 'blue', 'green']
arr.length = 4
console.log(arr[3]) //undefined
length 属性是可读写的。
其中索引号是 4 的空间没有给值,就是声明变量未给值,默认值就是undefined。
可以通过索引号实现修改,追加数组元素的目的:
var arr = ['red', 'blue', 'green']
arr[3] = 'pink' //追加新的数组元素
arr[0] = 'white' //替换原来的数组元素
arr = '达咩' //不要直接给数组名赋值,否则里面的数组元素都没了
四、函数
函数:就是封装了一可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用。
4.1 声明函数
function 函数名() {
// 函数体代码
}
function是声明函数的关键字,必须小写
由于函数一般是为了实现某个功能才定义的,所以通常我们将函数名命名为动词,比如getSum
声明函数本身并不会执行代码,只有调用函数时才会执行函数体代码。
4.2 函数的封装
函数的封装是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口
简单理解:封装类似于将电脑配件整合组装到机箱中(类似快递打包)
4.3 函数形参和实参个数不匹配问题
参数个数 | 说明 |
---|---|
实参个数 = 形参个数 | 输出正确结果 |
实参个数 > 形参个数 | 只取到形参的个数 |
实参个数 < 形参个数 | 多的形参定义为undefined,结果为NaN |
注意:在JavaScript中,形参的默认值是undefined。
4.4 函数的返回值
函数都是有返回值的
1.如果有return,则返回return后面的值
2.如果没有return,则返回undefined
return:不仅可以退出循环,还能够返回return语句中的值,同时还可以结束当前的函数体内的代码
4.5 arguments的使用
当我们不确定有多少个参数传递的时候,可以用arguments来获取。在JavaScript中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。
function fn() {
console.log(arguments) //里面存储了所有传递过来的实参
}
fn(1, 2, 3) //Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
案例:
//利用函数求任意个数的最大值
function getMax() {
var max = arguments[0]
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] > max){
max = arguments[i]
}
}
return max
}
console.log(getMax(1, 22, 3, 45))
4.6 函数的两种声明方式
1.利用函数关键字自定义函数(命名函数)
function fn(){ }
2.函数表达式(匿名函数)
var 变量名 = function(){ }
var fun = function (aru) {
console.log(aru)
}
fun('hello') //fun是变量名,不是函数名
(1)fun是变量名,不是函数名
(2)函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值,而函数表达式里面存的是函数
(3)函数表达式也可以进行传递参数