js 递归、js对象、js math对象

1.递归

什么是递归?

  • 函数的一种应用方式。
  • 函数之间可以互相调用。
  • 递归是函数调用函数的一种特殊情况。就是函数调用自己。

【注意】在工作中,递归慎用。不到万不得已绝对不要用。

递归的特点

  • 函数自己调用自己
  • 一般情况都有参数
  • 一般情况都有return。

写递归的方法

  • 首先要找到递归结束的情况。
  • 找本次函数和下次函数执行之间的关系。
  • 调用下一次函数。

2.对象

复杂数据类型

  • Array 数组
  • function 函数
  • object 对象
  • 万物皆对象
  • 我们如果要描述一个人的信息,如果使用基础数据类型,创建的变量之间是独立,不容易看出关系。
  • JavaScript中的对象可以是生活中具体事务的一个抽象。
  • JavaScript中的对象时无序属性的集合。
  • 对象:
  • 特有的属性(属性)
  • 特有的行为(方法)
  • 变量:一个数据
  • 数组:一组数据
  • 对象:一组有关联的数据
  • 函数:放一段可执行的代码。

3.创建对象

创建对象的方法

  • new 关键字
  • 字面量
  • 其实第二种方式本质上是第一种方式,当我们使用第二种方式的时候,js在底层还是调用了第一种方式。第二种是第一种方式的语法糖。用起来比较简单。比较容易接收。

    // 1.通过new 关键字创建一个对象
    var grilfriend = new Object();
    //2.通过字面量的方式创建一个对象   
    var boyfriend = {};

4.对象属性

  • 对象就是属性的无序集合。
  • 属性: 可以是任意类型。 分为属性名与属性值。 是键值对。 一个键对应一个值。 一个属性名对应一个属性值。
  • 新增属性:
  • 对象名.属性名 = 属性值 点语法
  • 对象名[‘属性名’] = 属性值 数组关联语法
  • 区别:
  • 第二种方式中的属性名可以用变量。第一种不可以。
  • 第二种方式可以拼接字符串,第一种不可以。
  • 使用属性语法:
  • 对象名.属性名
  • 对象名[‘属性名’]
  • 删除属性:
  • delete关键字
  • 语法:
  • delete 对象名.属性名
  • delete 对象名[‘属性名’]
  • 修改属性值:
  • 对象名.属性名 = 属性值
  • 对象名[‘属性名’] = 属性值
  • 当你去修改一个属性值的时候,如果该属性不存在,则为新增。如果存在则为修改。

    var boyfriend = new Object();
    // 新增属性
    boyfriend.height = 180;
    boyfriend.weight = 70;
    boyfriend.kaicar = function(){
      console.log("单手开法拉利");
    }
    console.log(boyfriend);  //{height: 180, weight: 70, kaicar: ƒ}
    //----------------------------------------------------------------------------------------------
    var boyfriend = new Object();
    // boyfriend.a = 180;
    boyfriend["a"] = 180;
    boyfriend['height'] = 180;
    boyfriend['weight'] = 180;
    boyfriend['height' + 'weight'] = 180;
    console.log(boyfriend);  //{a: 180, height: 180, weight: 180, heightweight: 180}
    //----------------------------------------------------------------------------------------------
    /* 删除属性 */
    var boyfriend = new Object();
    // boyfriend.a = 180;
    boyfriend["a"] = 180;
    boyfriend['height'] = 180;
    boyfriend['weight'] = 180;
    boyfriend['height' + 'weight'] = 180;
    // delete boyfriend.height;
    delete boyfriend["height"];
    console.log(boyfriend);  //{a: 180, weight: 180, heightweight: 180}
    //----------------------------------------------------------------------------------------------
    //使用属性
    var boyfriend = new Object();
    // boyfriend.a = 180;
    boyfriend["a"] = 180;
    boyfriend['height'] = 180;
    boyfriend['weight'] = 180;
    boyfriend['height' + 'weight'] = 180;
    console.log("身高:"+boyfriend['height']);  //身高:180
    console.log("体重:"+boyfriend.weight);   //体重:180
    boyfriend.weight = 200;
    console.log(boyfriend);  //{a: 180, height: 180, weight: 200, heightweight: 180}

