函数、Date、Math、包装类(JS)

JS


  1. forEach()
  2. slice(start, end)
  3. splice()
  4. call()和apply()
  5. arguments
  6. Date对象
  7. Math
  8. 包装类


forEach() : JS中遍历数组
  • forEach()方法需要一个函数作为参数
    • 像这种由我们创建但是不由我们调用的函数称为回调函数
    • 数组中有几个元素函数就回执行几次,每次执行时,浏览器会将遍历到的元素 以实参的形式传递进来,我们可以来定义形参,来读取这些内容
    • 浏览器会在回调函数中传递三个参数
      • 第一个参数:当前正在遍历的元素
      • 第二个参数:当前正在遍历的元素的索引
      • 第三个参数:正在遍历的数组
        var arr = ["孙悟空","猪八戒","沙和尚","唐僧","牛魔王"];
        arr.forEach(function(value, index, obj) {
    
    
            console.log(value);
        });

slice(start, end)
  • 取开始值不取结束值
  • 该方法不会改变原数组,而是将截取到的元素封装到一个新数组中返回;
        var arr = ["孙悟空","猪八戒","沙和尚","唐僧","牛魔王"];
        
        var result = arr.slice(1);    //"猪八戒,沙和尚,唐僧,牛魔王"
        result = arr.slice(1,-2);     //"猪八戒,沙和尚"
        console.log(result);

splice()
  • 可以用于删除数组中的指定元素
  •  (起始位置,删除的数量,补充的东西…)

call()和apply()
  • fun()  fun.call()  fun.apply() 都可以调用函数
  • 这两个方法都是函数对象的方法,需要通过函数对象来调用
  • 当对函数用call()apply()都会调用函数执行
    • 在调用call()apply()可以将一个对象指定为第一个参数
          此时这个对象将会成为函数执行时的this
      • call()方法可以将实参在对象之后依次传递
      • apply()方法需要将实参封装到一个数组中统一传递
  • this 的情况:
    1. 以函数形式调用时,this永远都是window
    2. 以方法的形式调用时,this是调用方法的对象
    3. 以构造函数的形式调用时,this是新创建的那个对象
    4. 使用call()和apply()调用时,this是指定的那个对象
        function fun(){
    
    
            alert(this);
        }
        var obj = {
    
    };
        fun.call(obj);    //返回 [object Object]
        fun.apply(obj);   //返回 [object Object]
        fun();    //返回 [object Window]
        function fun2(){
    
    
            console.log("a = "+a);
            console.log("b = "+b);
        }
        var obj2 = {
    
    
            name:"zhubajie",
            sayName = function(){
    
    
                alert(this.name);
            }
        };
        fun.call(obj,2,3);      //a = 2, b = 3 
        fun.apply(obj,[2,3]);       //a = 2, b = 3 

arguments
  • 在调用函数时,浏览器每次都会传递进两个隐含的参数
    1. 函数的上下文对象 this
    2. 封装实参的对象 arguments
  • arguments是一个类数组对象 不是数组 (它也可以用过索引来操作数据,也可以获取长度)
  • 在调用函数时,我们所传递的实参都会在arguments中保存
  • argument.length 可以用来获取实参的长度 (传递了几个实参)
    • 我们即使不定义形参,也可以通过arguments来使用实参(比较麻烦。arguments[0]表示第一个实参,arguments[1]表示第二个实参…)
  • 它里边有一个属性叫做**callee**
        这个属性对应一个函数对象,就是当前正在指向的函数的对象
        function fun(){
    
    
            console.log(arguments instanceof Array);//检查arguments是否是数组  返回false
            console.log(Array.isArray(arguments));//检查arguments是否是数组  返回false
        }
        fun();
        function fun2(a,b){
    
    
            console.log(arguments[1]);//输出 b的值
            console.log(arguments.length);//输出调用了几个实参
            console.log(arguments.callee)//输出调用函数fun2(...)
        }
        fun2("hello", true)

