JavaScript的内置对象

65 阅读6分钟

内置对象

什么是内置对象

  • JS中的对象分为三种:自定义对象、内置对象、浏览器对象
  • 前两种对象是JS基础内容,属于ECMAScript,第三个浏览器对象属于JS独有的
  • 内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或者是最基本而没必要的功能(属性和方法)
  • 内置对象最大的优点就是帮助我们快速开发
  • JS提供了多个内置对象:Math、Date、Array、String等

developer.mozilla.org/zh-CN/
咱就是说要学会查文档

Math对象

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

Math.PI              //圆周率
Math.floor()         //向下取整
Math.ceil()          //向上取整
Math.round()         //四舍五入,-3.5的结果是-3
Math.abs()           //绝对值
Math.max()           //最大值
Math.min()           //最小值
//圆周率
console.log(Math.PI);

//最大值
Console.log(Math.max(1,8,10));//10
Console.log(Math.max(1,9,'hello'));//NaN
Console.log(Math.max());//-Infinity 没有参数就负无穷大

//绝对值方法
Console.log(Math.abs(1));//1
Console.log(Math.abs(-1));//1
Console.log(Math.abs('-1'));//1 隐式转换 会把字符串型-1切换为数字型

//三个取整的方法
//1.Math.floor() 向下取整,往最小了取
Console.log(Math.floor(1.1));//1
Console.log(Math.floor(1.9));//1

//2.Math.ceil()向上取整 往最大了取
Console.log(Math.ceil(1.1));//2
Console.log(Math.ceil(1.9));//2

//3.Math.round()四舍五入 但是.5往大取
Console.log(Math.round(1.1));//1
Console.log(Math.round(1.5));//2
Console.log(Math,round(-1.1));//-1
Console.log(Math.round(-1.5));// 这个结果是-1
Console.log()

随机数方法Random()

  • Math对象随机数方法 random() 返回一个随机的小数 0<=x<1
  • 这个方法里不跟参数
console.log(Math.random());
//两个数之间的随机整数,并且包含这两个整数
function getRandom(min,max){
    return Math.floor(Math.random()*(max-min+1))+min;
}
console.log(getRandom(1,10));
//随机点名
var arr=['Mona','Lily','Cindy','Lucy'];
console.log(arr[getRandom(0,arr.length-1)]);
//猜数字
function getRandom(min,max){
    return Math.floor(Math.random()*(max-min+1))+min;
}

var random =getRandom(1,100);
while(true){
    var num = prompt('输入数字');
    if(num>random){
        alert('大了');
    }else if(num<random){
        alert('小了')
    }else{
        alert('猜对了');
        break;
    }
}
//猜数字 但只有10次机会
function getRandom(min,max){
    return Math.floor(Math.random()*(max-min+1))+min;
}

var random =getRandom(1,100);
for(var i=0;i<=10;i++){
    var num = prompt('输入数字');
    if(num>random){
        alert('大了');
    }else if(num<random){
        alert('小了')
    }else{
        alert('猜对了');
        break;
    }
    if(i==10){
        alert('机会已用完');
    }
}

日期对象

用来处理日期和时间

是一个构造函数,必须使用new来调用日期对象

使用new来创建对象
var arr = new Array();//创建一个数组对象
var obj = new Object();//创建一个对象实例

var date = new Date();//没有参数就返回系统的当前时间
console.log(date);


//参数常用的写法
var date1 = new Date(2022,8,31);
console.log(date1);//返回的月份是会比实际小一个月
var date2 = new Date('2022-8-31 10:00:00');
console.log(date2);

1. 格式化日期-年月日星期时分秒

