07 JSCORE RegExp、Math、Date、error

正课:
1. ***RegExp:
2. Math
3. Date

4.Error

1. ***RegExp
   API:
     验证: 检查字符串是否完全符合正则表达式的要求!
      如何: var bool=reg.test(待检测字符串)
         强调: 只要验证,reg中必须前加^后加$
     
     查找关键词: 第四种情况: 即找内容,又找位置
      如何: var arr=reg.exec(待查找的完整字符串)
              在"待查找的完整字符串"中,依次查找每个符合reg要求的关键词。
          返回值: 本次找到的一个关键词及其位置 arr[0,"index"]
                arr[0]: 关键词内容
                如果正则中有分组
                arr[n]: 自动保存第n个分组匹配的子内容
             arr["index"]: 当前关键词位置 -> 可简写为arr.index
             如果没找到,返回null,必须先验证是否为null,再执行
          每次查找后,都将reg.lastIndex属性(下次开始位置)修改为当前index+关键词长度,相当跳过当前关键词继续向后找
   

       固定套路: 找所有关键词:
         while((arr=reg.exec(str))!=null){
              arr[0] 关键词内容
                 arr[n]  自动获得第n个分组的子内容
              arr.index 当前关键词位置
         }
         如果只需要分组的子字符串,不需要完整关键词:
            可省略arr,用RegExp.$n
         while(reg.exec(str)!=null){
               RegExp.$n   自动获得第n个分组的子内容
         }

      练习:
       贪婪模式: 正则表达式默认匹配尽量长的符合条件的子字符串
              默认使用贪婪模式
              .*    .+
       懒惰模式: 仅匹配最短的符合条件的子字符串
          贪婪改懒惰:2种方法:1、  .*==》 .*?         .+==》 .+?

                                              2、^==》[^>]

2. Math:
   什么是: 专门封装数学计算所用常量,并提供数学计算所用API
   何时: 只要数学计算时
   特点: 不能new!
   API:
     1. 取整:
         Math.ceil(num) 上取整: 只要超过,就取下一个整数
         Math.floor(num) 下取整: 省略小数部分//将一切都转换为数字,再取整

              vs parseInt(str)//将一切都转换为字符串,再按位读数字字符[注意隐式转换]

                    参数是数字,两者无差别:Math.floor(123.345)==>parseInt(123.345)==>123

                    参数是包含非数字字符的字符串:parsrInt("12.5px")==>parsrInt(String("12.5px"))==>12         

                                            Math.floor("12.5px")==>Math.floor(Number("12.5px))==>Math.floor(NaN)==>NaN

                    参数是bool类型:Math.floor(true)==>Math.floor(Number(true))==>1

                                                parseInt(true)==>parseInt(String(true))==>NaN         
         Math.round(num) 四舍五入取整:
                     vs toFixed(d):
                                 1. 小数位数: Math.round()只能取整,不能规定小数位数
                                                      toFixed(d)可取整,也可规定小数位数,可按照任意小数位数四舍五入
                                 2. 返回值: Math.round()返回number,可直接做加减
                                               toFixed(d)返回string,必须先转为数字,才能计算
                               于是:自定义round函数:
    2. 乘方和开平方:
      乘方: Math.pow(底数, 幂)
      开平方: Math.sqrt(n)
    3. 最大值和最小值:
      Math.max(值1,值2,...);
      Math.min(值1,值2,...);
        问题: 不支持数组
        解决: Math.max.apply(null,arr)
    4. 随机数:
        Math.random()  0<=r<1 随机小数
        从min~max之间取随机整数:
        Math.floor(Math.random()*(max-min+1)+min)
        从0~n之间去随机:
        Math.floor(Math.random()*(n+1));

     

     

3. ***Date
   什么是: 封装一个时间,提供操作时间的API
   何时: 只要存储时间,都要用Date对象
   如何:
      创建: 4种:
      1. 创建日期对象,并自动获得当前客户端系统时间
         var now=new Date();
      2. 创建日期对象,并封装自定义时间:    
         var date=new Date("yyyy/MM/dd hh:mm:ss");
         var date=new Date(yyyy,MM-1,dd,hh,mm,ss)
      3. 复制一个日期对象:
         问题: 日期对象的计算都是直接修改原日期对象
                      计算后无法保留计算前的旧时间
         解决: 今后如果需要同时保留开始和结束时间时
                     都要先将开始时间复制一个副本,再用副本计算
         var date1=new Date(...);
         var date2=new Date(date1);
      4. 用毫秒数创建日期对象:
         Date对象的原理:
            Date对象中保存了一个巨大的毫秒数
               起始时间为: 1970年1月1日0点至今的毫秒数
         var date=new Date(ms);
         两个日期对象可相减: 得到毫秒差

正课:
1. ***日期API
2. ***Error

1. ***日期API
   单位:  FullYear   Month     Date          Day
             Hours      Minutes   Seconds    Milliseconds
   API: 1. 每个单位都有一个对儿get/set方法
            比如: var year=date.getFullYear()//获取单位的值     
                     date.setFullYear(year)//设置单位的值
            特殊: Day没有set方法
          2. 命名: 年月日星期没有s结尾
                      时分秒毫秒都有s结尾
          3. 取值范围: 只有Date从1~31
                   不考虑FullYear, 其余都是从0开始,到进制-1结束
               Month: 0~11 总比现实中小1, 需要修正
               Date: 1~31   不用修正
               Day: 0~6      不用修正
               Hours: 0~23 不用修正
               Minutes/Seconds: 0~59 不用修正
   日期计算:
      1. 计算两个日期的时间差: 两日期相减,得毫秒数,再换算
      2. 对任意单位做加减: 3步:
           1. 取分量: var d=date.getDate();
           2. 做加减: d+=60
           3. 放回去: date.setDate(d);
                强调: 所有set方法可自动调整时间进制
          其实可简写为: date.setDate(date.getDate()+60)
   转字符串:
       date.toString() -> 当地时间的完整时间格式
       date.toLocaleString() ->当地时间的简化版格式
       date.toLocaleDateString() -> 当地时间的日期部分
       date.toLocaleTimeString() -> 当地时间的时间部分
       date.toGMTString() -> 标准时区的标准时间

   作业: 自定义format函数: 2_format.html

2. ***Error
   什么是错误(bug---grace hopper最早一批女程序员): 程序执行过程中遇到的异常中断。
          一旦发生错误,程序立刻退出。
   什么是错误处理: 即使程序发生错误,也能保证程序不异常中断的一种机制。
   如何:
       try{
           可能发生错误的代码
       }catch(err){//仅在发生错误时,才执行
           错误处理代码: 1. 提示用户错误信息(String(err))
                                  2. 记录系统日志
       }finally{
           无论是否发生错误,都必须执行的代码。
           比如: 释放资源!
       }

       finally不是必须的!!!
  err: Error对象: 在错误发生时,自动创建的,保存错误信息的对象。
    错误类型6种:
        SyntaxError   语法错误
        ReferenceError   引用错误 要使用的变量没找到
        TypeError   错误的调用了类型的方法或者错误的使用了类型
        RangeError  参数范围越界 比如: toFixed(d) 0~20

        EvalError  

        URIError

 关于效率:

        问题:放入try...catch...中代码的效率会比外部代码降低
        解决:只要可以提前预料的错误,都要用if...else...来代替try catch
                   只有无法提前预料的错误,采用try catch

    主动抛出错误:
    为什么: 抛出错误通常是为了提醒使用者错误的使用的程序
    如何: throw new Error("错误消息")

  

  

 

 

   

  

   


       

 


       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值