js学习第八篇:javaScript内置对象

文章详细介绍了JavaScript中的内置对象,包括Math对象的常用数学函数如PI、max、abs、floor等,Date对象的创建、格式化和获取时间戳的方法,以及数组的操作如push、unshift、pop、shift等,还涉及到字符串对象的不可变性和相关方法如indexOf、charAt。
摘要由CSDN通过智能技术生成

二十、JavaScript内置对象

1.内置对象的分类

JavaScript中的对象分3种:自定义对象、内置对象、浏览器对象

  • 前两个对象属于ECMAScript,是JS基础内容;
  • 最后的浏览器对象是JS独有的,在JavaAPI中详解
2.什么是内置对象

内置对象 是指JS语言自带的一些对象,供开发者使用,主要包括一些最基本常用的功能(属性和方法)

  • 优点:帮助我们快速开发
  • 常见内置对象:Math、Date、Array、String等
3.怎么查文档-了解内置对象的使用方法

【文档网站】:MDN、W3C

【MDN*】:提供有关开发网络技术(Open Web)的信息,包括HTML、CSS和万维网及HTML5应用的API

【网站地址】:https://developer.mozilla.org/zh-CN/

(1)先在网站中查阅该方法的功能

(2)查看其中的参数的意义和类型

  • 注意参数带[]表示可有可无

(3)查看返回值的意义和类型

(4)写一个demo进行测试

4.Math对象*

是一个内置对象,具有数学常数和函数的属性和方法,并非函数对象。

  • Math不是一个构造器,即静态方法**(不需要new直接用)**
(1)Math.PI

圆周率,是一个圆的周长和直径之比≈3.14159

console.log(Math.PI);
(2)Math.max(参数)

求一组数的最大值,传入要比较的一组数即可(正负都可)

  • 传入的数值必须是可以转换成数值的,否则->NaN
  • 传入的数值为空,返回-infinity
(3)Math.abs(参数)

传入参数计算绝对值,同时参数必须为可转为数值型

  • 传入数值必须为可转化成数值的,否则->NaN
  • 传入数值为空,返回NaN
(4)Math.floor(数值)

向下取整

console.log(Math.floor(1.1));//1
console.log(Math.floor(1.9));//1
console.log(Math.floor(-1.1))//-2
(5)Math.ceil(数值)

向上取整

(6)Math.roud( 数值)

四舍五入

(7)常用Math函数

1677827707395

5.Math.random()

随机数方法

(1)作用

返回一个浮点数,默认范围在[0,1)

(2)参数

不需要传入参数

(3)如何改变得到的数值范围
  • 公式如下:
Math.random()*(max-min)+min;
  • 如:

得到2~10之间的浮点数 Math.random()*8+2;

(4)取得范围内的整数
Math.random()*(max-min)+min;
  • 范围 :左闭右开 [ )
function getRandomInt(min,max){
     min = Math.ceil(min)//将传入的min向下取整
     max = Math.floor(max)//将传入的max向上取整
     return Math.floor(Math.random()*(max-min)+min);
   }
(5)随机输出数组元素

①首先定义数组并赋值

②定一个生成随机范围内整数的函数

  • 注意范围:左闭右开

③随机生成下标值 :Math.random()*(max-min)+min;

  • 此公式生成的下标刚好为:左闭右开----数组不越界

④输出arr[随机下标]即可。

var arr = ['腻腻','吸吸','呵呵','哈哈'];
function getRandomInt(min,max){
 min = Math.ceil(min);
 max = Math.floor(max);
 return Math.floor(Math.random()*(max-min)+min);
}
alert(arr[getRandomInt(0,arr.length)]);
6.封装自身的Math对象

1677827617145

1677827652154

7.常用Math方法

1677827689846

8.Date()日期对象*

是一个构造函数,必须使用new来创建

(1)使用方法

1️⃣使用Date()必须要new

var date = new Date();
(2)参数常用写法
  • 无参数:根据当前时间,创建一个Date对象
  • 数字型:年,月,日 如:2019,10,01
  • 字符串: '年-月-日 时 : 分 : 秒' 如:‘2019-10-1 8: 8 : 8'

【字符串最为常用,因为数字型会出现+1月的问题,需要设置配置文件】

var date1 = new Date(2019,10,1);
var date2 = new Date('2020-10-1 10:10:10');
(3)日期格式化

如果想要某种固定格式,可以获取指定部分手动得到:

  • 注意月份要+1哦,否则会小1月