方法名说明代码
getFullYear()获取当年dateObj.getFullYear()
getMonth()获取当月(0-11)dateObj.getMonth()
getDate()获取当天日期dateObj.getDate()
getDay()获取星期几(周日0到周六6)dateObj.getDay()
getHours()获取当前小时dateObj.getHours()
getMinutes()获取当前分钟date.getMinutes()
getSeconds()获取当前秒钟dateObj.getSeconds()
        //格式化日期 年月日
        var date = new Date();
        var year = date.getFullYear();
        var month = date.getMonth();
        var dates = date.getDate();
        // "Uncaught TypeError: date.getDay is not a function"  变量date改成dates
        var day = date.getDay();

        var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
        console.log('今天是' + year + '年' + month + '月' + dates + '日' + arr[day]);
        //格式化日期 时分秒
        function getTime(){
             var time=new Date();
             var h=time.getHours();
             h=h<10? '0'+h:h;
             var m=time.getMinutes();
             m=m<10? '0'+m:m;
             var s=time.getSeconds();
             s=s<0? '0'+s:s;
             return h+':'+m+':'+s;
        }
        console.log(getTime());

2. 获取日期的总的毫秒数

Date对象是基于1970年1月1日(世界标准时间)起的毫秒数
我们常利用总的毫秒数来计算时间,因为它更精确

//获得Date总的毫秒数(时间戳) 距离1970年1月1日过了多少毫秒数
// 通过valueOf()、getTime()
var date = new Date();
console.log(date.valueOf());
console.log(date.getTime());

//常用的写法
var date1 = +new Date();//+new Date()
console.log(date1);

//H5新增的方法
console.log(Date.now())

3. 倒计时案例

  • 用输入的时间减去现在的时间就是剩余的时间,即倒计时
  • 用时间戳来做,用户输入时间的总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数
  • 把算出的时间(毫秒)转化为天、时、分、秒
        function countDown(time){
            var nowTime=+new Date();
            var inputTime=+new Date(time);
            var times=(inputTime-nowTime)/1000; //times是剩余时间的秒数

            var d=parseInt(times/60/60/24);
            d=d<10? '0'+d: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+'分'+'秒';
        }

        console.log(countDown('2022-9-1 21:00:00'));

数组对象

//创建数组的两种方式
//利用数组字面量[]
var arr=[1,2,3];
console.log(arr[0]);

//利用 new Array()
//var arr=new Array();//创建一个空的数组
//var arr1=new Array(2);//表示这个数组的长度为2 里面有两个空的数组元素
var arr2=new Array(2,3);//等价于[2,3] 表示里面有两个数组元素,分别是2和3
console.log(arr2);

1. 检测是否为数组

  1. instanceof 运算符
var arr=[];
var obj={};
console.log(arr instanceof Array);//true
console.log(obj instanceof Array);//false
  1. Array.isArray(参数) H5新增的方法
var arr=[];
var obj={};
console.log(Array.isArray(arr));
console.log(Array.isArray(obj))

2. 添加删除数组元素的方法

方法名说明返回值
push(参数1...)数组末尾添加一个或者多个元素,注意修改原数组并返回新的长度
pop()删除数组的最后一个元素。把长度-1。该方法没有参数。注意修改原数组返回它删除的元素的值
unshift()给数组的开头添加一个或者多个元素,注意修改原数组返回新的长度
shift()删除数组的第一个元素。数组长度-1。无参数。注意修改原数组返回第一个元素的值
  1. push() 在数组末尾添加一个或多个元素
var arr = [1,2,3];
console.log(arr.push(4,'hello'));//5 数组的长度
console.log(arr);//[1, 2, 3, 4, 'hello']  原数组同时也会发生变化
  • 在数组末尾追加一个或多个新的元素
  • 参数直接写要追加的数组元素即可
  • push后返回的是新数组的长度
  • 原数组同时也会发生变化


2. unshift() 给数组的开头添加一个或多个元素

var arr = [1,2,3];
console.log(arr.unshift('red','study'));//5
console.log(arr);//['red', 'study', 1, 2, 3]
  • 在数组的开头追加一个或多个数组元素
  • 参数直接写要追加的元素
  • unshift后返回的是数组的长度
  • 原数组同时也会发生变化


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

var arr = [1,2,3];
console.log(arr.pop());
console.log(arr);
  • 删除数组的最后一个元素,一次只能删除一个
  • 没有参数
  • pop结束返回的结果是被删除的元素
  • 原数组也会发生变化


4. shift() 它可以删除数组的第一个元素