5.基础数据类型与赋值数据类型的区别

  • 总结:
  • 存储:
  • 基础数据类型:在变量中,存放的是值本身。
  • 复杂数据类型:在变量中,存放的是指向在堆中的对象的地址。
  • 赋值:
  • 基础数据类型:将变量中存放的值直接给另一个变量
  • 复杂数据类型:将变量中的地址赋值给另外一个变量,两个变量指向同一个对象。
  • 比较:
  • ==比较的是变量中存放的值。因为基础数据类型存放的是值,比较的时候值相等,两个基础数据类型就相等。但是复杂数据类型存在的是地址,除非指向同一个变量,否则都是false,就算两个对象中的属性一模一样也是false。

    var a = 10;
    var b = a;
    b = 20;
    console.log(a);  //10
    console.log(b);  //20
    // -------------------------------------------------------------------------------------------------------------
    var obj1 = {
      name: "张三",
      age: "18"
    }
    var obj2 = obj1;
    obj2.age = 20;
    console.log(obj1);  //{name: "张三", age: 20}  
    console.log(obj2);  //{name: "张三", age: 20}
    console.log(obj1 == obj2);  //true
    var obj3 = {
      name: "张三",
      age: "18"
    }
    console.log(obj1 == obj3);  //false

6.Math对象

  • js为我提供一些它定义好的对象,对象中包含了一些属性和方法。
  • JS对象:
  • 内置对象 属性和方法系统是定义好的
  • 自定义对象 需要我们自己定义属性和方法

Math.random 重点

  • 作用:返回一个0-1的随机数(只包含0,不包含1)
  • 如果需要一个0-n的值,则用Math.random*n
  • 如果我需要一个3-10的值 先求出一个0-7的值 在这个值的基础上+3 就是3-10.
  • 需要你需要一个n-m的值,先求出0-(m-n)的值,然后再+n。
  • parseInt(Math.random()*(m-n)+n)

Math.max(num1,num2)

  • 作用:返回两个参数中最大的数。

Math.min(num1,num2)

  • 作用:返回两个参数中最小的数。

Math.abs(num)

  • 作用:返回参数的绝对值。

Math.round(num) 重点

  • 作用:对参数进行四舍五入 (只看小数点后面的一位)

Math.ceil(num) 重点

  • 作用:向上取整

Math.floor(num) 重点

  • 作用:向下取整

Math.pow(x,y)

  • 作用:求x的y次方

Math.sqrt(num)

  • 作用:开平方

Math.PI = π 圆周率

    console.log(parseInt(Math.random() * 7 + 3));  // 返回一个随机数(整数)
    //-----------------------------------------------------------------------------------------------------
    console.log(Math.max(4,5,6,89,25));  //89
    //-----------------------------------------------------------------------------------------------------
    console.log(Math.min(4,5,6,89,25));  //4
    //-----------------------------------------------------------------------------------------------------
    console.log(Math.abs(-5));  //5
    //-----------------------------------------------------------------------------------------------------
    console.log(Math.round(3.1415));  //3
    //-----------------------------------------------------------------------------------------------------
    console.log(Math.ceil(6.3567));  //7
    //-----------------------------------------------------------------------------------------------------
    console.log(Math.floor(4.99999999));  //4
    //-----------------------------------------------------------------------------------------------------
    console.log(Math.pow(4, 3));  //64
    //-----------------------------------------------------------------------------------------------------
    console.log(Math.sqrt(16));  //4
    //-----------------------------------------------------------------------------------------------------
    console.log(Math.PI);  //3.141592653589793

案例练习

  • 递归
  • 倒叙输出一个正整数。
    倒叙输出一个正整数。
    比如: num = 123456
    fn(num)  654321
    
    123456 % 10 = 6
    12345 % 10 = 5
    1234 % 10 = 4
    123 % 10 = 3
    12 % 10 = 2
    1 < 10  = 1 
   -->
  <script>
    function fn(n) {
      if (n < 10) {
        console.log(n);
      } else {
        console.log(n % 10);
        fn(parseInt(n / 10));
      }
    }
    fn(123456)
    // 第一次进入fn(123456)   n = 123456  6
    // 第二次进入fn(12345) n = 12345  5
    //第三次进入fn(1234)  4  
    // 第四次进入fn(123) 3
    // 第五次进入fn(12) 2
    // 第六次进入fn(1) 1
  • 封装一个函数:随机产生一个十六进制的颜色值。
  <div class="box"></div>
  <button id="btn">修改颜色</button>
    .box {
      width: 200px;
      height: 200px;
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
      background-color: blueviolet;
    }
    #btn{
      margin-top: 600px;
      margin-left: 920px;
    }
    function getColor() {
      /* 
      常见的几种十六进制颜色
       #ff6700 
      #cccccc
      */
      //  每一个十六进制颜色开头都有一个#
      var str = "#"
      // 拼接后面的十六进制数
      // 因为Math.random只能产生数字,字母无法产生。所以我们可以用数组的方式,存储16进制的数字。
      var arr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
      // 使用Math.random去随机生成下标,用下标去获取数组中的值。
      for (var i = 0; i < 6; i++) {
        var index = parseInt(Math.random() * 16);
        str += arr[index];
      }
      return str;
    }
    var btn = document.getElementById("btn");
    btn.onclick = function () {
      var color = getColor();
      var box = document.getElementsByTagName("div")[0];
      box.style.backgroundColor = color;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值