八、运算符
(一)赋值运算符
=、+=、-=、*=、/=、%=
(二)一元运算符(例:正负号)
javaScript中的运算符根据所需表达式的个数,分为一元运算符、二元运算符、三元运算符
需要两个数相加(两个表达式)的叫做二元运算符
一元运算符:
1.自增:++;2.自减:--
前置自增:++num;后置自增:num++;
前置:先运算后重新赋值
后置:先赋值后运算
两者通常单独使用,单独使用时效果相同
和其他数运算时有差:
面试题:
let i =1
console.log(i++ + ++i +i)
控制台输出结果为:7
1+3+3=7(i++:先赋值后计算,先为1 ,后i变为2,在计算++i时,2+1变为3)
注:在计数时常用 i++
(三)比较运算符
==:具有隐式转换,因此判断数据是否相等请用===
除开数字的比较,还可进行字符串的比较,参照ASCII码
从左往右依次比较(一个一个字符的比较)
注:NaN不等于任何值,包括它本身(涉及到NaN的比较都是false)
尽量不比较小数,会有精度问题(可通过乘法变为整数进行比较)
(四)逻辑运算符(与或非)
练习:输入一个数,若为4的倍数并且不是100的倍数则弹出弹框
(四)运算符优先级(*)
九、表达式和语句
表达式:可以被求值的代码(可赋值,写在赋值运算符的右侧)
语句:可以被执行的代码(不一定有值)
(一)语句分类:
顺序结构:一般电脑执行代码是从上向下顺序执行的
分支结构:使电脑能够选择性地执行代码
循环结构:在满足条件的情况下,是电脑重复执行同一语句
1.分支语句
分类:if分支语句、三元运算符、switch语句
(1)if语句-->单分支、双分支、多分支
1.1单分支:
if(条件){
}
注:除开0所有的数字作为条件都为true(NaN也不行),除开‘ ’空字符,所有字符作为条件都为true。
练习:
1.2 双分支:
if(条件) {
}
else {
}
练习:
1.3 多分支:
if (条件1) {
}
else if(条件2){
}
else if(条件3){
}
......
else {
}
练习:
(2)三元运算符:(一般用来取值)
条件 ? 满足条件执行的代码 : 不满足条件执行的代码
练习:
练习:
(3)switch语句:
switch(数据){
case 值1:
代码1
break//退出switch
case 值2:
代码2
break
......
default:
}
注:数据和值必须全等===
练习:
if与switch的区别:
(1)switch分支语句用于条件确定的情况下
if分支语句主要用于条件中带有关系运算符的
(2)switch语句在分支多的时候效率更高
(3)switch要注意条件全等,并且每个case
语句后一定要加break(否则会有穿透效果)
穿透效果:继续执行之后的语句。
2.循环语句:循环:(重复执行某段代码)
断点调试:(方便查错--好用的:-))
(1)while循环:
while (循环条件){
要重复执行的代码(循环体)
}
注:当条件不满足时跳出循环
循环三要素:
a. 变量初始值 b.终止条件 c.变量变化量(用++ 或--)
练习:输出1-100,并计算1-100的和,以及1-100之间的所有偶数和
退出循环:
break:直接退出循环
continue:结束本次循环(要小心,防止死循环)
注:while循环在使用continue时需要在continue之前补充一个变量的变化量(由于while循环的三要素)
区别:
continue 退出本次循环,一般用于排除或者跳过某个选项的时候,可以使用continue
break 退出整个循环,一般用于结果已经得到,后续的循环不需要的时候
练习:一直弹出弹窗询问。。。,只有回答爱的时候才不弹
练习:简易ATM机
用switch实现,不同选项对应case中的不同处理方式。
注:prompt里面的字符号要用``(反引号)才能做到换行写,单引号和双引号都会报以下错误
(2)for循环
for (变量起始值;终止条件;变量变化量){
}
练习:用for实现1-100岁的输出,1-100所有偶数的和以及输出5个小星星
注:for循环的最大价值:循环数组
for的死循环:
for(; ;){
}
for 与 while 循环的区别:
当循环次数确认的时候最好使用for循环。
for循环嵌套:
for ( ) {
for( ) {
}
}
练习:
每天记忆5个单词,记忆3天:
第一天 5个 ,第二天 5 个。。
天数为外层,单词数为内层
练习:打印5行5列的小星星⭐
升级:
打印倒三角形星星
九九乘法表:
改良:
用css代码为span渲染样式就好
十、数组:一种数据类型
(一)数组的基本使用--声明并取值
1.声明语法:
a.字面量声明数组:
b.使用new Array 构造函数声明 (了解)
注:数组里可以存放任意数据类型
声明还能这样:let arr = []
arr[0] = 1
arr[1] = 2
arr[2] = 3
2.取值语法
数组名[下标/索引]
下标从零开始
3.遍历数组(for实现)
let arr=[1,2,3,4,5]
for (let i=0;i<arr.length;i++) {
console.log(arr[i]);
}
练习:
1.求数组[2,6,1,7,4]里面所有元素的和以及平均值
注:undefined+任何数都是NaN
2.数组求最大值和最小值
改进:(三元运算符实现)
(二)改:
let arr['shdk','asdg','dsj']
let arr[0]='sdjl'
(三)新增
1.push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度
2.unshift()方法将元素添加到数组的开头,并返回数组的新长度
练习:数组筛选
将数组中大于等于10 的筛选进新的数组
(四)删除
arr.pop():删除数组中的最后一个元素,并返回该值
arr.shift():删除数组中的第一个元素,并返回该值
arr.splice(起始位置-索引,删除几个):删除指定元素
起始位置:默认从0计,删除几个:默认从0到末尾。
练习:
根据数据生成柱形图:
先用css代码写下图形样式,除开里面四个盒子的高度,该高度用标签内部css代替
1.样式:
2.js
(五)排序
冒泡排序
错误❌:
外层只用循环arr.length-1,
注:以上结果可用:arr.sort()排序得到
1.arr.sort()方法默认升序排列