1677843871493

1677844454775

  • 示例----时间倒计时
    <script>//年月日 格式:00:00:00
   var date = new Date();
  function getTime1(){
       
        var year = date.getFullYear();
        var month = date.getMonth()+1;
        var dates = date.getDate();
        var day = date.getDay();
        var days = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
        return year + '年' + month + '月' + dates + '日'+days[day];

    }
    function getTime2(){
        //时
        var hour = date.getHours();
        hour = hour > 10? hour : '0'+hour;
        //分
         var minute = date.getMinutes();
         minute = minute >10 ? minute : '0' + minute;
        //秒
        var second = date.getSeconds();
        second = second > 10 ? second : '0' + second;
        return hour + ':' + minute + ':' + second;
    }
    alert(getTime1());
    alert(getTime2());

    </script>
(4)获取Date总毫秒数(时间戳)

-距1970年1月1日到现在,常用于需要永不重复数的情况

1️⃣date.valueOf(参数)方法

 var date = new Date();
 console.log(date.valueOf());
 

2️⃣date.getTime(参数)方法

var date = new Date();
console.log(date.getTime());

即可得到现在时间距离1970年1月1号总的毫秒数

3️⃣直接用+号*

var date = +new Date(参数);
console.log(date);

4️⃣H5新增的Date.now(),获得总毫秒数

  • 浏览器版本过低可能不识别
console.log(Date.now());

以上四个方法:

①未传入参数,则返回当前时间总的毫秒数

②传入参数,则返回传入时间的总毫秒数

(5)倒计时案例

用输入的时间(活动开始时间)-当前时间 = 剩余时间

但因为时分秒不能进行减法操作,容易成负数

  • 所以应用时间戳,思路如下:

1️⃣用将来的时间戳-现在的时间戳 = 剩余毫秒数

2️⃣再将剩余毫秒数的时间戳--->除以1000换算成秒-->时分秒

1677896682893

        function countDown(time){
            //1.获取当前的时间的毫秒数
            var nowTime = +new Date();
            //2.获取设置的福利时间的毫秒数
            var inputTime = +new Date(time);
            //3.得到剩余时间的秒数
            var times = (inputTime - nowTime)/1000;
            //4.利用公式+parseInt得到整型的天、时、分、秒
            //   利用三目表达式-->考虑输出 00的形式
            var days = parseInt(times/60/60/24);
            var hour = parseInt(times/60/60%24);
            hour = hour>10?hour:'0'+hour;
            var minute = parseInt(times/60%60);
            minute = minute > 10 ? minute : '0'+hour;
            var second = parseInt(times%60);
            second = second > 10? second : '0' + second;
            //5.返回最终结果
            return days +'天' + hour + '时' + minute + '分'+ second +'秒';
        }
        //调用
        console.log(countDown('2023-3-5 18:00:00'));
9.数组对象*

【回顾:】

  • 创建数组对象的两种方式:
    • ①字面量方式
    • ②new Array(参数)
      • 参数为空,仅表示创建数组
      • 参数为单个数,仅表示创建有多少个元素的数组
      • 参数为逗号分隔的一组数,表示其中元素值各为什么的数组
(1)检测是否为数组
①instanceof运算符

js中instanceof可以用于检测值是否为数组类型,返回值为布尔型

  • Array是数组关键字,相当于判断 变量 是否为 数组这个类的实例
变量名 instanceof Array
  • 在java中instanceof是用于查看对象是否为一个类的实例【本质一样】

1677903394116

②Array.isArray(参数)
  • H5新增的方法,ie9以上版本可用
Array.isArray( 要判断的变量名 )
(2)添加元素

1677908298480

①数组名.push() --末尾添加
  • 在数组末尾添加一个或多个数组元素

1️⃣带参数

  • 可多个,逗号分隔
数组名.push(参数);//向数组后追加参数中的数组元素

2️⃣注意:

  • 数组名.push( ) 返回值的是新数组长度
  • push( ) 中的参数直接写即可
  • push( ) 后原数组也会变化
②数组名.unshift--开头添加
  • 在数组开头添加一个或多个数组元素

1️⃣带参数

  • 可多个
数组名.unshift(参数);//在数组前添加参数中的数组元素

2️⃣注意:

  • 数组名.push( ) 返回值的是新数组长度
  • push( ) 中的参数直接写即可
  • push( ) 后原数组也会变化
(3)删除元素
①pop() 删除末尾元素

删除末尾最后一个元素,一次删一个

