JavaScript(五):内置对象--Math对象、日期对象、数组对象、字符串对象

本文介绍了JavaScript的内置对象,包括Math、Date、Array、String等。详细讲解了各对象的属性和方法,如Math对象的最大值、最小值、绝对值等方法;Date对象的日期格式化、时间戳获取;数组对象的创建、元素操作、排序等;字符串对象的位置查找、字符统计等方法,还给出了相关案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript内置对象

JavaScript中的对象分为3种:目定义对象、内置对象、浏览器对象。前面两种对象是JS基础内容,属于ECMAScript;第三个浏览器对象属于我们JS独有的,我们JS API讲解。

内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)。内置对象最大的优点就是帮助我们快速开发JavaScript提供了多个内置对象:Math、Date、Array、String等。

MDN文档查阅

可以使用MDN文档来查询JS的一些内置对象。

网址:MDN: https://developer.mozilla.org/zh-CN/
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects

一、Math对象 

Math对象不是一个构造函数,我们不需要new来调用,可以直接使用里面的属性和方法。

1. max最大值和min最小值方法

	console.log(Math.PI);  //3.141592653589793
	console.log(Math.max(1, 5, 567, 57));  //567
	console.log(Math.max(23, 45, 56, 'zzy'));  //如果有数字之外的就是NaN
	console.log(Math.max()); //如果没有参数,那么返回-Infinity
	console.log(Math.min(1, 5, 567, 57));  //1

2、 利用对象封装自己的数学对象,里面包含PI 最大值 最小值 

        // 利用对象封装自己的数学对象,里面包含PI 最大值 最小值
        var myMath = {
            PI : 3.141592653,
            max : function() {
                var max = arguments[0];
                for ( i = 1 ; i < arguments.length ; i ++){
                    if(arguments[i] > max){
                        max = arguments[i];
                    }
                }
                return max;
            }, 
            min: function () {
                var min = arguments[0];
                for (i = 1; i < arguments.length; i++) {
                    if (arguments[i] < min) {
                        min = arguments[i];
                    }
                }
                return min;
            }
        }
        console.log(myMath.PI);
        console.log(myMath.max(1,3,5,7,9));
        console.log(myMath.min(2,4,6,8));

 3、 取绝对值abs

	//绝对值
	console.log(Math.abs(1)); //1
	console.log(Math.abs(-1)); //1
	console.log(Math.abs('-1')); //1 这里面有一个隐式转换,会把字符串1转换为数字1
	console.log(Math.abs('zzy')); //NaN 

4、向下取整floor

	//向下取整floor(地板)
	console.log(Math.floor(1.1)); //1
	console.log(Math.floor(1.9)); //1

5、向上取整floor

        //向上取整ceil(天花板)
        console.log(Math.ceil(1.1)); //2
        console.log(Math.ceil(1.9)); //2

6、四舍五入round

需要注意的是:遇到例如-1.5的时候,往大了取,向数轴右侧进行取整

        console.log(Math.round(1.1)); //1
        console.log(Math.round(1.9)); //2
        console.log(Math.round(-1.1)); //-1
        console.log(Math.round(-1.9)); //-2
        console.log(Math.round(-1.5)); //-1 这个地方比较特殊,遇到.5都应该向数轴右侧进1

7、随机数方法random() 

如果没有其他操作,默认就是随机取一个[0,1)之间的浮点型小数。


        console.log(Math.random());

随机取两个数之间的一个整数,不含最大值,含最小值 :(公式不需要理解,记住copy就行)

// 随机取一个[min,max)之间的整数
function getRandom1(min, max) {
    // 随机取一个[min,max)之间的整数
    return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值
}
console.log(getRandom1(1, 10));

 随机取两个数之间的一个整数,含最大值和最小值 :(公式不需要理解,记住copy就行)

// 随机取一个[min,max]之间的整数
function getRandom2(min, max) {
    // 随机取一个[min,max]之间的整数
    return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值
}
console.log(getRandom2(1, 10));

随机点名:

        // 随机取一个[min,max]之间的整数
            function getRandom1(min, max) {
                return Math.floor(Math.random() * (max - min+1))+min; //含最大值,含最小值
            }
            console.log(getRandom1(1, 10));
        // 随机点名
        var arr = ['中国','美国','椰果','应该'];
        console.log(arr[getRandom1(0,arr.length-1)]);

8、猜数字游戏 

        function getRandom(min, max) { 
            return Math.floor(Math.random()*(max - min + 1)) + min; 
        }
            var random = getRandom(1, 10); 
            while(true) {//死循环
                var num = prompt('你来猜?输入1-10之间的一个数字');
                if (num >random){
                    alert('你猜大了');
                } else if (num < random) {
                    alert('你猜小了');
                } else {
                    alert('你好帅哦,猜对了');
                    break;//退出整个循环结束程序
                }
            }

 9、 猜数字游戏,猜十次

