一、for循环

for循环的基本认知

  1. // 循环
  2. for(var i = 0; i < 5; i++){
  3. console.log(i);
  4. }
  5. // 语法
  6. for(变量声明, 条件判断, 步长累计){
  7. // 执行语句
  8. }
  9. // 步骤
  10. // 1. 变量声明 var i = 0
  11. // 2. 条件判断 if(i < 5){执行语句}
  12. // 3. 步长累计 i++
  13. // 2. if(i < 5){条件不满足,停止循环}
  14. // 3. 步长累计 i++

for循环的变化

  1. // 循环
  2. for(var i = 0; i < 5; i++){
  3. console.log(i);
  4. }
  5. // for循环的变化
  6. var i = 0;
  7. for(; i < 5; ){
  8. console.log(i);
  9. i++;
  10. }

while循环

  1. // while循环
  2. var i = 0;
  3. while(i < 10){
  4. console.log(i);
  5. i++;
  6. }

不用break和return如何结束循环

  1. // 不用条件如何结束循环,不能用return,不能用break
  2. var i = 1;
  3. for(; i; ){
  4. console.log(i);
  5. i++;
  6. if(i == 11){
  7. i = 0;
  8. }
  9. }

1.2、break终止整个循环

  1. var i = 1;
  2. for( ; i; ){
  3. console.log(i);
  4. i++;
  5. if(i == 11){
  6. break;
  7. }
  8. }

1.3、continue跳过本轮循环继续下一轮循环

100以内的数,跳过可以被7整除或者是个位数是7的数

  1. // continue结束本轮循环,进入下一轮循环
  2. // 100以内,跳过可以被7整除或者是个位数是7的数
  3. for(var i = 0; i < 100; i++){
  4. if(i % 7 == 0 || i % 10 == 7){
  5. continue;
  6. }
  7. console.log(i);
  8. }

1.4、for循环练习题

从0开始做加法,加到什么时候总和小于100的

  1. // 从0开始做加法,加到什么时候总和小于100的
  2. var sum = 0;
  3. for(var i = 0; i < 100; i++){
  4. sum += i;
  5. if(sum >= 100){
  6. break;
  7. }
  8. console.log(i, sum);
  9. }

打印0~9的和

  1. // 打印0~9的和
  2. var sum = 0;
  3. for(var i = 0; i < 10; i++){
  4. sum +=i;
  5. }
  6. console.log(sum);

打印100以内可以被4或者是5或者是6整除的数

  1. // 打印100以内可以被4或者是5或者是6整除的数
  2. for(var i = 0; i < 100; i++){
  3. if(i % 4 == 0 || i % 5 == 0 || i % 6 ==0 ){
  4. console.log(i);
  5. }
  6. }

打印0~100的数,()里面只能有一句,不能写比较;{}里不能出现i++或者是i—
for循环中,当条件不成立时,整个for循环就会自动结束

  1. // 打印0~100的数,()里面只能有一句,不能写比较;{}里不能出现i++或者是i--
  2. var i = 101;
  3. for(; i--; ){
  4. console.log(i);
  5. }

二、do while循环

不管条件是否成立,它都要先执行一次

  1. // do while循环:不管条件是否成立,它都要先执行一次
  2. var i = 0;
  3. do{
  4. console.log('我要开始循环了哦');
  5. i++;
  6. }while(false);

三、练习题

10的N次方

  1. // 10的N次方
  2. var n = 5;
  3. var num = 1;
  4. for(var i = 0; i <= n; i++){
  5. num *= 10;
  6. }
  7. console.log(num);

n的阶乘

  1. var n = 5;
  2. var num = 1;
  3. for(var i = 1; i <= n; i++){
  4. num *= i;
  5. }
  6. console.log(num);

把一个三位的数倒过来

  1. // 把一个三位的数倒过来
  2. var num = 789;
  3. var a = num % 10;
  4. var b = (num - a) / 10 % 10;
  5. var c = (num - a - b * 10) / 100;
  6. console.log('' + a + b + c);

打印三个数中的最大数

  1. // 打印三个数中的最大数
  2. var a = 11;
  3. var b = 99;
  4. var c = 36;
  5. if(a > b){
  6. if(a > c){
  7. console.log(a);
  8. }else{
  9. console.log(c);
  10. }
  11. }else{
  12. if(b > c){
  13. console.log(b);
  14. }else{
  15. console.log(c);
  16. }
  17. }