1️⃣不带参数

  • 一次只能删一个
数组名.pop();//注意没有参数+返回值是被删除的元素

2️⃣返回值

数组名.pop()返回值是被删除的元素

3️⃣注意:

  • 数组名.pop()一次只删除一个元素
  • 数组名.pop()返回值是被删除的元素
  • 数组名.pop()不用传参数
②shift() 删除开头元素

删除开头的第一个元素

1️⃣不带参数

数组名.shift();//删除开头第一个元素+返回被删除的值

2️⃣返回值

数组名.shift () 完毕后,返回被删除的元素

3️⃣注意:

  • 数组名.shift()一次只删除一个元素
  • 数组名.shift()返回值是被删除的元素
  • 数组名.shift()不用传参数
③ 添加和删除的区别

push( 参数 )添加元素到最后

unshift( 参数 )添加元素到开头

-------数组名.push( )/数组名 . unshift( ) 返回值是数组的长度


pop( )删除最后元素

shift( )删除开头元素

--------数组名.pop( ) / 数组名.shift( ) 返回值是被删除的元素

(4)翻转数组

reserve()可用于翻转一个数组,

1️⃣不带参数

数组名.reserve();//即可翻转该函数

2️⃣示例

var arr = ['pink,'red,'blue'];
arr.reverse();
(5)冒泡排序

sort()可用于给数组排序

1️⃣不带参数

  • 无法对两位数进行排序
数组名.sort();//即可将该数组排序,默认为升序

2️⃣示例

var arr = [1,4,1,8,5,4,4];
arr.sort();//个位数好用,两位数✖

3️⃣升序排序固定写法

  • 为解决两位数排序问题,常用写法为 a-b
var arr1 = [13,4,77,1,7];
arr1.sort(function(a,b){
    return a- b;
});
console.log(arr1);

4️⃣降序排序固定写法

  • 为解决两位数排序, b-a
var arr1 = [13,4,77,1,7];
arr1.sort(function(a,b){
    return b - a;
});
console.log(arr1);
(6)获取元素索引
  • 可通过索引方法,将数组中元素所对应的下标返回得到。

1677920355716

①indexOf( )

数组名.indexOf( 元素 )从前向后开始查找第一个满足条件的元素,返回其下标。

  • 有 -> 返回下标值
  • 没有->返回-1

1️⃣带参数

数组名.indexOf(元素,[起始的位置]);

2️⃣示例