//猜数字,猜十次猜不到就滚蛋
function getNum(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
var x = getNum(1, 10);
for (var i = 1; i <= 10; i++) {
    var y = parseFloat(prompt('请输入一个1~10之间的整数:'));
    if (y < 1 || y > 10) {
        alert('输入有误!');
        // continue;  其实这里不用写continue
    }
    else if (i == 10 && y != x) {
        alert('次数用完!');
        break;
    }
    else if (y < x) {
        alert('猜小了!');
        // continue;
    }
    else if (y > x) {
        alert('猜大了!');
        // continue;
    }
    else if (y == x) {
        alert('恭喜你猜对了!');
        break;
    }
}

二、日期对象Date

和Math对象不同的是,Date对象是一个构造函数,要通过new来调用创建日期对象(必须要实例化)。

1、如果没有参数,返回当前系统时间 

        // 没有其他限制,就返回当前系统的时间
        var date = new Date();
        console.log(date);

2、参数的写法:数字型与字符串型(常用) 

数字型:

	var date1 = new Date(2023, 11, 8);
	console.log(date1); //返回的是2023年12月8

发现月份会多加一个月 。

字符串型:

var date2 = new Date('2023-11-08 18:15:43');
console.log(date2);

用字符串型就是正常的。 

3、日期格式化

        var date = new Date();
    	console.log(date.getFullYear());  //返回的是日期的年
        console.log(date.getMonth() + 1);  //返回的是日期的月,但是月份会小1月,要加1才行
        console.log(date.getDate()); //返回的是天
        console.log(date.getDay());  //0-6,周一返回1,周六返回6,但是周日返回0
        console.log(date.getHours());
        console.log(date.getMinutes());
        console.log(date.getSeconds());

我们写一个今天是2023年11月8日星期三。
这里如果星期几要搞成大写,可以建立一个数组,正好周日到周六也是0~6。

        //格式化日期年月日
        var date = new Date();
        //我们写一个2023年11月8日星期三
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        var dates = date.getDate(); 
        var arr=['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
        var day = date.getDay();
        console.log('今天是:'+year+'年'+month+'月'+dates+'日 '+arr[day]);

 封装一个函数,返回当前的时分秒 格式: 18:06:09

用三元运算符:

        //要求封装一个函数返回当前的时分秒格式08:08:08
        //封装一个函数,返回当前的时分秒
            function getTime() {
                var now = new Date();
                var hour = now.getHours();
                var minutes = now.getMinutes();
                var seconds = now.getSeconds();
                // 为了更好的视觉效果,如果小于10应该补0
                hour = hour < 10 ? '0' + hour : hour;
                minutes = minutes < 10 ? '0' + minutes : minutes;
                seconds = seconds < 10 ? '0' + seconds : seconds;
                return hour + ':' + minutes + ':' + seconds;
            }
            console.log(getTime());

4. 时间戳,获取当前距离1970年1月1日的总毫秒数 

(1)通过valueOf getTime

        // 1、通过valueOf getTime
        var date = new Date(); 
        console.log(date.valueof());//就是我们现在时间距离1970.1.1总的毫秒数
        console.log(date.getTime());

(2) 简单的写法(最常用的写法)+new Date()

// 2.简单的写法(最常用的写法)
        var date1= +new Date();//+new Date()返回的就是总的毫秒数
        console.log(date1);

(3) H5新增的获得总的毫秒数

        //3.H5新增的获得总的毫秒数
        console.log(Date.now());

5、倒计时案例(重要)

分析:

        function countDown(time) {
            var nowTime = +new Date();//把系统当前的时间转换为总共多少毫秒
            var inputTime = +new Date(time);//返回的是用户输入时间总的毫秒数
            var times = (inputTime - nowTime)/1000;//相差时间转换为秒
            var d = parseInt(times / 60 / 60 / 24);//天
            d=d < 10 ? '0' + d:d;//如果天数小于10 那么前面加个0 否则直接返回d
            var h=parseInt(times/60/60%24);//时
            h=h < 10 ? '0' + h:h; 
            var m=parseInt(times /60%60);//分
            m=m<10?'0'+ m:m;
            var s =parseInt(times%60);//当前的秒
            s=s<10?'0'+s:s;
            return d+'天'+h+'时'+m+'分'+s+'秒';
        }
        console.log(countDown('2023-11-9 18:00:00'));

三、数组对象

1、创建数组的两种方式(字面量和new Array())

        //创建数组的两种方式
        //1.利用数组字面量
        var arr = [1, 2, 3];
        console.log(arr[0]);
        //2.利用new Array()
        // var arr1=new Array();//创建了一个空的数组
        //var arr1=new Array(2);//这个2表示数组的长度为2里面有2个空的数组元素
        var arr1=new Array(2,3);//等价于[2,3]这样写表示里面有2个数组元素是2和3
        console.log(arr1);

2、检测是否为数组 

(1)instanceof运算符

//1. instanceof 运算符可以检测是否为数组
var arr = [];
console.log(arr instanceof Array);  //true
var obj = {};
console.log(obj instanceof Array);  //false

(2)Array.isArray(参数); H5新增的语法, IE9以上版本支持。

//2. Array.isArray(参数); H5新增的语法, IE9以上版本支持
console.log(Array.isArray(arr));  //true
console.log(Array.isArray(obj));  //false

3.、添加删除数组元素(重要) 

(1)在数组后面添加元素:push

1.push可以在数组后面追加新的元素
2.push(参数);参数直接写要添加的数组元素就可以。
3.push结束后,返回的是新数组的长度
4.原数组会发生相应的变化

        var arr = [1,2,3];
        arr.push(4,'pp');
        //console.log(arr.push(4, 'pp'));//返回的是新数组的长度5
        console.log(arr);

(2)在数组前面添加元素:unshift

1.unshift可以在数组后面追加新的元素
2.unshift(参数);参数直接写要添加的数组元素就可以
3.unshift结束后,返回的是新数组的长度
4.原数组会发生相应的变化

var arr = [4, 5, 6];
arr.unshift('yhg', 8);
// console.log(arr.push('yhg', 8));  //返回的是数组长度5
console.log(arr); //['yhg', 8,4,5,6,]

(3)删除数组最后一个元素:pop

1.pop是删除数组的最后一个元素,一次只能删除一个元素
2.pop(),没有参数,直接写就可以
3.pop完之后返回的结果是删除后的那个元素
4.原数组也会发生变化

var arr = [3, 4, 5, 'yhg'];
console.log(arr.pop());  //yhg
console.log(arr);  //[3,4,5]

(4)删除数组第一个元素:shift

1.shift是删除数组的最后一个元素,一次只能删除一个元素
2.shift(),没有参数,直接写就可以
3.shift完之后返回的结果是删除后的那个元素
4.原数组也会发生变化

var arr = [3, 4, 5, 'yhg'];
console.log(arr.shift());  //3
console.log(arr);  //[4, 5, 'yhg']

 (5)筛选数组案例

有一个包含工资的数组[1500,1200,2000,2100,1800],要求把数组中工资超过2000的删除,剩余的放到新数组里面.

        var arr = [300, 1500, 1800, 2100, 2300];
            var newArr = [];//定义一个新数组
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] < 2000) {
                    newArr.push(arr[i]);//如果工资小于2000,就添加到新数组里面
                }
            }
            console.log(newArr);  //[300,1500,1800]