var arr = [1,2,3];
console.log(arr.shift());
console.log(arr);
  • 删除数组的第一个元素 一次只能删除一个
  • 没有参数
  • shift后返回的结果是被删除的元素
  • 原数组也会发生变化

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

        var arr = [1500, 1200, 2000, 2100, 1800];
        var newArr = [];
        for (var i = 0; i < arr.length; i++) {
            //方法1:
            // if (arr[i] < 2000) {
            //     newArr[newArr.length] = arr[i];
            // }:
            //方法2:
            // if (arr[i] >= 2000) {
            //     continue;
            // }
            // newArr[newArr.length] = arr[i];

            //使用push()
            if (arr[i] < 2000) {
                newArr.push(arr[i]);
            }
        }
        console.log(newArr)

3. 数组排序

  1. 翻转数组
var arr=[6,4,3,8];
arr.reverse();
console.log(arr);
  1. 数组排序
var arr=[6,4,3,8];
arr.sort();//对个位数排序没问题
console.log(arr);
var arr=[13,4,77,1,7];
arr.sort(function(a,b){
    return  a-b;//升序的排列顺序
    return  b-a;//降序的排列顺序
});
console.log(arr)    

4. 数组索引方法

方法名说明返回值
indexOf()数组中查找给定元素的第一个索引存在返回索引号,不存在返回-1
lastIndexOf()在数组中的最后一个索引存在返回索引号,不存在返回-1
var arr=['red','green','blue','blue'];
console.log(arr.indexOf('blue'));//2
console.log(arr.lastIndexOf('blue'));//3

5. 数组去重

遍历旧数组,用旧数组的元素在新数组中的元素中进行查询,如果元素在新元素中没有出现过,就把元素添加到新元素中,否则不添加。

要如何确定该元素有没有存在?
利用新数组.indexOf(数组元素) 如果返回值是-1 则说明新数组没有该数组元素

//封装一个 去重的函数
function unique(arr){
    var newArr=[];
    for(var i=0;i<arr.length;i++){
        if(newArr.indexOf(arr[i])===-1){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

var demo = unique(['blue','blue']);
console.log(demo);//['blue']

6. 数组转换为字符串

方法名说明返回值
toString()把数组转换成字符串,逗号分隔每一项返回一个字符串
join('分隔符')用于把数组中的所有元素转换成一个字符串返回一个字符串
//toString()
var arr = [1,2,3];
console.log(arr.toString());//1,2,3
//join()
console.log(arr.join());//1,2,3
console.log(arr.join('-'));//1-2-3
方法名说明返回值
concat()链接两个或多个数组,不影响原数组返回一个新的数组
slice()数组截取 slice(begin,end)返回被截取项目的新数组 [begin,end)
splice()数组删除splice(第几个开始,要删除个数)返回被删除项目的新数组,这个会影响原数组
  1. concat() 连接两个或多个数组
//连接两个数组
var array1 = ['a', 'b', 'c'];
var array2 = ['d', 'e', 'f'];
var array3 = array1.concat(array2);

console.log(array3);
// expected output: Array ["a", "b", "c", "d", "e", "f"]

//连接三个数组
var num1 = [1, 2, 3],
    num2 = [4, 5, 6],
    num3 = [7, 8, 9];

var nums = num1.concat(num2, num3);

console.log(nums);
// results in [1, 2, 3, 4, 5, 6, 7, 8, 9]
  1. slice() 数组截取 [begin,end)
var animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]

console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]

console.log(animals.slice(-2));
// expected output: Array ["duck", "elephant"]

console.log(animals.slice(2, -1));
// expected output: Array ["camel", "duck"]

console.log(animals.slice());
// expected output: Array ["ant", "bison", "camel", "duck", "elephant"]
  1. splice() 通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。(重点看看!!)
var months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]

字符串对象

1. 基本包装类型

为了方便操作基本数据类型,JS还提供了三个特殊的引用类型:String、Number和Boolean
基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法

var str = 'andy';
console.log(str.length);

按理说,基本数据类型是没有属性和方法的,而对象才有。上面的代码可以执行是因为JS会把基本数据类型包装为复杂数据类型,执行过程如下:

//生成临时变量,把简单数据类型包装成复杂数据类型
var temp = new String('andy');
//赋值给我们声明的字符变量
str=temp;
//销毁临时变量
temp=null;

2. 字符串不变