打印100以内的质数:仅仅可以被1和自己整除的数
注意:1既不是质数,也不是合数

  1. // 打印100以内的质数:仅仅可以被1和自己整除的数
  2. // 注意1既不是质数,也不是合数
  3. var count = 0;
  4. for(var i = 2; i < 100; i++){
  5. for(var j = 1; j <= i; j++){
  6. if(i % j == 0){
  7. count++;
  8. }
  9. }
  10. if(count == 2){
  11. console.log(i);
  12. }
  13. count = 0;
  14. }

四、初始引用值

4.1、Array数组

  • 数组的索引是从0开始,逐级递增的
  • 数组有一个length属性,用来存储数组的长度,arr.length
  • 获取数组的第一项:arr[0]
  • 或者数组的最后一项:arr[arr.length-1]

    1. var arr = [1, 2, 3, 4, null, 5];
    2. // 取值
    3. console.log(arr[0]);
    4. // 赋值
    5. arr[4] = undefined;
    6. console.log(arr); //[1, 2, 3, 4, undefined, 5]
    7. // 循环打印数组中的每一项
    8. for(var i = 0; i < arr.length; i++){
    9. console.log(arr[i]);
    10. }

    4.2、Object普通对象

  • 普通对象是由{}包裹起来,由一组一组的属性名和属性值组成的「键值对」

  • 每一组键值对的末尾用逗号分隔
  • 当访问对象的属性,这个属性不存在时,获取到的值是undefined,而不会报错

    1. // Object对象
    2. var person = {
    3. name: 'liangyu',
    4. age: 8,
    5. height: '180cm',
    6. weight: '65kg',
    7. job: 'WEB Front-end development'
    8. }
    9. // 取值
    10. console.log(person.age);
    11. // 赋值
    12. person.age = 18;
    13. console.log(person);

    五、typeof的检测机制

  • typeof检测的结果首先是一个字符串,字符串中包含着对应的数据类型

  • typeof(null) 的返回结果是object
  • typeof函数,返回的结果是’function’
  • 除此之外,typeof无法具体细分出是哪一种对象
  • 有两个及两个以上的typeof,返回的结果一定是’string’
  • typeof一个未被声明的变量,返回的结果是undefined,而不会报错

    1. console.log(typeof(1));
    2. console.log(typeof('1'));
    3. console.log(typeof(true));
    4. console.log(typeof({}));
    5. console.log(typeof([]));
    6. console.log(typeof(function(){}));
    7. console.log(typeof(null));
    8. console.log(typeof(undefined));
    9. console.log(typeof(1 - 1));
    10. console.log(typeof(1 - '1'));
    11. console.log(typeof('1' - '1'));
    12. // 面试题
    13. console.log(typeof(a));

    六、显式类型转换和隐式类型转换

    6.1、显式类型转换Number

  • 只要遇到非有效数字字符结果就为NaN

  • null转换为数字是0
  • undefined转换为数字是NaN
  • true转换数字是1,false转换为数字是0

    1. // 显式类型转换Number
    2. console.log(Number('123'));
    3. console.log(Number(true));
    4. console.log(Number('true'));
    5. console.log(Number(null));
    6. console.log(Number(undefined));
    7. console.log(Number('a'));
    8. console.log(Number('1a'));
    9. console.log(Number('3.14'));

    6.2、显式类型转换parseInt

    1. // 显式类型转换parseInt
    2. console.log(parseInt('123'));
    3. console.log(parseInt(true));
    4. console.log(parseInt(false));
    5. console.log(parseInt(null));
    6. console.log(parseInt(undefined));
    7. console.log(parseInt(NaN));
    8. console.log(parseInt('3.14'))
    9. console.log(parseInt('3.99'));
    10. console.log(parseInt('abc123'));
    11. console.log(parseInt('width: 12px'));
    12. console.log(parseInt('12px'));
    13. // parseInt(value, radix); radix的取值范围是0~36
    14. var a = 10;
    15. console.log(parseInt(a, 16));

    6.3、显式类型转换parseFloat

    1. // 显式类型转换parseFloat
    2. console.log(parseFloat('3.14'));
    3. console.log(parseFloat('3'));

    6.4、toFixed保留小数点后几位

  • toFixed保留小数点后面几位,存在着四舍五入的情况

    1. // toFixed保留小数点后面几位,存在着四舍五入的情况
    2. var num = parseFloat('3.1465926');
    3. console.log(num.toFixed(2));

    6.5、显式类型转换String和value.toString

  • null和undefined是没有toString这个方法的

    1. // 显式类型转换String和toString
    2. // 注意:null和undefined是没有toString这个方法的
    3. console.log(String(123));
    4. console.log(typeof(String(123)));
    5. console.log(typeof(123 + ''));
    6. // null和undefined是没有toString这个方法的
    7. console.log(null.toString);
    8. console.log(undefined.toString)

    6.6、显式类型转换Boolean

  • false: 只有0、NaN、null、undefined、’’ 转换为布尔值是false,其余情况都为true

  • 字符串也有length属性,存储的是字符串的长度 ```javascript // 显式类型转换Boolean // false: 只有0、NaN、null、undefined、’’ 转换为布尔值是false,其余情况都为true console.log(Boolean(true)); console.log(Boolean(null));

    // 字符串也有length属性,存储的是字符串的长度 var str = ‘1234’; console.log(str.length);

  1. <a name="FnRCz"></a>
  2. ## 6.7、隐式类型转换「++、--、*、/、%」
  3. - ++、--、*、/、%
  4. - >、<、>=、<=
  5. - +、-
  6. - 以上几种情况,遇到字符串都需要把字符串转换为number
  7. ```javascript
  8. // 隐式类型转换
  9. // ++, --, *, /, %
  10. // >, <, >=, <=
  11. // 正+, 负-
  12. // 以上几种情况,都需要把字符串转换为数字
  13. var a = '123';
  14. a++;
  15. console.log(a);
  16. // 字符串拼接
  17. var b = 'b' + 1;
  18. console.log(b);
  19. var c = '3' * 2;
  20. console.log(c);
  21. // 正+ 负-
  22. var num = '123';
  23. console.log(+num);
  24. console.log(typeof(+num));
  25. console.log(-num);
  26. console.log(typeof(-num));
  27. var d1 = '1' > '2';
  28. var d2 = 1 == '1';
  29. var d3 = 1 != '2';
  30. var d4 = 1 === '1';
  31. var d5 = NaN == NaN;
  32. console.log(d1, d2, d3, d4, d5);
  33. var a1 = 2 > 1 > 3;
  34. var a2 = 2 > 1 == 1;
  35. console.log(a1, a2);

