07.JS对象

前言:
学习一门编程语言的基本步骤
(01)了解背景知识
(02)搭建开发环境
(03)语法规范
(04)常量和变量
(05)数据类型
(06)数据类型转换
(07)运算符
(08)逻辑结构
(09)函数
(10)对象
10.对象
    包装对象,目的是让原始类型像引用类型一样,具有属性和方法。
    JS提供了3种包装对象:String,Number,Boolean
    04.String对象
        1) 将任意数据转为字符串
           new String(值)     返回对象,使用和字符串没有区别

    //String对象——new String()
    var str1=new String ("a");//带new都是构造函数,可以返回函数
    console.log(str1,typeof str1);//String {"a"} "object"

           String(值)     返回字符串

    //String对象——String
    var str1="a";
    console.log(str1+'b');
    //将任意数据转为字符串——String()
    var str2=String(true);//普通函数
    console.log(str2,typeof str2);//true string

        2) 转义字符—— \
            解释:转换字符的意义
            用法:放在要转换意义的字符前边
            注意:斜杠:"/" 与反斜杠:"\" ,此处不可互换
            \’ 将特殊意义的引号转成普通字符
            \n 将字符n转换成换行符
            \t 将字符t转换成制表符(tab键效果)

    //转义字符——\ 
    console.log("It's a cat");// 双引号,里外使用不同的引号区分
    console.log('It\'s a cat');//单引号与单引号的使用是冲突的,可使用转义字符
    console.log('hello \n world');//单引号   \n   n不见了,并且world换行
    console.log('a\tb')//a    b,制表符,tab键四个空格

        3)字符串下的api
            length 获取字符串的长度。

    // 获取长度——length
    var str='javascript';
    console.log(str.length);//10

            charAt() 获取下标对应的字符,也可以使用数组形式 字符串[下标]。

    //获取下标对应的字符——charAt()
    var str='javascript';
    console.log(str[0]);//j
    console.log(str.charAt(0));//j

            split(sep)将字符串按照制定的字符分割成数组,sep是指定的字符。

    //将字符串按照制定的分隔符号转为数组——split(sep)
    var str='a-b-c';
    console.log(str.split("-"));// ["a", "b", "c"]
    //将数组按照制定的分割符转为字符串,
    //注意两处区别,一个数数组变字符串,一个是字符串变数组
    var arr=['a','b','c','d'];
    console.log(arr.join("-"));//a-b-c-d

            slice(start,end) 截取字符串,start开始的下标,end结束的下标,不包含end本身,end为空截取到最后,负数表示倒数。

    //截取字符串——slice(start,end)
    var str='javascript';
    console.log(str.slice(4));//下标4之后截取到最后
    console.log(str.slice(4,7));//截取到下标7,但是不包含下标7
    console.log(str.slice(-3));//倒数第三位截取到最后
    console.log(str.slice(-3,-1));//倒数第三位截取到倒数第二位

            substr(start,count)截取字符串,start开始的下标,count截取的长度,如果count为空,截取到最后;start为负数,表示倒数。

    //截取字符串,按长度来截取——substr(start,count)
    var str='javascript';
    console.log(str.substr(2,3));//从下标2开始截取,截取三位
    console.log(str.substr(4));//end为空,截取到最后
    console.log(str.substr(-3));//负数为倒数

            substring(start,end) 截取字符串,start开始的下标,end结束的下标,不包含end本身,如果end为空截取到最后,如果下标为负数自动转成0。

    //截取字符串——substring(start,end)
    var str='javascript';
    console.log(str.substring(4));
    console.log(str.substring(4,7));//从小标4开始,截取到下标6
    //负数转为0
    console.log(str.substring(-3,-1));//-3代表0,所以是截取不到东西的
    console.log(str.substring(1,3));
    console.log(str.substring(3,1));//自动转换前后的数字大小,下标位置大的数值会转换到后面

            indexOf(value,start)查找某个字符串出现的下标,value要查找的字符串,start开始的下标,默认是0,如果找不到返回-1。

    //获取某个字符串的下标——indexOf(value,start)
    var str='javascript';
    console.log(str.indexOf('s'));
    console.log(str.indexOf('a',2));//2的意思是下标2的位置开始
    console.log(str.indexOf('a',5));//-1,找不到返回为-1

            lastIndexOf(value)查找某个字符串最后一次出现的下标,找不到返回-1。

    //查找某个字符最后一次出现的下标——lastIndexOf(value)
    var str='javascript';
    console.log(str.lastIndexOf('a'));//3
    console.log(str.lastIndexOf('b'));//找不到返回-1

            toUpperCase() 将英文字母转大写

    //转大写——toUpperCase()
    var str='JavaScript';
    console.log(str.toUpperCase());//JAVASCRIPT

            toLowerCase() 将英文字母转小写

    //转小写——toLowerCase()
    var str='JavaScript';
    console.log(str.toLowerCase());//javascript

            对比slice和 substring
            slice为截取数组中的元素,slice中下标允许使用负数表示倒数,slice中下标的顺序start小于end
            substring为截取字符串,substring下标负数自动转成0,substring中下标大小不分顺序,会自动排序
    05.Number对象
        new Number(值)   将数据转为数值型,返回对象

    //将数据转为数值型,返回数值—— Number(值)
    var num1=2;
    var num2=Number(true);
    console.log(num1,num2);

        Number(值)       将数据转为数值型,返回数值

    //将数据转为数值型,返回对象—— new Number(值)构造函数
    var num3=new Number(null);//包装对象
    console.log(num3,typeof num3);

        Number.MAX_VALUE       最大值

    //最大值——Number.MAX_VALUE       
    console.log(Number.MAX_VALUE);//最大值1.7976931348623157e+308

        Number.MIN_VALUE        最小值,指小数点后面的位置非常多

    //最小值——Number.MIN_VALUE        
    console.log(Number.MIN_VALUE);//最小值5e-324

        toFixed()     取小数点后N位

    //取小数点后N位——toFixed() 
    var num4=2*3.14*5;
    console.log(num4.toFixed(2));//取小数点后2位

        toString(n)     将数值转为字符串,同时可以设置进制,N就是设置的进制,2,8,16

    //将数值转为字符串——toString(n)     
    var num6=13;
    console.log(num6.toString(8));//转为8进制

    06.Boolean对象
         new Boolean(值)    将数据转为布尔型,返回对象

    //new Boolean(值)      将数据转为布尔型,返回对象
    var b3=new Boolean(3);
    console.log(b3,typeof b3);

         Boolean(值)    将数据转为布尔型,返回布尔型

    //Boolean(值)        将数据转为布尔型,返回布尔型
    // NaN 0  "" undefined null,只有这5个是false  其他都是true
    var b1=true;
    var b2=Boolean(NaN);
    console.log(b1,b2);

         !!值     转数据隐式转换为布尔型

    // !!值                 转数据隐式转换为布尔型
    var b5=!!0;
    console.log(b5);

    07.匹配模式(掌握)
        作用:用于查找,替换字符串
        search(value)    用于查找满足条件的第一个下标,类似于indexOf,如果找不到返回-1。

    //查找满足条件的第一个下标,找不到返回-1——search(value)
    var str='把gudu当成晚餐que难以下咽,把heiye当作温暖QUE难以入眠';
    console.log(str.search('gudu'));//1
    console.log(str.search('GUDU'));//-1  找不到
    console.log(str.search(/que/));//放在正则表达式中

        match(value)    用于查找满足条件的字符串,返回一个数组。

    //查找满足条件的字符串,返回一个数组——match(value)
    // i -> ignore  忽略大小写
    // g -> global   全局查找
    var str='把gudu当成晚餐que难以下咽,把heiye当作温暖QUE难以入眠';
    console.log(str.match('heiye'));//返回一个数组
    console.log(str.match(/que/i));//i-ignore忽略大小写
    console.log(str.match(/que/g));//g-global 全局的查找
    console.log(str.match(/que/ig));//全局忽略大小写查找

        replace(value1,value2)    查找并替换,value1要查找的字符串,value2要替换的字符串。

    //查找并替换——replace(value1,value2)
    var str='把gudu当成晚餐que难以下咽,把heiye当作温暖QUE难以入眠';
    console.log(str.replace(/heiye/ig,'baitian'));//替换

    08.Math对象
        用法:不需要创建,可以直接使用,
        PI 取圆周率

    //获取圆周率——PI
    console.log(Math.PI);

        abs() 取绝对值

    //取绝对值——abs()
    console.log(Math.abs(18-21));

        max() 取最大值

    //取一组数字的最大值——max() 
    console.log(Math.max(23,9,78,6,45));

        min() 取最小值

    //取一组数字的最小值——min()
    console.log(Math.min(23,9,78,6,45));

        pow() x的y次幂

    //取x的y次幂——pow()
    console.log(Math.pow(5,2));

        ceil() 向上取整

    //向上取整——ceil() 
    console.log(Math.ceil(5.02358));

        floor() 向下取整

    //向下取整——floor()
    console.log(Math.floor(4.999));

        round() 四舍五入取整

    //四舍五入取整——round()
    console.log(Math.round(4.51));

        random() 取0-1之间的随机数 >=0 <1

    //取随机0-1之间的随机数——random() 
    console.log(Math.random());

    09.Date对象
        用于对日期时间的存储和计算
        1)创建Date对象
            new Date()

   //创建Date对象
   //获取当前系统时间
   var d1=new Date();
   console.log(d1);//Tue Feb 25 2020 15:23:13 

   //手动输入的日期
   var d2=new Date('2020/02/25');
   console.log(d2);//默认为0时区的0点0分0秒
   var d3=new Date('2020/02/25 10:36:50');
   console.log(d3);//输入是什么时间显示就是什么时间
   var d4=new Date(2020,1,25,10,36,50);//月份范围是0-11之间,所以1,是2月
   console.log(d4);

   //获取数据库存储的是距离计算机元年的毫秒数
   //默认为计算机元年时间为1970-1-1 0:0:0 
   //365*24*60*60*1000
   var d5=new Date(49*365*24*60*60*1000);
   console.log(d5);//2018/12/20

        2)获取存储的日期时间

   //获取存储的日期时间
   var d=new Date('2020/02/25 10:56:30');
   console.log(d.getFullYear());//获取年
   console.log(d.getMonth()+1);//获取月份,月份范围是0-11之间,所以+1才能正常显示
   console.log(d.getDate());//获取日
   console.log(d.getHours());//获取小时,复数形式
   console.log(d.getMinutes());//获取分钟
   console.log(d.getSeconds());//获取秒数
   console.log(d.getMilliseconds());//获取毫秒数
   console.log(d.getDay());//获取星期,0-6,一个星期,星期日-星期六
   console.log(d.getTime());//获取距离计算机元年的毫秒数

   //练习:创建Date对象,保存当前的系统时间,打印‘今天是2020年2月25日 星期二 15:39’
   var now=new Date();
   var year=now.getFullYear();
   var month=now.getMonth()+1;
   var date=now.getDate();
   var hours=now.getHours();
   var minutes=now.getMinutes();
   var day=now.getDay();
   var arr=["星期天","星期一","星期二","星期三","星期四","星期五","星期六"];
   console.log(arr[day]);//把day作为下标放在数组中
   //判断月份是否小于10,如果小于,增加前导0
   if(month<10){
   month='0'+month
   }
   console.log(
      '今天是'+year+'年'+
      month+'月'+
      date+'日'+
      arr[day]+' '
      +hours+':'+
      minutes
      );

   //练习:计算距离2020年12月25日还有多少天?多少时?多少分?多少秒?
   //创建两个对象,
   var c=new Date('2020/12/25');//圣诞节日期
   var now=new Date();//本机时间
   //两个对象直接相减,获取相差的毫秒数
   var d=c-now;
   //相差的值转为秒
      d=Math.floor(d/1000);
   //计算相差天数
   var day=Math.floor(d/(24*60*60));
   //去除天数,计算相差的小时
   var hour=d%(24*60*60);
      hour=Math.floor(hour/3600);
   //去除小时,计算相差的分钟
   var minutes=d%3600;
   var minutes=Math.floor(minutes/60);
   //去除分钟,计算相差的秒钟
   var second=d%60;
   //打印最终结果
   console.log(
   '距离2020年的圣诞节还有'+
   day+'天'+
   hour+'小时'+
   minutes+'分钟'+
   second+'秒');

        3)获取本地字符串格式

   //获取本地字符串格式
   var d=new Date();
   console.log(d.toLocaleString());//获取日期时间字符串
   console.log(d.toLocaleDateString());//获取日期字符串
   console.log(d.toLocaleTimeString());//获取时间字符串

        4)修改日期时间

    //修改日期时间
    var d1=new Date('2020/02/25 15:20:30');
    d1.setFullYear(2018);//修改年份
    d1.setMonth(8);//修改月份范围0-11,8是九
    d1.setDate(3);
    console.log(d1);
    d1.setHours(10);
    d1.setMinutes(36);
    d1.setSeconds(50);
    var d2=new Date('2020/02/25 15:20:30');
    d2.setMilliseconds(1111111111);//修改距离计算机元年的毫秒数后,时间会发生变化
    console.log(d1);
    console.log(d2);

        5)复制克隆Date对象

    //克隆date对象
    //原理在06.JS对象-1——02.函数对象——3)对象的存储
    var d1=new Date('2020/02/25 15:20:30');
    //var d2=d1;//复制d1的地址给d2
    var d2=new Date(d1);//克隆了一个对象
    d1.setFullYear(2019);
    console.log(d1);//Mon Feb 25 2019 15:20:30
    console.log(d2);//Tue Feb 25 2020 15:20:30

    //练习:创建Date对象,保存员工的入职时间”2018/05/31”,3年合同到期,计算到期时间,合同到期前1个月,续签合同,
    //如果是周末,提前到周五,如果是周六,那就提前一天,续签时间,打印出本地日期时间字符串格式
    //入职时间
    var d1=new Date('2018/05/31');
    //到期时间
    var d2=new Date(d1);
    //三年后
    d2.setFullYear(d2.getFullYear()+3);
    //续签时间
    var d3=new Date(d2);
    //计算提前一个月
    d3.setMonth(d3.getMonth()-1);
    //判断周几
    var day=d3.getDay();
    if (day===6){
      //如果是周六,提前一天
      d3.setDate(d3.getDate()-1);
    }else if(day===0){
      //如果是周末,提前两天
      d3.setDate(d3.getDate()-2);
    }
    console.log("入职时间是"+d1.toLocaleDateString());+
    console.log("到期时间是"+d2.toLocaleDateString());+
    console.log("续签时间是"+d3.toLocaleDateString());

    10.错误处理
        语法错误(SyntaxError)——错误的使用了中文符号,缺少括号

    //错误处理
    //js程序执行前,检查是否有语法错误
    //语法错误——SyntaxError
    var a=1;//标点符号使用错误

        引用错误(ReferenceError)——使用了未声明的变量

    //引用错误。使用未声明的变量——ReferenceError
    console.log(a);//a没有声明

        类型错误(TypeError)——错误的使用了小括号

    //类型错误,错误的使用了符号——TypeError
    var b=2;
    b();//b不是一个函数,不能调用

    var person={
      ename:"tom"
    }
    person.ename();//person.ename不是一个函数

        范围错误(RangeError)——参数超出了范围

    //范围错误,参数超出了范围——RangeError  
    var arr=new Array(-3);
    console.log(arr);

        说明:语法错误出现后一行代码都不执行,其他错误出现后会影响后面代码的执行


        自定义错误:throw '自定义的错误信息'

    //自定义错误——throw '错误'
    var num="abc";
    //如果num不是数字,抛出一个自定义的错误
    //先调用number转数值
    if (isNaN(num)){//判断是否不是一个数字
      throw '请提供一个数字';
    }

        自定义错误:try{  }catch(err){  },尝试执行,不阻止后续代码执行
        Try{
        //可能出现的错误(类型错误,引用错误,范围错误,自定义错误)
        }catch(err){
        //如果try中的代码报错,才会执行此处的代码,会把错误的信息交给err
        }

    //自定义错误——try{}catch(err){}尝试执行
    //提供一个小于10的数字,
    try{var num=11;
        if (num>10){
          throw"太大了";
        }
    }catch (err){//只有try中的代码报错,才会执行catch中的代码,错误信息交给err
      console.log(err+":请输入一个小于10的数字");
    }

 

 


07.JS对象

全文结束