4.、翻转数组和数组排序 

(1)翻转数组:reverse

var arr = [2, 4, 5, 6, 7];
arr.reverse();
console.log(arr); //[7,6,5,4,2]

(2)数组排序:(冒泡排序)

var arr = [3, 56, 8, 23, 13, 1];
arr.sort();
console.log(arr); // [1, 13, 23, 3, 56, 8]

但是当遇到有十位数的,她先按照第一个数字排序,所以我们可以这样写:(先记住就好)


        	var arr = [3, 56, 8, 23, 13, 1];
                arr.sort(function (a, b) {
                    // return a - b;  //升序
                    return b - a;  //降序
                });
                console.log(arr);

 这是降序。

5、 数组索引 

 例如:

   (1)它只返回第一个满足条件的索引号 作用就是返回该数组元素的索引号,当前所在数组位置第几个

   (2)它如果在该数组里面找不到元素,则返回的是-1

var arr = ['zzy', 'ht', 'aj', 'qq', 'aj'];
	console.log(arr.indexOf('aj'));  //2
	console.log(arr.lastIndexOf('aj'));  //4
	console.log(arr.indexOf('wx'));  //-1
	console.log(arr.lastIndexOf('wx'));  //-1

6、 数组去重(面试重要)

思路:

代码:


        function unique(arr) {
            var newArr = [];
            for(var i = 0 ; i<arr.length ; i ++){
                if (newArr.indexOf(arr[i]) === -1) {
                    newArr.push(arr[i]);//如果新数组newArr里面没有arr[i],就添加上去
                }
            }
            return newArr;
        }
        var result = unique([1,2,3,4,4,3,2,5]);//把函数的结果返回给result
        console.log(result);//输出result

7、数组转换为字符串

toString( )

	   	var arr = [1, 2, 3];
	    var arr1 = arr.toString();
	    console.log(arr1); //1,2,3

join('|') 

        var arr2 = arr.join('|');
        console.log(arr2);  //1|2|3
        var arr3 = arr.join('&');
        console.log(arr3); //1&2&3

 四、字符串对象

1、基本包装类型