Date对象  (日期、时间)
  • 在JS中使用Date对象来表示一个时间
    • 如果直接使用构造函数创建一个Date对象,则会封装为当前代码执行的时间
    • 若要创建一个指定的时间对象,需要在构造函数中传递一个表示时间的字符串作为参数
              日期格式: 月份/日/年 时:分:秒

getDate()   从Date对象返回一个月中的某一天(1~31)
getDay()   从Date对象返回一周中的某一天(0~6)
getMonth()  从Date对象返回月份(0~11) 0表示一月,11表示12月
getFullYear()  从Date对象以四位数字返回年份
getTime()  获取当前日期对象时间戳

  • 时间戳是指从格林威治标准时间的1970年1月1日 0时0分0秒到当前日期所花费的毫秒数(1s=1000ms)
  • 计算机底层在保存时间时使用都是时间戳
        var d = new Date();
        var d2 = new Date("06/26/2020 11:10:30");
        console.log(d2);
        var date = d2.getDate();
        var day = d2.getDay();
        var month = d2.getmonth();
        var year = d2.getFullYear();
        var time = d2.getTime();
        console.log("date = "+date);//输出date = 26;表示当前日期是26号
        console.log("day = "+day);//输出day = 5;表示是星期五
        console.log("month = "+month);//输出month = 5;表示六月份
        console.log("year = "+year);//输出year = 2020;表示年份
        console.log("time = "+time);//输出一段时间 (毫秒)
        
        //利用时间戳来测试代码的执行性能
        //获取当前的时间戳
        var start = Date.now();
        for(var i=0; i<100; i++){
    
    
            console.log(i);
        }
        var end = Date.now();
        console.log("执行了:"+(end - start)+"毫秒");

Math
  • Math和其他的对象不同,它不是一个构造函数
       它属于一个工具类不用创建对象,它里边封装了数学运算相关的属性和方法

Math.PI 表示的圆周率
Math.abs() 用来计算一个数的绝对值
Math.ceil() 可以对一个数进行向上取整小数位只要有值就自动进1
Math.floor() 可以对一个数进行向下取整小数部分会被舍掉
Math.round()  可以对一个数进行四舍五入取整
Math.random()  可以生成一个0-1之间的随机数
      - 生成一个x-y之间的随机数:** Math.round(Math.random()*(y-x)+x);**
Math.max()  可以获取多个数中的最大值
Math.min()  可以获取多个数中的最小值
Math.pow(x,y)  返回x的y次幂
Math.sqrt()  开方

        console.log(Math.abs(-1));//输出 1
        console.log(Math.ceil(1.1));//输出 2
        console.log(Math.floor(1.99));//输出 1
        console.log(Math.round(1.4));//输出 1
        console.log(Math.max(10,45,30,100));//输出最大值100
        console.log(Math.min(10,45,30,100));//输出最小值10
        console.log(Math.pow(2,3));//输出 8
        console.log(Math.sqrt(9));//输出 3

包装类
  • 在JS中为我们提供了三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象
        String()
          - 可以将基本数据类型字符串转换为String对象
       Number()
          - 可以将基本数据类型的数字转换为Number对象
        Boolean()
          - 可以将基本数据类型的布尔值转换为Boolean对象
  • 注意:我们在实际应用中不会使用基本数据类型的对象
           如果使用基本数据类型的对象,在做一些比较时可能会带来一些不可预期的结果

基本数据类型
     String Number Boolean Null Undefined
引用数据类型
     Object

  • 方法和属性只能添加给对象,不能添加给基本数据类型!
    • 当我们对一些基本数据类型的值去调用属性和方法时,
         浏览器会临时使用包装类将其转换为对象,然后再调用对象的属性和方法
           调用完以后再将其转换为基本数据类型
        var s = 123;
        s = s.toString();
        s.hello = "nihao";
        console.log(s.hello);//返回 underfined
        console.log(s);//返回 "123"
        console.log(typeof s);//返回 "string"

猜你喜欢

转载自blog.csdn.net/KennGum/article/details/106997272