运算符
算术运算符
+:求和
-:求差
*:求积
/:求商
%:取模(取余数)应用场景:是否能被整除
取余可以隐式将字符串转换成数字
优先级
先乘除取余,后加减,有小括号先算小括号里面的
拓展:Math.PI 为圆周率
赋值运算符
对变量进行赋值的运算符
将等号右边的值赋予给左边,要求左边必须是一个容器
<script>
let a = 1
// a = a + 3 的另外一种写法
// 1 + 3 再赋值给a
a += 3
//输出的值为 4
console.log(a)
</script>
一元运算符
根据所需表达式的个数,分为一元运算符,二元运算符,三元运算符 使用场景:经常用于计数来使用,比如进行10次操作,用它来计算进行多少次了
自增
符号:++
作用:让变量的值+1
前置自增 ++i
<script>
let i = 1
console.log(++i +2)
// ++i i自加1 此时已经变成2,2+2,结果是4
// i先自加1,变成2之后,在和后面的2相加
</script>
注:先自加再使用(记忆口诀:++在前 先加)
后置自增 i++
<script>
let i = 1
console.log(i++ +2)
// i++ 计算机看到i++,它是不参与运算的,i还是本身的值,结果是3
// i++ 一开始是不参与运算的,它会在下次运算时加入
</script>
注:先使用再自加(记忆口诀:++在后 后加)
注:前置自增与后置自增独立使用时二者并没有差别
一般开发中我们都是独立使用
开发中 i++ 后置自增会使用相对较多
面试题
<script>
let i = 1
console.log(i++ + ++i + i)
// 第一个i是后置自增,不参与此次运算,第一个值是1,加完之后,此时i的值是2
// 第二个i是前置自增,加上1,此时i的值是 2 + 1 = 3
// 此时i的值是3
// 结果是:1 + 3 + 3 = 7
</script>
自减
符号:--
作用:让变量的值-1
比较运算符
作用
比较两个数据大小,是否相等
使用
">" 左边是否大于右边
"<" 左边是否小于右边
">=" 左边是否大于或等于右边
"<=" 左边是否小于或等于右边
"==" 左右两边是否相等
"=== " 左右两边是否类型和值都相等
"!== " 左右两边是否不全等
补充
// = 代表赋值运算符 = 左侧必须是一个容器(变量)
== 只判断数值,不匹配类型,不是特别的严谨
// 就会导致 5 == ‘5’ 返回结果是 true 的情况
在开发中我们更喜欢严谨一点的 ===
因为 === 不仅可以匹配数值还可以匹配数据类型
// 5 === ‘5’ 返回结果是false 5 === 5 返回结果是true
注:NaN不等于任何值,包括它本身
尽量不要比较小数,因为小数有精度问题
了解
逻辑运算符
逻辑运算符用来解决多重条件判断
逻辑运算符的短路
原因:用过左边能得到整个式子的结果,由此没必要再判断右边
运算结果:无论&&还是||,运算结果都是最后被执行的表达式值,一般用在变量赋值
注:0 ‘ ’ undefined null NaN -> false 这些值转换成布尔值是假的
优先级
注:一元运算符里面的逻辑非优先级最高
逻辑与比逻辑或优先级高
案例
<script>
// 用户输入一个,判断这个数能被4整除,但是不能被100整除
let num = prompt('请输入一个数字')
// 被整除,不能有余数,余数等于0
// 不能被整除,可以有余数,余数不等于0
console.log(num % 4 === 0 && num %100 !== 0);
</script>
\
语句
与表达式的区别
表达式可以做一些运算,从而返回结果
语句是让程序执行某些操作,让某件事情发生,弹出输入框等
程序三大流程控制语句
分支语句
代码A不满足条件就执行代码B,可以让代码变得更加有逻辑性
if语句
单分支
<script>
let score = prompt('请输入您的高考成绩')
/* 当用户输入的成绩是700以上的值时,执行下列条件
700以下的值时,则无事发生 */
if (score > 700) {
alert('恭喜您考入黑马程序员')
}
</script>
注:括号内的条件为true时,进入大括号里执行代码
小括号内的结果若不是布尔类型时,会发生隐式转换成布尔类型
双分支
<script>
let year = +prompt('请输入您要查询的年份')
// 条件
if (year % 4 === 0 && year % 100 !== 0) {
alert(`您输入的${year}年份,是闰年哦`) //满足条件执行的代码
} else {
alert(`您输入的${year}年份,是平年哦`) //不满足条件执行的代码
}
</script>
注:满足与不满足条件都只会执行一行代码,不会重复
多分支
<script>
let time = prompt('请您输入时间')
if (time < 12) {
alert('上午好哟')
} else if (time < 18) {
alert('下午好哇')
} else if (time < 20) {
alert('晚上好呀')
} else {
alert('早些睡吧,早睡早起身体好')
}
</script>
注:条件与条件之间存在互斥的关系,执行这一行,则不会执行其它行
三元运算符
可以处理一些简单的分支逻辑,一般用来取值
语法:条件 ?满足条件执行的代码 :不满足条件执行的代码
<script>
let num1 = +prompt('请输入第一个数字')
let num2 = +prompt('请输入第二个数字')
num1 > num2 ? alert(`${num1}大一点`) : alert(`${num2}大一点`)
</script>
用户输入的是字符串型,我们要主动将其转换成数字型,好进行后续比较操作
注:只要涉及数字方面的,最好主动将其转换成数字型,避免出现BUG
switch语句
适用于精确到某一个值的判断
<script>
let num1 = +prompt('请输入第一个数字')
let op = prompt('请输入一个运算符')
let num2 = +prompt('请输入第二个数字')
switch (op) {
case '+':
document.write(`你输入的第一个数是${num1},选择的运算符是${op},第二个数字是${num2},最
终得出的结果是${num1 + num2}`)
break;
case '-':
document.write(`你输入的第一个数是${num1},选择的运算符是${op},第二个数字是${num2},最
终得出的结果是${num1 - num2}`)
break;
case '*':
document.write(`你输入的第一个数是${num1},选择的运算符是${op},第二个数字是${num2},最
终得出的结果是${num1 * num2}`)
break;
case '/':
document.write(`你输入的第一个数是${num1},选择的运算符是${op},第二个数字是${num2},最
终得出的结果是${num1 / num2}`)
break;
default:
alert('您输入的运算符有误')
break;
}
</script>
注:break 中文意思“打断”:代表着此段逻辑结束
switch case语句一般用于等值判断,不适合区间判断
switch case一般需要配合break关键字使用,没有break会造成case穿透
\
循环
循环的本质就是以某个变量为起始值,然后不断产生变化量,慢慢靠近终止条件的过程
while 循环
while :在 ... 期间
循环必须有3要素
1.变量的起始值
2.循环条件
3.变量变化
<script>
// 变量起始值 从1开始进行循环
let i = 1
// 进入循环的条件 / 到达10时,停止循环
while(i <= 10) {
document.write('')
// 变化量 通过自增靠近终止条件
i++
}
</script>
案例
// 计算1~100 的累加和 1+2+3+.. + 100 = 5050
<script>
// 累加和 意味着需要两个变量
let i = 1
let sum = 0
while (i <= 100) {
sum = sum + i
i++
}
</script>
案例
// 求 1~100 之间的偶数累加和 2550
<script>
// 偶数? 一个数字 除以2的余数为0
let i = 1
let sum = 0
while (i <= 100) {
// 追加一个判断 你可以累加和 但是必须是偶数才进行和的累加计算
if (i % 2 === 0) {
sum = sum + i
}
i++
}
console.log(sum);
</script>
综合案例
<script>
// 创建账户总余额
let money = 0
// 让它一开始就等于0(不等于4即可),让它进入循环
let opticy = 0
while (opticy !== 4) {
opticy = +prompt(`请选择您的操作:
1.取款
2.存款
3.查看余额
4.退出
`)
switch (opticy) {
case 1:
// 取款的操作:
// 1. 弹出一个propmt 问用户 取多少钱
// 2. 告诉用户 当前账户还剩多少钱
let qukuan = +prompt(`请输入您的取款金额`)
money = money - qukuan
alert(`取款成功,您的余额为${money}`)
break;
case 2:
// 存款的操作:
// 1. 弹出一个prompt 问用户存多少钱
// 2. 告诉用户 当前账户还剩多少钱
let cunkuan = +prompt(`请输入您的存款金额`)
money = money + cunkuan
alert(`存款成功,您的余额为${money}`)
break;
case 3:
alert(`您的余额为${money}`)
break;
case 4:
break;
default:
alert('请输入正确的编号')
break;
}
}
</script>
\