【无标题】

正则表达式
    语法:/正则表达式/

    最简单的正则:关键字原文本身:"no"    /no/ig
        i:忽略大小写
        g:全部

备选字符集:一个备选字符集:规定了【一位】字符可用的备选字符列表
         如何:/[备选字符列表]/
         强调:1、一个中括号,只能匹配一位字符
               2、正则默认只要满足后,就不再管理后续操作,后续用户可以乱输入 - 不合理
                解决:只要是做验证!!!必须/^[备选字符集]$/,前加^后加$代表要求从头到尾完全匹配 - 用户输入的东西必须和我规定的东西一样
         特殊:1、如果备选字符集中,unicode号是连续,那么中间部分可用-代替
              比如:一位数字:[0-9]
                一位字母:[A-Za-z]
                一位数字、字母、下划线:[0-9A-Za-z_]
                一位汉字:[\u4e00-\u9fa5]

量词:规定了一个字符集出现的次数
    有明确数量
            字符集{n,m}:前边相邻的字符集,最少出现n次,最多出现m次           
            字符集{n,}:前边相邻的字符集,最少出现n次,多了不限
            字符集{n}:前边相邻的字符集,必须出现n次

       没有明确数量
             字符集?:前边相邻的字符集,可有可无,最多一次
             字符集*:前边相邻的字符集,可有可无,多了不限
             字符集+:前边相邻的字符集,至少一次,多了不限

指定匹配的位置:
        ^:以xxx开头
        $:以xxx结尾
        特殊:如果^和$同时出现:前加^后加$,代表要求从头到尾完全匹配 - 只要是做验证必须加

字符串中支持正则表达式的API:分割、替换:
   分割字符串:
    var arr=str.split(reg);

   替换字符串:
    1、基本替换法:
        var newStr=str.replace(reg,"新内容");
        特殊:1、默认只会替换第一个关键字,想要替换所有记得加上后缀g
              2、替换的内容只能是一个固定的新内容


    2、高级替换法
            var newStr=str.replace(/[我卧窝][槽操艹草肏去]+/g,function(a,b,c){
                console.log(a);//正则匹配到的关键字
                console.log(b);//正则匹配到的关键字的下标
                console.log(c);//原文本身
                return a.length==2?"**":"***";
            });

   最大值和最小值
       语法:Math.max/min(a,b,c,d,e,f....);
       获取到最大的一个数或者最小的一个数
       问题:不支持数组参数
      *解决:Math.max/min.apply(Math,arr);
         apply:自己没有的方法可以去借用     
            可以将数组打散为单个参数悄悄进行传入  

  随机数:只要页面上具有随机的功能,底层一定用到了随机数
        Math.random() 已经是一个随机数了,随机的小数0-1,有可能取到0,但是绝对不可能取到1 - 意味着能取到最小值,但是取不到最大值
        公式:parseInt(Math.random()*(max-min+1)+min); 

Date:封装了一个日期对象,提供了对日期事件进行操作的API
    何时使用:以后只要网页上跟事件日期相关的,我们都要使用date对象
    1、创建日期对象:
        1、*创建当前时间:
            var now=new Date();

        2、*创建自定义时间:
            var birth=new Date("yyyy/MM/dd hh:mm:ss");

        3、创建自定义时间:
            var birth=new Date(yyyy,MM,dd,hh,mm,ss);
            缺点:月份需要修正:计算机中月份是从0开始到11的

        4、复制一个日期对象:
            为什么:日期对象的API都是直接修改原日期对象,使用API后,无法同时保存住旧的日期对象
            何时使用:在调用日期对象的API之前都要先复制,在使用API
            语法:var end=new Date(now);

