NaN
- not a number
- 是数值类型 不是一个数字
- 产生: 其他类型转number会得到这个NaN
运算符
- 数学运算符
+ - * / %- 当加法遇到字符串的时候会拼接
- 其他的任何运算都是先把左右两侧数据转换(隐式类型转换)成数值然后在进行数学运算
- 赋值运算符
= += -= *= /= %=- a+=b --> a = a+b
- 比较运算符
> < == === != !== >= <=- 得到是布尔值
- ==(等于) 和 ===(全等|恒等)
- 逻辑运算符
&& || !- 逻辑短路
- 一元运算符
++ --- a++ --> a = a+1
- ++a --> a = a+1
- 前置和后置
- 三元运算符
- 条件?条件成立:条件不成立
分支
- 单分支
- 双分支
- 多分支
- switch..case
循环语句
- 循环的含义: 重复执行某一段代码
- 组成条件
- 初始化状态
- 条件判断
- 循环体代码
- 状态变化
- js实现循环的语法
- while循环(10%)
初始化状态 while(条件判断){ // 如果满足执行循环体代码 // 放在花括号里面的代码会重复执行多次 循环体代码 状态变化 }- do..while循环(几乎不用)
初始化状态 do{ // 放在花括号里面的代码会重复执行多次 循环体代码 状态变化 }while(条件判断)- for循环(90%)
for(初始化条件;条件判断;状态变化){ 循环体代码 }- for循环执行的顺序
- 执行初始化条件
- 执行条件判断,如果条件满足,执行3;如果条件不满足,结束循环
- 执行循环体代码
- 执行状态变化
- 再返回2执行
break 和 continue
- break和continue可以写在循环体内
- break可以提前结束循环
- continue跳过本次循环直接进入下一次循环
双重for循环
- 每一次执行外循环都会等待内循环执行结束
- 一旦出现循环嵌套 就不要使用相同的变量名
while循环和for循环
- 思路: 一般首先想到用for循环,for能解决的就使用for循环 for解决不了的问题就要想到用while循环
- 一般我们知道开始的条件和结束的条件就直接使用for循环
- 当我们不知道循环执行的次数 只知道重复做一件的满足或者不满足的条件这时候就要使用while循环
实例
(以下代码均为课程实例) (1)while循环
<script>
// 初始化状态 一般初始化状态就是一个数字 用来计数
console.log('循环开始的代码')
var n = 10 // 初始化状态
while(n<10){ // 条件判断
// 此处的代码会执行多次 而且只有在条件满足的时候才会执行
console.log(n) // 循环体代码
n++ // 状态变化 一般状态变化都是用自增或者自减 作用就是计数
}
// 不满足就执行循环后面的代码
console.log('循环后面的代码')
</script>
(2)do ... while循环
<script>
// 这种写法后面一般不用
console.log('循环之前的代码')
var n = 10 // 第一次初始化状态就不满足
// 无论第一次条件是否满足都会执行一次循环体代码
do{
console.log(n)
n++
}while(n<10)
console.log('循环之后的代码')
</script>
(3)for 循环
<script>
console.log('循环之前的代码')
for(var n=10;n<10;n++){
console.log(n)
}
console.log('循环之后的代码')
</script>
(4)利用for 循环进行求和
<script>
// var n = 1+2+3...+10
// 累加法
var sum = 0 // 用来统计总和
// 每一次加上一个数
// sum += 1
// sum += 2
// sum += 3
// sum += 4
// sum += 5
// sum += 6
// sum += 7
// sum += 8
// sum += 9
// sum += 10
for(var i=1;i<=10;i++){
sum+=i
}
// 最终得到的sum就是1-10的和
console.log(sum)
</script>
(5)利用while循环进行求和
<script>
// var n = 1+2+3...+10
// 累加法
var sum = 0 // 用来统计总和
// 每一次加上一个数
var i=0
while(i<=10){
sum+=i
i++
}
// 最终得到的sum就是1-10的和
console.log(sum)
</script>
(6)break
<script>
for(var i=1;i<=10;i++){
if(i==3){
console.log('break之前')
// 一旦在循环体里面遇到了break后面所有代码都不执行了 循环提前结束
break
console.log('break之后')
}
console.log(i)
}
console.log('循环结束')
</script>
(7)continue
<script>
for(var i=1;i<=10;i++){
if(i==3){
console.log('continue之前')
// 一旦在循环体里面遇到了continue continue后面的代码就不会执行
// 直接进入下一次循环
continue
console.log('contimue之后')
}
console.log(i)
}
console.log('循环结束')
</script>
(8)使用continue实现求0-100所有偶数的和
<script>
var sum = 0
for(var i=0;i<=100;i++){
if(i%2==1){
// 是奇数 我们就跳过
continue
}
sum+=i
}
console.log(sum)
</script>
(9)双重for循环
<script>
// 外循环的每一次都会等待内循环执行结束
for(var i=1;i<=10;i++){
// 循环体代码 写在花阔里面代码会重复执行多次
console.log('i1', i) // 10次
// 如果出现循环嵌套 不要用同样变量名
for(var i=1;i<=10;i++){
console.log('i2', i) // 10*10次
// for(var k=1;k<=10;k++){
// console.log('k', k) // 10*10*10次
// }
}
// 等到内层循环结束 i=10
}
for(var i=1;i<=100;i++){
}
</script>
(10)画直角三角形
<script>
/*
@
@@
@@@
@@@@
@@@@@
@@@@@@
@@@@@@@
@@@@@@@@
@@@@@@@@@
*/
// 重复写一点@ 重复写一个换行
// document.write('@')
// document.write('<br>')
// document.write('@')
// document.write('@')
// document.write('<br>')
// document.write('@')
// document.write('@')
// document.write('@')
// document.write('<br>')
// document.write('@')
// document.write('@')
// document.write('@')
// document.write('@')
// document.write('<br>')
// 外层代表行数
for(var i=1;i<=9;i++){
// 每一行写的@个数和行数相关
// 内层代表每一行@个数
for(var j=1;j<=i;j++){
document.write('@')
}
// 每一行只需要写一个换行
document.write('<br>')
}
</script>
(11)等腰三角形
<script>
/*
先画行数 再来看每一行符号的个数
@ i=1 1 6
@@@ i=2 3 5
@@@@@ i=3 5 4
@@@@@@@ i=4 7 3
@@@@@@@@@ 2
@@@@@@@@@@@ 1
@@@@@@@@@@@@@ 0
*/
for(var i=1;i<=7;i++){
// 先写空格 空格个数 = 7 - 行数
for(var j=1;j<=7-i;j++){
document.write(' ')
}
// @的个数和行数的关系是 @个数 = 2*行数 - 1
for(var j=1;j<=2*i-1;j++){
document.write('@')
}
document.write('<br>')
}
</script>
(12)倒等腰三角形
<script>
/*
19-2*i
@@@@@@@@@@@@@@@@@ 17 i=1 0
@@@@@@@@@@@@@@@ 15 i=2 1
@@@@@@@@@@@@@ 13 i=3 2
@@@@@@@@@@@ 11 i=4 3
@@@@@@@@@
@@@@@@@
@@@@@
@@@
@
*/
// 先来画行数
for(var i=1;i<=9;i++){
// 空格个数 = i-1
for(var j=1;j<=i-1;j++){
document.write(' ')
}
// @个数 = 19-2*i
for(var j=1;j<=19-2*i;j++){
document.write('@')
}
document.write('<br>')
}
</script>
(13)打印100-999之间所有的水仙花数
<script>
/*
水仙花必须是三位数 100 - 999
每一位立方的和等于这个数 总共有4个水仙花数 153,370,371,407
153 = 1*1*1 + 5*5*5 + 3*3*3
*/
// 取出中间所有的数
for(var i=100; i<=999;i++){
// 做一个判断 a,b,c分别是i这个数个位,十位,百位 i = a*a*a + b*b*b + c*c*c
// console.log(i)
var ge = i%10
var shi = parseInt(i/10)%10
var bai = parseInt(i/100)
// console.log('个位', i%10)
// console.log('十位', parseInt(i/10)%10) // 除以10 抹去小数位 在取余
// console.log('百位', parseInt(i/100)) // 除以100 再抹去小数位
if(i == ge*ge*ge + shi*shi*shi + bai*bai*bai){
console.log(i)
}
}
</script>
(14)求一个数字的长度
<script>
// 要求用户输入一个数字
var num = prompt('请输入一个数字')
// 计算出这个数字的长度
// 只知道重复做一件事情 但是不知道具体的次数 只知道结束的条件 用while循环
var count = 0
while(num!=0){
// 写重复做的事情 拿num除以10在取整把算得结果在赋值这个数
num = parseInt(num/10)
// 每进来一次计个数
count++
}
// 知道循环结束 count就是循环执行的次数
console.log(count)
</script>
(15)思考题
<script>
var sum = 0
// 求0-100之间所有偶数的和
// for(var i=0;i<=100;i++){
// // 累加只有在为偶数的时候才累加
// if(i%2===0){
// sum = sum + i
// }
// }
for(var i=0;i<=100;i+=2){
sum = sum + i
}
console.log(sum)
</script>
(16)扩展题(四叶玫瑰数)
<script>
// 打印1000-9999之间所有的四叶玫瑰数 1634,8208,9474
// i == a*a*a*a + b*b*b*b + c*c*c*c + d*d*d*d
for(var i =1000;i<=9999;i++ ){
var ge = i%10
var qian = parseInt(i/1000)
var bai = parseInt( i/100) %10
var shi = parseInt(i/10) %10
if(i== qian* qian*qian*qian + bai*bai*bai*bai + shi*shi*shi*shi + ge*ge*ge*ge ){
console.log(i)
}
}
</script>
(17)作业01
<script>
// 求256-6666之间所有是5的倍数数字的和
var sum=0
for(i=256;i<6666;i++){
// console.log(i)
if(i%5===0){
// console.log(i)
sum+=i
}
}
console.log(sum)
</script>
(18)作业02
<script>
// 求10! 阶乘
// 10!=10*9*8*7*...*2*1
var y =1
for (i = 1; i <= 10; i++) {
// console.log(i)
y=y*i
}
console.log(y)
</script>
(19)作业03
<script>
/*
1! + 2! + 3! + ... + 20!
双重for循环 外层求和 内层求阶乘
*/
//
var y = 0
for (var i = 1; i <= 20; i++) {
var x = 1
for (var j = 1; j <= i; j++) {
x *= j
}
y += x
}
console.log(y)
// var sum = 0
// for(var i=1;i<=20;i++){
// var ji = 1
// for(var j=1;j<=i;j++){
// ji*=j
// }
// sum+=ji
// }
// console.log(sum)
</script>