javascript学习笔记——JS内置对象,JavaScript中的数据类型

一、JavaScript内置对象

  1. JavaScript中的对象分为三种:自定义对象,内置对象,浏览器对象

    • 自定义对象和内置对象是JS 基础内容,属于ECMAScript;第三种浏览器对象属于JS独有的 (JS API)
    • 内置对象:JS自带的一些对象,这些对象供开发者使用,并提供一些常用的或是最基本而非常用的功能(属性和方法)。
    • 内置对象的最大优点就是帮助我们快速开发
    • JS中提供的内置对象:Math、Date、Array、String等
  2. Math数学对象

    • 不是一个构造函数,所以不需要 new 来调用,而是直接使用里面的属性和方法
    • 常用的方法和属性
      1
      2
      3
      4
      5
      6
      Math.PI   //圆周率
      Math.floor(); //向下取整
      Math.ceil(); //向上取整
      Math.round(); //四舍五入 特殊情况Math.round(1.5)结果为2 Math.round(-1.5)结果为-1
      Math.abs(); //取绝对值
      Math.Max(); //Math.main()
    • 随机数方法random()
      • random()返回一个随机小数 0<=x<1 ,方法中不加参数
      • 得到两个数之间的随机整数(不包含最大值)
        1
        2
        3
        4
        5
        function getRandomInt(min,max){
        min=Math.ceil(min);
        max=Math.floor(max);
        return Math.floor(Math.random()*(max-min))+min;
        }
      • 得到两个数之间的随机数(包含这连个数)
        1
        2
        3
        4
        5
        function getRandomIntInclusive(min,max){
        min=Math.ceil(min);
        max=Math.floor(max);
        return Math.floor(Math.random()*(max-min+1))+min;
        }
  3. 日期对象

    • 是一个构造函数,必须使用 new 来调用创建日期对象
    • 如果没有参数则返回系统的当前时间:
      1
      2
      var date=new Date();
      console.log(date);
    • 参数的写法
      • 数字型:2022,02,22 (逗号进行分割)
        1
        2
        var date1=new Date(2022,2,22);
        console.log(date1); //输出月份会比实际月大一
      • 字符串型: ‘2022-02-22 12:22:12’
    • 日期格式
      方法名 说明 代码
      getFullYear() 获取当年 dObj.getFullYear()
      getMonth() 获取当月(0-11) dObj.getMonth()
      getDate() 获取当天日期 dObj.getDate()
      getDay() 获取星期几(周日0 到周六6) dObj.getDay()
      getHours() 获取当前小时 dObj.getHours()
      getMinutes() 获取当前分钟 dObj.getMinutes()
      getSeconds() 获取当前秒 dObj.getSexonds()
    • 时间格式化
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
              function time(){
      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<10? '0'+s:s;
      console.log(h+':'+m+':'+s);
      }
      time();
    • 获取日期的总的毫秒形式
      • Date()对象基于1970年1月1日起的毫秒,我们经常用总的毫秒数来计算时间,因为其更精确
      • 通过valurOf() 或者 getTime() 获得时间戳
        1
        2
        3
        4
        5
        6
        7
        var date=new Date();
        console.log(date.valueOf()); //输出时间戳
        console.log(date.getTime()); //输出时间戳
        var date1= +new Date();
        console.log(date1); //输出时间戳
        // H5新增的
        console.log(Date.now());
      • 倒计时案例(用户输入时间转换为时间戳,再用时间戳和当前时间戳相减,再将毫秒转换为时间)
        • d=parseInt(总秒数/60/60/24); //时间戳转换为天
        • h=parseInt(总秒数/60/60%24); //时间戳转换为时
        • m=parseInt(总秒数/60%60);
        • s=parseInt(总秒数%60);
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
                      function countDown(time){
          var nowTime=+new Date();
          var inputTime=+new Date(time);
          var t=0;
          if(inputTime>nowTime)
          {
          t=(inputTime-nowTime)/1000; //将毫秒转换为秒
          }
          else{
          console.log("时间小于当前时间!")
          }
          var d=parseInt(t/60/60/24);
          d=d<10? '0'+d:d;
          var h=parseInt(t/60/60%24);
          h=h<10? '0'+h:h;
          var m=parseInt(t/60%60);
          m=m<10? '0'+m:m;
          var s=parseInt(t%60);
          s=s<10? '0'+ s : s;
          console.log(d+'天'+h+'时'+m+'分'+s+'秒');
          }
          var inputTime1=prompt("请输入结束时间");
          countDown(inputTime1);
  4. 数组对象

    • 创建定长的数组 var arr=new Array(10) 数组长度为10
    • 创建有初始值的数组 var arr=new Array(2,3,4) 代表创建[2,3,4]数组
    • 检测是否为数组
      • instanceof 运算符
        1
        2
        3
        4
        var arr=[];
        console.log(arr instanceof Array); //输出true
        var obj={};
        console.log(obj instanceof Array); //输出false
      • Array.isArray(检测参数); H5新增方法,IE9以上版本支持
        1
        2
        3
        4
        var arr=[];
        console.log(Array.isArray(arr)); //输出true
        var obj={};
        console.log(Array.isArray(obj)); //输出false
    • 添加和删除数组元素的方法
      方法名 说明 返回值
      push(参数1,参数2…) 末尾添加一个或多个元素,注意修改原数组 返回新的长度
      pop() 删除数组最后一个元素,把数组的长度减一,无参数,修改原数组 返回它删除元素的值
      unshif(参数1…) 向数组的开头添加一个或多个元素,注意修改原数组 返回新的长度
      shift() 删除数组第一个元素,把数组的长度减一,无参数,修改原数组 返回第一个元素的值
    • 数组排序
      • reverse() 颠倒数组中的元素的顺序,无参数。会改变原来的数组,返回新数组
        1
        2
        3
        var arr=[10,20,30,40,22];
        arr.reverse(); //进行翻转
        console.log(arr); //输出[22,40,30,20,10]
      • sort() 对数组中的元素进行排序。会改变原来的数组,返回新数组***
        1
        2
        3
        4
        5
        6
        7
        8
        9
                   var arr=[7,1,4,17,3];
        arr.sort(); //进行排序
        console.log(arr); //输出[1,17,3,4,7]

        arr.sort(function(a,b){
        return a-b;
        // return b-a; //会以降序排列
        })
        console.log(arr); //输出[ 1, 3, 4, 7, 17]
    • 数组索引方法
      方法名 说明 返回值
      indexOf() 数组中查找给定元素的第一个索引 如果存在返回索引号,如果不存在则返回 -1
      lastIndexOf() 在数组中的最后一个的索引 如果存在返回索引号,如果不存在则返回 -1
      • 返回案例
        1
        2
        3
        var arr=['red','green','blue','yellow','blue','pink'];
        console.log(arr.indexOf('blue')); //输出值为2
        console.log(arr.lastIndexOf('blue')); // 输出值为4
      • 数组去重,用旧数组中的元素取遍历新数组,若有则不在存了
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
                 var arr=['q','w','e','z','r','s','a','s','d','f','q','z'];
        var newarr=[];
        for(var i=0;i<arr.length;i++)
        {
        if(newarr.indexOf(arr[i])==-1)
        {
        newarr.push(arr[i]);
        }
        }
        console.log("去重后的数组为"+newarr);
    • 数组转换为字符串
      • toString():把数组转换成字符串,逗号分隔每一项。返回一个字符串
      • join(‘分隔符’):方法用于把数组中的所有元素转换为一个字符串。返回一个字符串
    • 数组中某几个元素操作
      方法名 说明 返回值
      concat() 连接两个或多个数组,不影响原数组 返回一个新数组
      slice() 数组截取 slice(begin,end) 返回被截取项目的新数组
      splice() 数组删除 splice(第几个开始,删除个数) 返回被删除项目的新数组 注:这个会影响原数组
    • 基本包装类型:就是把简单数据类型包装为复杂数据类型,基本过程如下:
      • 把简单数据类型包装为复杂数据类型var temp=new String('abcd');
      • 把临时变量的值给str str=temp;
      • 销毁这个临时变量 temp=null;
  5. 字符串对象

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

    • 根据字符返回位置

      • 字符串所有的方法都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串。
        方法名 说明
        indexOf(‘要查找的字符串’,开始的位置) 返回指定内容在元素字符串中的位置,找不到就返回-1,开始的位置是index索引号
        lastIndexOf() 以后往前找,只找第一个匹配的
    • 根据位置返回字符(重点)***

      方法名 说明 使用
      charAt(index) 返沪指定位置的字符(index字符串的索引号) str.cahrAt(3)
      cahrCodeAt(index) 获取指定位置处字符串的ASClLL码(index索引号) str.charCodeAt(3)
      str[index] 获取指定位置处的字符 H5,IE8+支持 和charAt()等效
      • 使用这个方法可以统计字符串中出现最多的字母以及出现的次数
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
                   var str="qqwdaffasieotgnsayqpdgbgyawew";
        var obj={}
        for(var i=0;i<str.length;i++)
        {
        var ss=str.charAt(i);
        if(obj[ss])
        {
        obj[ss]++;
        }
        else{
        obj[ss]=1;
        }
        }
        var max=0,res;
        for(var k in obj)
        {
        if(obj[k]>max)
        {
        max=obj[k];
        res=k;
        }
        }
        console.log("出现次数最多的字母为:"+res+" 出现次数为:"+max);
    • 字符串的操作方法(重点)***

      方法名 说明
      concat(str1,str2,str3…) 常用于连接两个或多个字符串。拼接字符串等效于+,+更常用
      substr(start,length) 从start位置开始(索引号),length为取的个数
      slice(start,end) 从start位置开始截取到end位置,end取不到(两个均为索引号)
      substring(start,end) 从start位置开始截取到end位置,end取不到,基本与slice相同但是不接受负值
      • 替换字符串 replace('被替换的字符','替换成为的字符') 注:只会替换第一个字符
        1
        2
        3
        4
        5
        6
              var str="qqwdaffasieotgnsayqpdgbgyawew";  //替换字符串中所有a为*
        while(str.indexOf('a')!=-1)
        {
        str=str.replace('a','*');
        }
        console.log(str);
      • 字符串转换为数组 split('分隔符')
        1
        2
        3
        4
        5
            var str="pink,blue,yellow,pink,red,skyblue";
        var arr=str.split(',');
        console.log(arr); //输出数组
        console.log(arr.join('|')) //输出字符串以 '|'分隔
        //之前学习的数组转换为字符串使用 join('分隔符')
    • 大小写转换 toUpperCase()转换为大写,toLowerCase() 转换为小写

      1
      2
      var str="abcdsfr";
      console.log(str.toUpperCase())

二、JavaScript中的数据类型

  1. 简单数据类型与复杂数据类型
    • 简单数据类型(基本数据类型,值类型): 在存储的变量中存储的是值本身
      1
      2
      var timer=null;
      console.log(typeof timer); //输出的为Object
    • 复杂数据类型(引用类型):在存储的变量中存储的仅仅是地址(引用),因此叫做应用类型。通过new关键字创建的对象(系统对象,自定义对象),如Object,Array,Date等
  2. 堆和栈
    • 栈(操作系统): 由操作系统自动分配释放存放函数的参数值、局部变量的值等。其他操作方式类似于数据结构中的栈。简单数据类型存放到栈里面
    • 堆(操作系统): 存放复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。复杂数据类型存放到堆里面
    • 简单类型传参
      1
      2
      3
      4
      5
      6
      7
          	function fn(a){
      a++;
      console.log(a); //输出11
      }
      var x=10;
      fn(x);
      console.log(x); //输出10