循环

1. for 循环

  1. for(;条件判断(返回的是bool值);条件满足后执行的语句){执行语句;}
  2. 终止循环的方式
    1. break;
    2. return;
    3. 让判断条件为false
  3. 跳出当前循环

    1. continue ```javascript for(var i = 0;i < 10;i++){ console.log(i); } //等价于 var i =0; for(;i<10;){ console.log(i); i++; } //等价于 var i = 0; while(i<10){ console.log(i); i++; } //案例1 for(var i =0;i<10;i++){ if(i>5){ break;//方式1 return;//方式2

    } } console.log(sum); //案例3 可以被4,5,6 整除的数 for (var i = 0; i < 100; i++) { if (i % 4 == 0 || i % 5 == 0 || i % 6 == 0) { console.log(i); continue } } //案例四 打印0-100 以内的数字;()不能有判断{}不能有++ — var i =100; for(;i—;){ console.log(i) } ```

2.while 循环

  1. //1循环
  2. while(条件){
  3. //do sth
  4. }
  5. //2 do while 循环
  6. do{
  7. //执行语句
  8. }while(条件)
  9. /**缺点不管条件满足与否。至少都会执行一遍do里面的语句*/

for循环案例

案例1

描述:从0 开始加到100;什么时候加到总和小于100;i的值

  1. // 从0开始加到100
  2. var sum = 0;//总和初始化为0
  3. for(var i=0;i<100;i++){
  4. sum += i;
  5. if(sum>=100){
  6. break;
  7. }
  8. console.log(sum,i);
  9. }

案例2

描述:100以内可以被7整除或者个位数是7的数

  1. //案例2 100以内可以被7整除或者个位数是7的数
  2. for (var i = 0; i < 100; i++) {
  3. if (i % 7 == 0 || i % 10 == 7) {
  4. console.log(i);//输出 0,7,14,17....
  5. continue
  6. }
  7. }

案例3

打印100以内的质数(只能被1和它本身整除)

  1. var count = 0;
  2. for (var i = 1; i < 100; i++) {
  3. for (var j = 1; j <= i; j++) {
  4. if (i % j == 0) {
  5. count++;
  6. }
  7. }
  8. if (count == 2) {
  9. console.log(i);//这个是质数 输出2,3,5,7,11 .....
  10. }
  11. if(count > 2){
  12. console.log(i)//这个是和数 4,6,8,9,10
  13. }
  14. count = 0;
  15. }

案例4

打印0-100 以内的数字;()不能有判断{}不能有++ —

  1. var i =100;
  2. for(;i--;){
  3. console.log(i)
  4. }

案例5

描述:输出阶乘 n 代表n阶

  1. var n = 6,//6阶
  2. mul = 1;//积
  3. for (var i = 1; i <= n; i++) {
  4. mul *= i;
  5. }
  6. console.log(mul)

案例6

描述 10 的N次方

  1. var n = 6,//6次方
  2. mul = 1;//积
  3. for (var i = 1; i <= n; i++) {
  4. mul *= 10;
  5. }
  6. console.log(mul)

引用值

Array、Object、Function、Date、RegExp

Array

  1. var arr = [1, 2, 3];
  2. for (var i = 0; i < arr.length; i++) {
  3. console.log(arr[i]);
  4. }

Object

  1. var person = {
  2. name: 'xxx',
  3. age: 20,
  4. }
  5. person.name='www'