6.8、null == undefined除此之外它们和任何值都不相等

  1. // null == undefined,除此之外它们和任何值都不相等
  2. // null === undefined, 这个是不成立的
  3. var a1 = undefined > 0;
  4. var a2 = null > 0;
  5. var a3 = undefined < 0;
  6. var a4 = null < 0;
  7. var a5 = undefined == 0;
  8. var a6 = null == 0;
  9. var a7 = null == undefined;
  10. var a8 = null === undefined;
  11. console.log(a1, a2, a3, a4, a5, a6, a7, a8);

6.9、isNaN检测一个值是否为非有效数字

  • isNaN检测一个值是否为NaN,存在隐式类型转换

    1. // isNaN检测一个值是否为NaN,存在隐式类型转换
    2. console.log(isNaN(123));
    3. console.log(isNaN('123'));
    4. console.log(isNaN('a'));
    5. console.log(isNaN(null));
    6. console.log(isNaN(undefined));
    7. console.log(isNaN(true));

    七、斐波拉契数列

    斐波拉契数列:也叫黄金分割数列,兔子数列

    1. // 斐波拉契数列
    2. // for循环算出第n位
    3. // 1 1 2 3 5 8 13 21
    4. // n1 n2 n3
    5. // n1 n2 n3
    6. // n1 n2 n3
    7. var n = parseInt(window.prompt('请输入你想要的位数'));
    8. if(n <= 0){
    9. console.log(0);
    10. }else{
    11. if(n <= 2){
    12. console.log(1);
    13. }else{
    14. var n1 = 1,
    15. n2 = 1,
    16. n3;
    17. for(var i = 2; i < n; i++){
    18. n3 = n1 + n2;
    19. n1 = n2;
    20. n2 = n3;
    21. }
    22. console.log(n3);
    23. }
    24. }