简单数据类型为什么会有length属性呢?

        //基本包装类型
        var str = 'andy';
        console.log(str.length);
        //对象才有属性和方法复杂数据类型才有属性和方法
        //简单数据类型为什么会有length属性呢?
        //基本包装类型::就是把简单数据类型包装成为了复杂数据类型
        //(1)把简单数据类型包装为复杂数据类型
        var temp = new String('andy');
        //(2)把临时变量的值给strstr = temp;
        //(3)销毁这个临时变量
        temp = null;

总结:

2.字符串的不可变 

指的是里面的值不可变,虽然看上去变了,但是实际上是地址变了,内存中新开辟了一个内存空间,然后字符串指向了新的空间。所以不要大量拼接字符串。

3.字符串对象里的方法

(1)根据字符返回位置:indexOf(‘要查找的字符’,开始的位置)

        //字符串对象根据字符返回位置 str.indexof('要查找的字符',[起始的位置])
        var str='改革春风吹满地,春天来了';
        console.log(str.indexof('春'));
        console.log(str.indexof('春',3));//8 从索引号是3的位置开始往后查找

 (2)求某个字符出现的位置和次数

思路:


        var str = "oabcoefoxyozzopp"; 
        var index = str.indexOf('o'); //吧o第一次出现的位置赋值给index
        var num = 0;
        // console.log(index);
        while (index !== -1) {//只要出现的位置不等于-1,就说明后面还有o
            console.log(index);//输出第一个o的位置
            num++;//没出现一次o 次数就加一
            index = str.indexOf('o', index + 1);//继续从index+1的位置往后查找
        }
            console.log('o出现的次数是:'+num);

 

结果:

 

 (3)根据位置返回字符(重点)

(a) charAt(index)
	var str = 'yhg'
	console.log(str.charAt(0));  //y
	console.log(str.charAt(2));  //g

 

(b)charCodeAt(index)

charCodeAt可能做游戏用到,就是用来判断用户按下了哪个键,因为每个键都对应一个ASCII码.

var str = 'z';
console.log(str.charCodeAt(0)); //z对应的ASCII码是106

 

(c)str[index] h5新增
	console.log(str[0]);  //y
	console.log(str[2]);  //g

(4)统计出现次数最多的字符 

思路:

①核心算法:利用charAt()遍历这个字符串

②把每个字符都存储给对象,如果对象没有该属性,就为1,如果存在了就+1

③遍历对象,得到最大值和该字符

 (看了两遍还是有点懵)

	//判断一个字符串中出现次数最多的字符,并统计其次数
	var obj = new Object(); //定义一个对象来存储字符串里的每个字符
	var str = 'qwqqwqa';
	console.log('11111' + obj[str.charAt(0)]);
	for (var i = 0; i < str.length; i++) {
	    //如果该字符作为属性不在对象中,那么属性值就赋为1。存在了就+1
	    var chars = str.charAt(i)
	    //这里如果用obj.chars会报错,因为用点的话只有属性值存在的时候才行
	    //  但是这里chars返回的是一个字符串,那你相当于写的是obj.'q'
	    // 我们的目的是添加一个属性,obj[chars]才对,相当于obj['q'];
	    if (obj[chars]) {
	        obj[chars]++;
	    } else {
	        obj[chars] = 1;
	    }
	}
	var maxStr = 0;
	var times = 0;
	for (var k in obj) {   //遍历对象,寻找最大属性值
	    if (obj[k] > times) {
	        times = obj[k];
	        maxStr = k;
	    }
	}
	console.log(maxStr);
	console.log(times);

(5)字符串操作方法(重点) 

 concat

var str = 'cgp';
console.log(str.concat('love','yhg'));   //cgploveyhg

str.substr(开始的位置, 截取几个字符),第二个参数如果省略,默认取到最后一个

var str = '君不见黄河之水天上来';
console.log(str.substr(3, 2));  //黄河

 (6)替换字符串以及转换为数组

replace方法替换字符串
replace(‘被替换的字符’,‘替换为的字符’);
注意,这种替换只能替换第一个,如果后面再出现,就替换不了

var str = 'yhg';
console.log(str.replace('y', 'a'));  //ahg

如果想替换全部,写个循环就ok

	var str = 'asdarsfzdgdsadqa';
	while (str.indexOf('a') !== -1) {
	    str = str.replace('a', '*');
	}
	console.log(str);

分割字符串split(‘分隔符’),字符转换为数组。类似前面的数组转字符串join

var str = 'pink&blue&aoao';
console.log(str.split('&')); //['pink', 'blue', 'aoao']
console.log(str.split('e')); //['pink&blu', '&aoao']
        //前面我们学过 join 把数组转换为字符串
        //2.字符转换为数组split('分隔符')
        var str2 = 'red, pink,blue';
        console.log(str2.split(','));
        var str3 = 'red&pink&blue';
        console.log(str3.split('&'));