typeof

  • 返回值是string

    1. console.log(typeof (1)); //number
    2. console.log(typeof ('1'));//string
    3. console.log(typeof (function () { }));//function
    4. console.log(typeof ({}));//object
    5. console.log(typeof (new Date()));//object
    6. console.log(typeof (undefined));//undefined
    7. console.log(typeof (null));//object
    8. console.log(typeof ([]));//object

    显示转换

    Number

    字符串都是数字的会转成Number,其他显示转换都是NaN;
    Number()参数是数组的时候

    • 数组.valueOf
    • 数组.valueOf().toString();
      1. Number('123');//123 number
      2. Number('1234Ah');//NaN 字符串 数字字符串可以转成Number 别的都是NaN
      3. Number(null);//0
      4. Number(undefined);//NaN
      5. Number(NaN);//NaN
      6. Number(false);//0
      7. Number(new Date());//当前时间戳
      8. Number([])//0
      9. Number([1])//1
      10. Number([1,2,3])//NaN
      11. Number({})//NaN
      12. Number(function(){})//NaN

      parseInt

      parseInt(s,radix)//radix(2-36) 表示进制;
      parseInt(10,16);//返回的是10 在 16进制中表示16;
      36进制表示0123456789abcdefghijklmnopqrstuvwxyz

      parseFloat:

  • 转为小数

  • toFixed(n)//保留n位小数。四舍五入
    1. parseInt('abcn', 36);//转成36进制的数;
    2. parseInt('abcn');//NaN 默认转换10进制的数
    3. parseInt(true);//1
    4. parseInt(false);//0
    5. parseInt(undefined);//NaN
    6. parseInt(null,36)//1112745
    7. parseInt(null)//NaN????????
    8. parseInt(NaN)//NaN

    String

    1. String(1);//'1'
    2. String(undefined);//'undefined'
    3. String(null);//'null'
    4. String(NaN);//'NaN'
    5. String(false);//'false'

    Boolean

    undefined,null,false,0,NaN 是false ```javascript Boolean(null)//false Boolean(undefined);//false Boolean(NaN);//false, Boolean(0);//false Boolean(false);//false
  1. <a name="xSUj3"></a>
  2. ## 隐式类型转换
  3. - 转成string 类型的 +(字符串连接符)
  4. - +有一边是字符串的时候 是**字符串连接符 没有字符串的时候是运算符。引用类型 会调用.valueOf 方法再调用toString()。其他原始值会调用Number()方法转成数字再做加法。**
  5. - 乘除取余 都会隐式转成Number
  6. - 自增自减,算数运算符 关系运算符 字符串类型转成Number类型
  7. ```javascript
  8. var a= '123';
  9. a++;
  10. console.log(a)//124
  11. var a='a'+1;
  12. console.log(a);//a1
  13. var a = '3'*2;// */% d6
  14. var a= 1>2>3;//false
  15. var a = 2>1===1; //false 全等回比较类型
  16. var a = 2>1==1; //true 只比较值不比类型
  17. var a = undefined>0;//false
  18. var a = undefined == 0;//false
  19. console.log(1+'1');//'11'
  20. console.log(1+'true');//'1true'
  21. console.log(1+null);//1
  22. console.log(1+undefined);//NaN
  • 比较运算
    • 两边有一边是字符串的时候后,会将字符串转成(Numer())数字
    • 两边都是字符串的时候,则从左到右依次比较字符串对应的UNICode编码
      • 对应字符不相等这直接出结果
      • 对应字符相等 则进行下一位比较
  • undefined 和 null 比较
    • undefined==undefined//true
    • null == null //true
    • undefined ==null //true
  • 复杂数据类型。在隐式转换时会先转成String,然后在转成Number运算
    • 先使用valueOf方法获取其原始值,如果原始值不是number类型,则使用toString()方法转成string
    • 再将string转成number计算
      • 先将数组转成string 再和右边的字符串比较

image.png

  1. - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12831495/1615966451401-a56e848d-9f1d-4df9-9e91-d118effb9adf.png#crop=0&crop=0&crop=1&crop=1&height=142&id=eR0xk&margin=%5Bobject%20Object%5D&name=image.png&originHeight=142&originWidth=211&originalType=binary&ratio=1&rotation=0&showTitle=false&size=4816&status=done&style=none&title=&width=211)

作业

  1. // 兔子数列
  2. /***
  3. * 思路
  4. * 1:输入1,或者2 返回的都是1,因为数列的第一位和第二位永远都是1
  5. * 2:兔子数列的第n位等于 第n-1位和n-2位的和。此时n>=3;
  6. */
  7. function rabbitSequence(num) {
  8. if(typeof num == 'number'&&!num&&num>0){
  9. return '请输入正确的数字'
  10. }
  11. if (num == 1 || num==2) {
  12. return 1;
  13. }
  14. var arr = [1, 1];
  15. // arr[num - 1] = arr[num - 2] + arr[num - 3];
  16. for (var i = 3; i <=num; i++) {
  17. arr[i - 1] = arr[i - 2] + arr[i - 3];
  18. }
  19. return arr[num-1]
  20. }
  21. var num = rabbitSequence(3);
  22. console.log(num);
  23. /* **************************************** */
  24. //兔子数列 或者黄金分割数列
  25. function rabbitSequenceTwo(n) {
  26. var n1 = 1,//第一位
  27. n2 = 1,//第二位
  28. n3;//第n位
  29. if (n == 1 || n == 2) {
  30. return 1;
  31. }
  32. for (var i = 2; i < n; i++) {
  33. n3 = n1 + n2;//第n位等于第n-1和第n-2位的和.
  34. n1 = n2;//将第二位赋值给第一位
  35. n2 = n3;//将第三位赋值给第二位
  36. }
  37. return n3;
  38. }
  39. console.log(rabbitSequenceTwo(5));