Function:函数对象 - 方法
    创建:
      1、声明方式
        function 函数名(形参列表){函数体;return 结果;}
        具有完整的声明提前    

      2、直接量方式
        var 函数名=function(形参列表){函数体;return 结果;}
        也有声明提前,但是赋值留在原地

      3、构造函数方式 - 函数体不是固定的
        var 函数名=new Function("形参1","形参2",...,"函数体");
        函数体是动态拼接时候,注意不能省略""部分

    调用:
      函数名();
      元素.onclick();

   
      作用域:全局(成员哪里都可以使用)、函数(成员只能在函数调用时内部可用)
             变量的使用规则:优先使用局部的,局部没有找全局,全局没有就报错
      声明提前:在程序正式执行之前,会将var声明的变量和function声明的函数集中提前到当前作用域的顶部,但是赋值留在原地,变量比函数轻
      按值传递:如果传递的是原始类型,互不影响。如果传递的是引用类型,相互影响。
 重载:相同的函数,根据传入的实参的不同,会自动选择对应的函数执行
         问题:JS不支持重载,JS不允许同时存在多个同名函数,如果存在,最后的一个会覆盖之前的所有函数
        解决:arguments对象 - 只能在函数内部可用,是一个类数组对象:
            作用:接住所有的实参,【以后甚至不用形参都可以了】
            只有3点相同:
                1、支持下标
                2、支持length
                3、支持遍历
        变相实现重载:通过判断arguments的不同,执行不同的操作

  匿名函数:理解概念
        没有名字的函数,没有变量名/函数名引用着,调用完毕后会立马释放 - 一次性函
        1、匿名函数自调:代替全局作用域
            (function(){
                函数体; - 好处:调用完毕会【立刻释放】
            })()

        2、匿名函数回调:某个函数调用时,传入的实参又是一个函数,而且不需要我们调用自动执行
            比如:
              arr.sort(function(a,b){return a-b})
              str.replace(reg,function(){})
                匿名函数,不是自调,就一定是回调 - 以后会学习箭头函数:简化一切的回调函数

面向对象
   继承:父对象的成员(属性和方法):子对象可以直接使用

    如何去找到原型对象:
        1、对象名.__proto__ - 至少要创建一个对象才可以使用
        2、构造函数名.prototype
        new 构造函数(Object RegExp Date Function String Number Boolean...)

    在原型对象中添加共有属性和共有方法
        原型对象.属性名=属性值
        原型对象.方法名=function(){}

    每一个对象都有一个.__proto__的属性指向着自己的原型
    每一个构造函数都有一个.prototype属性指向着自己的原型

    自有和共有
    自有:保存在对象本地的
    共有:保存在原型对象中的,子对象都可以直接使用
      1、判断一个属性是自有还是共有:
        1、判断自有:obj.hasOwnProperty("属性名");
            如果结果为true,说明是自有
            如果结果为false,可能是共有也可能是没有

        2、判断共有:2个条件
            obj.hasOwnProperty("属性名")==false;//可能是共有也可能是没有
            "属性名" in obj;//in关键字会查找自己的原型
            if(obj.hasOwnProperty("属性名")==false && "属性名" in obj){
                console.log("共有")
            }else{
                console.log("没有")
            }
        完整的:
            if(obj.hasOwnProperty("属性名")){
                console.log("自有");
            }else{
                if(obj.hasOwnProperty("属性名")==false && "属性名" in obj){
                    console.log("共有")
                }else{
                    console.log("没有")
                }
            }

      2、修改/删除属性
        自有:修改:obj.属性名=新值;
              删除:delete obj.属性名;

        共有:修改:千万不要在本地做操作,那会导致在本地添加上一个同名属性,优先使用自己的,但并没有修改原型对象
              删除:千万不要在本地做操作,那会导致白做没有任何效果
              强调:一定要找到原型再做操作
            构造函数名.prototype.函数名=function(){
                this->函数中的代表当前调用此函数的对象
            }

      判断x是不是一个数组:
        1、判断当前x对象是否是继承自Array.prototype的
            Array.prototype.isPrototypeOf(x);
            true说明是一个数组

        2、判断当前x对象是否是由此构造函数所创建
            x instanceof Array
            true说明是一个数组

        3、Array.isArray(x); - 只有数组才有此方法
            true说明是一个数组

        4、在Object的prototype中保存着最原始的toString方法
           原始的toString输出的结果:[object 构造函数名]
 多态:子对象觉得父对象提供的方法不好用,可以再本地定义一个同名成员,优先使用离自己更近的方法
             同一个函数名,但根本不是同一个方法
           固定套路:
             if(Object.prototype.toString.apply(arr)==="[object Array]"){
                数组
             }
        
   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值