指得是里面的值不可变,虽然看上去可以改变内容,但其实地址变了,内存中新开辟了一个内存空间。

var str = 'abc';
str = 'hello';
//当重新给str赋值的时候,常量'abc'不会被修改,仍然在内存中

//重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变

//由于字符串的不可变,在大量拼接字符串的时候会有效率问题

var str='';
for(var i =0;i<10000000;i++){
    str+=i;
}
console.log(str);//这个结果需要花费大量时间来显示,因为需要不断的开辟新的空间

3.根据字符返回位置

字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串

方法名说明
indexOf('要查找的字符',开始的位置)返回指定内容在原字符串中的位置,如果找不到就返回-1 ,开始额位置是index索引号
lastIndexOf()从后往前找,只找第一个匹配的
var str = '好好学习,天天向上';
console.log(str.indexOf('习'));
console.log(str.indexOf('习',4));//从索引号是 4 的位置开始找

//找出str所有‘天’出现的位置和次数
var index=str.indexOf('天');
var num=0;
while(index !==-1){
    //找不到才返回-1
    console.log(index);
    num++;
    index = str.indexOf('天',index+1);
    }
console.log('天'+'出现'+num+'次');

根据位置返回字符

方法名说明使用
charAt(index)返回指定位置的字符(index字符串的索引号)str.charAt(0)
charCodeAt(index)获取指定位子字符的ASCII码(index索引号)str.charCodeAt(0)
str[index]获取指定位置字符串HTML5新增,和charAt()等效
        var str = 'andy';

        //charAt(index)根据位置返回字符
        console.log(str.charAt(3));//

        //遍历所有的字符
        for (var i = 0; i < str.length; i++) {
            console.log(str.charAt(i));
        }

        //charCodeAt(index) 返回对应索引号的字符的ASCII码 目的:判断用户按下了哪个键
        console.log(str.charCodeAt(0));//97

        //str[index] H5新增
        console.log(str[3]);

统计出现最多的字符和次数

一个对象如何判断是否有该属性

var o={
    age:18;
}

if(o[age]){
    console.log('里面有该属性');
}elae{
    console.log('没有该属性');
}


判断一个字符串中出现次数最多的字符,并统计其次数

        //利用charAt() 遍历这个字符串
        //把每个字符都存储给对象,对象没有该属性就为1,存在了就为-1
        var str = 'abccddfff';
        var o = {};
        for (var i = 0; i < str.length; i++) {
            var chars = str.charAt(i);//chars 是字符串的每一个字符
            if (o[chars]) {//o[chars]得到的是属性值
                // console.log(o[chars]);
                o[chars]++;
            } else {
                o[chars] = 1;
            }
        }
        console.log(o)
        //遍历对象
        var max=0;
        var ch='';
        for(var k in o){
            if (o[k]>max){
                max=o[k];
                ch=k;
            }
        }
        console.log('最多的字符是'+ch);
         console.log('出现'+max+'次');

字符串操作方法(重点)

方法名说明
concat(str1,str2,str3...)用于连接两个或多个字符串。拼接字符串,等效于+,+更常用
substr(start,length)从start位置开始(索引号),length取的值的个数
slice(start,end)从start位置开始,截取到end位置(start和end的值都是索引号) 取值范围[start,end)
substring(start,end)从start位置开始,截取到end位置(start和end的值都是索引号) 取值范围[start,end),但是不接受负值
//concat('字符串1','字符串2',...)
var str='andy';
console.log(str.concat('red'));//andyred

//substr('截取的起始位置','截取几个字符')
var str1='好好学习';
console.log(str1.substr(2,2));//学习
//替换字符replace('被替换的字符','替换为的字符') 只会替换第一个字符
var str='andyandy';
console.log(str.replace('a','c'));//cndyandy

//要求把所有a字符替换
while(str.indexOf('a')!==-1){
    str=str.replace('a','&');
}
console.log(str);//&ndy&ndy

//字符串转换为数组 split('分隔符') 或者join可以把数组转换为字符串
var str1='red,green,blue';
console.log(str1.split(','));//['red', 'green', 'blue']

var str2='red&green&blue';
console.log(str2.split('&'));//['red', 'green', 'blue']