运算符
赋值运算符
= += -= /= %= *=
<script>
let num = 10
//num += 1
//num -= 1
//num *= 2
//num /= 2
</script>
一元运算符
常用于计数 自增:++ 自减:--
let num = 1
//前置自增 先自加再使用
console.log(++num + 2) //num先自加为2,再加2,结果为4
//后置自增 先使用再自加
console.log(num++ + 2 ) //num此时为1,再加2,结果为3,在整个表达式计算完毕之后发生 num加1为2
//前置自增和后置自增单独使用没有什么区别
<script>
let i = 1
console.log(i++ + ++i + i) //结果为7
//第一个操作i++返回1(但之后i变为2)
//第二个操作++i先将i增加到3,然后返回3
//第三个操作直接使用当前的i值,即3
</script>
比较运算符
console.log(undefined == null) //true
console.log(undefined === null) //false 类型不一样
//强烈推荐使用 ===
<script>
//字符串比较 是从左往右依次比较字符对应的ASCII码
console.log('aa' < 'ab') //true
console.log('ac' > 'ad') //false
//NaN不等于任何值,包括它本身。 涉及到"NaN“ 都是false
console.log(NaN === NaN) //false
console.log(NaN > 1) //false
// 不同类型之间比较会发生隐式转换(转成number类型再比较)
console.log(2 == '2') //true
console.log(2 !== '2') //true
// 尽量不要比较小数,因为小数有精度问题
</script>
逻辑运算符
<script>
// 真值(truthy):在JavaScript中,除了false、0、""(空字符串)、null、undefined和NaN之外的所有值都被认为是真值。
// 假值(falsy):false、0、""(空字符串)、null、undefined和NaN被认为是假值。
console.log(11 && 22) //22
/*11 是真值。因为&&的左侧是真值,所以JavaScript会评估&&的右侧。22 也是真值,并且因为是&&操作的最终结果,所以返回22。 */
console.log(false && 'hello') //false
/* false 是假值。因为&&的左侧是假值,所以JavaScript不会评估&&的右侧,并直接返回左侧的值。 */
console.log(33 || 44) //33
/* 33 是真值。因为||的左侧是真值,所以JavaScript不会评估||的右侧,并直接返回左侧的值。 */
console.log(0 || 66) //66
/* 0 是假值。因为||的左侧是假值,所以JavaScript会评估||的右侧。66 是真值,并且因为是||操作的最终结果,所以返回66。 */
</script>
运算符优先级
一元运算符里面的逻辑非优先级很高 逻辑与比逻辑或优先级高
语句
表达式和语句
表达式:表达式可被求值,所以它可以写在赋值语句的右侧。 如 num = 3 + 4
语句:语句不一定有值,比如 alert() for和break 等语句就不能被用于赋值。
分支语句
If分支语句
//单分支
if(条件)
{
执行满足条件的代码
}
//双分支
if(条件)
{
执行满足条件的代码
}
else
{
执行不满足条件的代码
}
//多分支
if(条件1)
{
执行满足条件1的代码
}
else if(条件2)
{
执行满足条件2的代码
}
........
else
{
执行不满足条件的代码
}
//判断用户登录
<script>
let uname = prompt('请输入姓名')
let pwd = prompt('请输入密码')
// 判断要用全等
if (uname === 'hahaha' && pwd === '123456') {
alert('登录成功')
}
else {
alert('登录失败')
}
</script>
//成绩等级
<script>
let score = +prompt('请输入分数')
if (score >= 90) {
alert('优秀')
}
else if (score >= 70) {
alert('良好')
}
else if (score >= 60) {
alert('合格')
}
else {
alert('不合格')
}
</script>
三元运算符
// 语法 条件 ? 满足条件执行的代码 : 不满足条件执行的代码
<script>
// 用户输入1个数,如果数字小于10,则前面进行补0, 比如 09 03 等
let num = +prompt('输入数字')
num = num < 10 ? '0' + num : num
alert(num)
</script>
switch 语句
// switch case语句一般用于等值判断,不适合于区间判断
// switch case一般需要配合break关键字使用 没有break会造成case穿透
//简单计算器
<script>
let num1 = +prompt('请输入第一个数字')
let num2 = +prompt('请输入第二个数字')
let op = prompt('请输入算术运算符')
switch (op) {
case '+':
num = num1 + num2
alert(num)
break
case '-':
num = num1 - num2
alert(num)
break
case '*':
num = num1 * num2
alert(num)
break
case '/':
num = num1 / num2
alert(num)
break
default:
{
alert('出错')
break
}
}
</script>
循环语句
while(循环条件)
{
循环体
}
let i =1
while(i<=2)
{
console.log(i)
i++
}
continue 退出本次循环,一般用于排除或者跳过某一个选项。
break 退出整个循环,一般用于结果已经得到, 后续的循环不需要的时候可以使用。
综合:简易ATM取款机案例
<script>
let money = 100
while (true) {
// 使用反引号``换行不报错
let num = +prompt(`请选择你的操作:
1.取款
2.存款
3.查看余额
4.退出 `)
// 多使用全等
if (num === 4) {
break
}
switch (num) {
case 1:
let num1 = +prompt('取多少钱')
alert(`取款后还剩下${money - num1}元`)
break
case 2:
let num2 = +prompt('存多少钱')
alert(`存款后还剩下${money + num2}元`)
break
case 3:
alert(`余额为${money}元`)
break
default:
break
}
}
</script>