2022-04-10 JavaScript函数方法和其他对象

我大受震撼

主要补充两个函数相关的方法call和apply。以及学习除了函数对象之外一些常用的对象类型。

1.call和apply

call和apply是函数的两个比较常用的方法。两个方法都是函数对象的方法,需要通过函数来调用。两个方法都可以指定一个对象为参数,这个对象会被指定为调用这两个方法的函数的this,也就是说我们可以使用这两个方法将函数应用于我们指定的对象。
除了传入对象作为参数之外,还可以将实参传入这两个方法。这里二者就有不同的地方,call传入可以直接在对象参数的后面传入实参,而在apply方法中传入实参的时候,必须将实参封装到一个数组中

        function fun(a, b) {
            console.log(this.name);
            console.log(a);
            console.log(b);
        };

        let person = {
            name:"Jack"
        };

        // fun.call(person, 2, 3);//调用call方法函数执行
        fun.apply(person, [2, 3]);//调用apply方法函数执行

2.arguments

函数在被调用的时候,浏览器会默认向其中传入一个参数this,关于this的指向这里不在过多的介绍。其实除了this之外,还有另外一个参数也会默认传递进函数,这个就是arguments。它是一个类数组对象,和数组一样可以通过索引对内部的元素进行操作。我们在调用函数的时候向函数内部传入的实参都被封装在了arguments中。

        function fun() {
            console.log(arguments.length);//2
            console.log(arguments[0]);
            console.log(arguments[1]);
        };

        fun("hello",true);//未定义形参 但是通过索引我们依然访问到了实参

arguments还有一个需要掌握的方法callee,它会指向一个函数对象,该函数对象就是当前正在执行的函数

        function def() {
            console.log(arguments.callee);
        };

3.Date对象

date在英语中的意思是日期。所以在JavaScript中它表示的是一个时间相关的对象。直接看代码来看该对象的使用。

        let day = new Date("12/06/2022 12:36:18");//传入表示时间的字符串 即可创建一个指定时间的对象
        //时间的格式  月/日/年 时:分:秒
        console.log(day);

Date作为一个JavaScript中内置的对象,我们可以直接使用。既然是对象那么它就有自己所独有的一些方法

        /*针对Date对象的方法
        * getDate 获取日期 也就是几号
        * getDay 获取星期几 注意范围为0-6 0表示周日
        * getMonth 获取月份 0表示1月 1表示2月 以此类推
        * getFullYear 获取年份
        * 。。。详细的可以查看W3C的手册*/

        // let d = time.getDate();
        // let d = time.getDay();
        // let d = time.getMonth();
        let d = time.getHours();
        console.log(d);

        /*getTime 获取当期对象日期的时间戳
        *   表示的实际上时格林威治时间(1970年1月1日 0时0分0秒)至日期对象所花费的毫秒数
        *   计算机底层保存时间都是使用的时间戳*/
        let c = time.getTime();
        console.log(c);

        /*Date.now
        *   获取执行当前代码的时间戳的方法
        *   可以用来计算程序的运行时间
        * */

这里特别注意getDate和getDay获取的分别是日期和一周中的"周几",以及在JavaScript中描述周几和几月的方法跟我们日常的生活是不一样的。
另外一个值得关注的Date对象的方法,Date.now。它获取的是执行当前这行代码的时间戳,利用这个特性,我们在一段代码的开头和结尾处各添加一行该代码,二者结果相减就能直观地体现代码的执行时间.比如测试浏览器打印1-1000时花费的时间。

        let start = Date.now();
        for (let i = 0; i <= 1000; i++) {
            console.log(i);
        };
        let end = Date.now();
        console.log(end-start);

更多Date对象相关方法查阅W3C。JavaScript Date 参考手册 (w3school.com.cn)

4.Math对象

很明显,这个对象就是一些包含了数学运算相关方法的对象。其中包含了一些常用的数学运算操作包括开平发,取整,生成随机数等等。下面的代码展示了一些常用的方法。

        /*Math对象
        *   Math和其他类不同 他不是构造函数
        *   Math是一个工具类 里面封装了一些数学运算相关的属性和方法
        *       Math.PI表示的就是圆周率
        *       Math.abs表示获取绝对值*/

        let a = -12.394;
        console.log(Math.abs(a));

        /*ceil 对数据向上取整
        * floor 对数据向下取整数
        * round 对数据四舍五入 也就是取到相隔最近的整数*/
        console.log(Math.ceil(1.1));
        console.log(Math.floor(1.9));
        console.log(Math.round(1.3));

        /*random 生成0-1之间的一个随机数
        * 如果要生成一个x--y之间的随机数 则使用
        * Math.round(Math.random()*(y - x)) + x*/
        for (let i = 0; i < 11; i++) {
            console.log(Math.round(Math.random()*5) + 2);
        };

        /*max 获取多个数中的最大值
        * min 获取多个数中的最小值*/

        let max = Math.max(1,54,79,19,1);
        console.log(max);

        /*pow(x,y)
        *   返回x的y次幂
        *
        * sqrt()
        *   返回一个数的平方根*/

        let mi = Math.pow(2, 10);
        console.log(mi);

更多Math对象的方法也可以查阅W3C。JavaScript Math 参考手册 (w3school.com.cn)

5.包装类

之前提过,类就是构造函数的另一个名字。包装类就是一类特殊的构造函数,它们会将基本类型的数据转换为对象。只要是Number String Boolean这三个包装类,它们会将与它们名字对应的基本类型的数据转换为对象。下面的代码使用了包装类,并且验证了它们的作用。

        let a = new String("name");
        let str = "name";
        console.log(a === str);//值相同 但是数据类型不一样

实际开发当中,我们一般不会手动使用包装类来转换基本类型的数据。之所以介绍它是因为包装类时浏览器自动调用的,我们需要了解这个机制。比如下面的代码

        let b = 123;
        b = b.toString();
        console.log(b);
        console.log(typeof b);

b作为Number类型的数据是不可能去调用toString()方法的,之索引这里代码没有报错,就是因为浏览器自动调用包装类,将数据类型进行了一个临时的转换。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容