var arr = ['red','green','blue','pink','blue'];
console.log(arr.indexOf('blue));//2
                        //可得到blue元素的下标值

3️⃣有重复元素时

数组名.indexOf(元素),仅返回第一个满足条件的索引号

即:有两个重复的blue元素,返回第一个blue元素的下标

4️⃣没有要查找的元素时

返回-1

②lastIndexOf()

数组名.lastIndexOf( 元素 )用于从后向前查找第一个满足条件的元素,返回其下标。

  • 有->返回下标值
  • 没有->返回-1

1️⃣有参数->返回下标值->没有返回-1

var arr = ['red','green','blue','pink','blue'];
console.log(arr.indexOf('blue));//4
                        //可得到blue元素的下标值
(7)数组去重

利用数组名.indexOf(元素),判断新数组元素在旧数组中是否存在,不存在就数组名.push(元素)追加进新数组

(8)数组转换为字符串

1677924253124

①toString()

toString( )将我们的数组转换为字符串,分隔符为逗号

1️⃣toString() 无参数

数组名.toString();

2️⃣返回值

返回值为转为成的字符串,是以逗号分隔

②join(分隔符)

数组名.join(分隔符)将数组转化为字符串,分隔符自行定义

1️⃣join() 可有参可无参

数组名.join(分隔符);

1677924103123

2️⃣返回值

返回值为转化成的字符串,分隔符为自行定制的

(9)其他数组方法

1677925468815

①连接两个数组-concat( )

连接两个或三个数组,不影响原数组

1️⃣有参数

数组1.concat(数组2)//在数组1后拼接数组2

2️⃣返回值

返回一个拼接后的新的数组

3️⃣不影响原数组

②数组截取-slice( )

1️⃣参数可有可无

slice( begin,end )

  • start 表示数组开始处下标,没有默认为0

  • begin表示数组结束处下标,没有默认到最后

  • 设置了begin的值后【不包括begin】
    负值表示从后往前
数组名.slice()//从后到尾
数组名.slice(start)//从start 到尾
数组名.slice(start, end)//从start到end

2️⃣返回值

返回值为被截取的新数组

3️⃣不影响原数组

4️⃣示例:

const 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"]
③修改删除数组元素-splice( )

1️⃣有参数

splice( 第几个开始修改,要删除的个数 ,插入的元素)

  • start 数组下标,从哪个位置开始

    • 这个位置指的是,添加元素的位置/删除元素的位置
    • ∴-1 arr3.splice(-2,0,'djj')//这个djj看起来加在倒数第二

    • 为负数时,从后向前;超出表示第一个
  • deleteCount 删除的元素个数

  • item 要添加进数组的元素

数组名.splice(start)
数组名.splice(start, deleteCount)
数组名.splice(start, deleteCount, item1)
数组名.splice(start, deleteCount, item1, item2, itemN)

2️⃣返回值

返回值为被删除的元组组成的新数组

  • 没有删除,返回空数组 []

3️⃣影响原数组

4️⃣示例:

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// Inserts at index 1
console.log(months);
// Array ["Jan", "Feb", "March", "April", "June"]

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


months.splice(-1,0,'hhhhhh');
//这个hhh会放在原先数组最后一个的位置,但因为没有删除最后一个,所以原先最后一个的'May'会被顶到最后一个
console.log(months);
 Array ["Jan", "Feb", "March", "April","hhhhhh", "May"]
10.字符串对象
(1)字符串的不可变性

不可变指的是里面的值不可变,虽然看上去可以改变内容,但其实只是开辟了新的空间,让str指向了另一个空间,原先空间的值没变

[❗:字符串的所有操作都是开辟一个新空间,再去指向]

  • 由此要尽量少对字符串进行重新赋值和拼接!!!!

1677934445253

(2)返回字符所在位置

1677934718991

①indexOf()

字符串变量.indexOf(str,begin)。返回字符串中指定字符所在位置

1️⃣有参数

  • str 表示要查找的字符

  • begin 表示从哪个位置开始(从0开始)

    也可以没有,默认从开头开始

字符串变量.indexOf(str,begin);//返回查找元素所在位置下标

2️⃣返回值

  • 找到,返回值为字符所在的位置(从0开始哦),同时都返回第一个找到的
  • 没找到,返回-1
②lastIndexOf( )

字符串变量名.lastIndexOf( )同上,不过是从后向前查找

③计算某字符出现的位置+次数

1677936020895

    var str = 'asdahjgsdajhsgdjaa';
        //1.首先确定字符串中是否有该字符
        var index = str.indexOf('a');
        //2.定义count变量用于计数
        var count = 0;
        //①如果index不为-1,表示有该字符,进行循环
        while(index != -1){
            count++;
            console.log(index,count);
            //②继续寻找该字符,但开始位置从上一个找到该字符的位置+1开始
            index = str.indexOf('a',index+1);
            
        } 
(3)根据位置返回字符

1677937264770

①charAt(index)

字符串变量名.charAt(index) 可以根据位置返回对应的字符

1️⃣有参数

  • index 表示下标,从0开始
字符串变量名.charAt(index);//返回该字符串下标的值

2️⃣返回值

下标对应的值

3️⃣应用场景-----遍历所有字符串

利用循环+str.length+charAt(index),让循环变量作为index即可循环打印字符串的所有元素。

②charCodeAt(index)

字符串变量名.charCodeAt(index) 获取指定位置处字符的ASCⅡ码

1️⃣有参数

  • index 为想获取ASCⅡ码的字符值下标
字符串变量名.charCodeAt(index);//返回值为ASCⅡ码哦

2️⃣返回值

为指定位置字符的ASCⅡ码

3️⃣应用场景-----判断用户输入的键

③str[index]

H5新增的,ie+8以上支持

数组变量名[index],即可获取下标所对应的元素

1️⃣有参数

  • index 为要查找字符值的下标
数组变量名[index];
var str = 'asadfasd';
console.log(str[1]);//返回值为下标所对的值

2️⃣返回值

为字符串中该下标对应的值

④统计出现最多的字符+次数
  • 1.创建一个对象

  • 2.遍历字符串的值

  • 3.判断对象中是否有该属性

    ---注意因为是字符串,只能用对象名[属性]的方式

    • 之前有,属性值+1

    • 之前无,属性值=1

    • 【对象名[属性名]的过程就完成了追加】

  • 4.遍历结果对象--找最大的

    • 因为对象属性=字符 ,属性值=出现次数
    • 利用maxChar和max求出现最多字符+次数
    • 利用for(k in 对象名){
    • ​ //k是属性名,对象名[k]才是值
         var str = 'aaaaasdhssssssssssjg';
        //1.创建对象
        var o = {};
        //2.遍历字符串的每个元素
        for(var i = 0;i < str.length; i++){
            var tempt = str.charAt(i);
            // 3.查看对象中有没有该属性
            //因为此时的tempt是字符串,有' ',所以应该用对象名['属性']的形式
            if(o[tempt]){
                //有该属性,属性值+1
                o[tempt]++; 
            }else{
                //无该属性,属性值=1
                o[tempt] = 1;
            }
        }
         //打印输出o对象,就可以看到
        //其中的属性(字符)+属性值(出现次数)
        console.log(o);
   //3.遍历结果对象,
        //找到出现次数最多的字符=属性值最大的属性,输出结果
        var maxChar = '';
        var max = 0;
        for(k in o){
            if(o[k] > max){
                max = o[k];
                maxChar = k;
            }
        }
        console.log('出现次数最多的字符是'+maxChar+'出现了'+max+'次');
  • 运行结果:

1677941893007

(4)拼接+截取字符串

1677942012372

①concat(str1,str2...)

用于将多个字符串拼接在一起,等价于+

②substr(start,length)

从start位置开始,截取length个长度字符

1️⃣有参数

  • start 表示开始的下标值 (从0开始)
  • length表示截取几个字符
字符串变量.sustr(start,length);//返回值为截取的字符串

2️⃣返回值

为截取的字符串

3️⃣示例

var str = '改革春风吹丰满';
console.log(str1.substr(2,2));//输出:春风
③slice(start,end)

从start位置开始,截取到end位置,end值取不到,可取负值

④substring(start,end)

从start位置开始,截取到end位置,end取不到,同上,但是不接受负值。

(5)替换字符串
①replace( 被替换的字符,替换为的字符 )

1️⃣有参数

  • 前一个为被替换,后一个为替换
  • 只替换第一个字符
字符串变量名.replace(被替换,替换为);//返回值为替换后的数组

2️⃣返回值

替换后的数组

3️⃣示例

var str = 'andaaay';
console.log(str.replace('a','b'))//只把第一个a替换成b
//输出:bndaaay

4️⃣替换字符串中重复的值

利用循环+replace(被替换,替换),因其一次只能替换一次

  • 循环结束条件: 数组变量.indexOf(字符) = -1表示没有该字符
    • 有,继续替换
    • 没有,退出循环
   //将字符串'abcoeffoooosasd'中的o替换为*
        var str = 'abcoeffoooosasd';
        //1.判断字符串是否有该字符
        while(str.indexOf(['o']) != -1){
            //2.循环替换
            str = str.replace('o','*');
        }
  • 输出结果:

1677943727468

(6)字符串转化为数组
①split(分隔符)
join(分隔符)是把数组转化为字符串

1️⃣有参数

  • 设置以xxx为分隔符进行分割,默认??????
  • 分割的字符串一定要有符号分开,否则看做一起的
字符串变量名.split(分隔符);//返回值为转化后的数组

2️⃣返回值

转化后的数组

3️⃣示例

var str1 = 'red,blue,color';
console.log(str1.split(','));//以,分开这些字符
//输出 ['red','blue','color']

var str2 = 'red&blue&color';
console.log(str2.split('&'));//以&分开这些字符
(7)转换大小写
①toUpperCase( )

将调用该方法的字符串转为大写形式并返回(如果调用该方法的值不是字符串类型会被强制转换)。

1️⃣无参数

字符串变量名.toUpperCase();//返回值为大写形式

2️⃣返回值

  • 不会影响原字符串

返回一个新数组,转换的字符串大写形式

3️⃣示例

const sentence = 'The quick brown fox jumps over the lazy dog.';

console.log(sentence.toUpperCase());
// Expected output: "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG."
②toLowerCase( )

会将调用该方法的字符串值转为小写形式,并返回。

1️⃣无参数

字符串变量名.toLowerCase();//返回小写的字符串

2️⃣返回值

  • 不影响原先的字符串

会将调用该方法的字符串值转为小写形式。

3️⃣示例

console.log('中文简体 zh-CN || zh-Hans'.toLowerCase());
// 中文简体 zh-cn || zh-hans

console.log( "ALPHABET".toLowerCase() );
// "alphabet"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邓六日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值