分类: 笔记

  • 构造函数

    使用构造函数的目的

    批量创建对象

    使用

    1. 构造函数也是函数 function
    2. 构造函数 函数名首字母需要大写(规范)
    3. 构造函数 必须和new一起使用创建对象 (批量)
    //声明函数
    function Person(nameValue) {
      this.name = nameValue
    }
    
    //创建实例对象
    // new 出来的对象称之为实例对象
    let first = new Person('Liao')
    let Second = new Person('Xin')
    

    优点

    1. 不需要手动声明对象和返回对象
    2. 有具体的类型, 类型是当前的构造函数名称(例:Person)

    注意点:必须配合new使用

    new的时候做了四件事情

    1. 创建一个新对象(在内存中开辟新空间)
    2. this指向创建的新对象
    3. 执行构造函数内代码(本质上:给新对象添加属性)
    4. 把创建的新对象给返回

    实例(对象):构造函数创建出来的对象

    拓展

    通过对象字面量批量创建

    let obj1 = {name: '小黑'}
    let obj2 = {name: '小白'}
    let obj3 = {name: '小红'}
    let obj4 = {name: '小绿'}
    
    不足

    需要创建多个有着共同属性的对象会非常麻烦

    工厂函数

    批量创建对象

    function createPerson(nameValue) {
    
    // 1.创建一个新对象
    let person = {} // 等价new Object()
    
    // 2.给对象添加对应的属性
    person.name = nameValue
    
    // 3.返回该对象
    return person
    }
    
    let third = createPerson('Shang')
    let fourth = createPerson('Li')
    
    不足
    1. 需要手动创建对象和返回这个对象
    2. 创建出来的对象类型统一是object, 无法识别对象的具体类型
  • express的简单使用

    需要提前安装node.js

    初始化

    vscode资源管理器空白部分右击 – 在集成终端中打开

    终端输入命令npm init --yes

    安装express框架npm i express

    新建一个js文件:

    //1. 引入express
    const express = require('express');
    
    //2. 创建应用对象
    const app = express();
    
    //3. 创建路由规则
    // request 是对请求报文的封装
    // response 是对响应报文的封装
    app.get('/', (request, response)=>{
        //设置响应
        response.send('HELLO EXPRESS');
    });
    
    //4. 监听端口启动服务
    app.listen(8000, ()=>{
        console.log("服务已经启动, 8000 端口监听中....");
    });
    

    在vscode中右键项目文件夹,在集成终端中打开

    在终端中输入node express.js

  • jQuery中的AJAX

    GET

    $.get(url,[data],[callback])

    url:请求地址

    data:请求时携带的参数

    callback:请求成功的回调函数

    $.get('https://api.liaooo.cn/api', { id: 1, name: 2 }, function (result) {})
    

    POST

    $.post(url,[data],[callback])

    url:请求地址

    data: 要提交的数据

    callback:请求成功的回调函数

    通过$.ajax()发送请求

    $.ajax(url,[settings])

    $.ajax({
    	type: 'GET',	//请求方式
    	url: 'https://api.liaooo.cn/api', //请求的URL地址
    	data: { id: 1, name: 2 }, //请求携带的数据
    	success: function(result){ }, //请求成功回调
    })
    

    https://jquery.cuishifeng.cn/jQuery.Ajax.html

  • HTTP

    HTTP协议(hypertext transport protocol)(超文本传输协议),协议详细规定了浏览器和万维网服务器之间互相通信的规则。

    请求报文

    重点是格式与参数

    行      POST /wp-json/wp/v2/categories HTTP/1.1
    头      Host: liaooo.cn
            Cookie: 5c57847f5465a2bf45c8953d097c5486
            Content-type: application/x-www-form-urlencoded
            User-Agent: ··· Chrome/100.0.4896.60 Safari/537.36 ···
    空行
    体      username=admin&password=123
    

    响应报文

    行      HTTP/1.1  200  OK
    头      Content-Type: text/html;charset=utf-8
            Content-length: 2048
            Content-encoding: gzip
    空行    
    体      {"id":123,"link":"https:\/\/liaooo.cn\/topic\/html\/","name":"HTML"}
    

    常见响应状态码

    • 404 服务器找不到请求的资源
    • 403 客户端没有访问内容的权限
    • 401 客户端必须对自身进行身份验证才能获得请求的响应
    • 500服务器遇到了不知道如何处理的情况
    • 200 请求成功

    HTTP 响应状态码 – HTTP | MDN

    HTTP 请求方法

    GET

    用于提交少量的、简单的数据。

    GET方法用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响。

    注:因GET请求的不安全性,在处理敏感数据时,绝不可以使用GET请求。

    POST

    • 用于提交大量的、复杂的、包含文件上传的数据
    • 实际开发中,form表单的post提交方式用的较多

    请求主体的类型由 Content-Type 头部指定.

    POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。

    POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。

  • AJAX

    1.创建一个实例化对象

    new XMLHttpRequest()

    let xhr = new XMLHttpRequest()
    

    2.设置请求信息

    xhr.open(method, url);

    *.设置请求头

    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    3.发送请求

    xhr.send(body)

    get 请求不传 body 参数,只有 post 请求使用

    4.接收响应

    xhr.responseXML 接收 xml 格式的响应数据

    xhr.responseText 接收文本格式的响应数据

    xhr.onreadystatechange = function (){ if(xhr.readyState == 4 && xhr.status == 200){
    var text = xhr.responseText;
    console.log(text); }
    }
    

    IE缓存问题

    在IE中,ajax的同一请求只会请求一次,重复请求会加载缓存的数据

    解决方法

    浏览器缓存根据url记录,动态更新url即可避免

    可在请求url后面加随机数、时间戳等

    xhr.open("get","/testAJAX?t="+Date.now());
    

    属性

    当 readyState 属性发生变化时

    xhr.onreadystatechange

    也可使用addEventListener()来监听

    请求的状态码

    xhr.readyState

    • 0: 表示 XMLHttpRequest 实例已经生成,但是open()方法还没有被调用
    • 1: 表示 send()方法还没有被调用,仍然可以使用 setRequestHeader(),设定 HTTP请求的头信息
    • 2: 表示 send()方法已经执行,并且头信息和状态码已经收到
    • 3: 表示正在接收服务器传来的 body 部分的数据
    • 4: 表示服务器数据已经完全接收,或者本次接收已经失败了(请求完成,不一定成功)

    响应体

    xhr.response xhr.responseText

    定义响应类型

    xhr.responseType

    textjson

    响应状态

    xhr.status

    返回状态码 例: 200

    最大请求时间(毫秒)

    xhr.timeout

    若超出该时间,请求会自动终止。

    请求超时调用

    xhr.ontimeout

    也可使用addEventListener()来监听


    方法

    中止请求

    xhr.abort()

    获得响应头

    xhr.getResponseHeader()

    初始化一个请求

    xhr.open()

    设置 HTTP 请求头的值

    必须在 open() 之后、send() 之前调用

    xhr.setRequestHeader()

    发送请求

    xhr.send()


    事件

    当请求被停止时触发

    abort

    当请求遭遇错误时触发

    error

    请求成功完成时触发

    load

    在预设时间内没有接收到响应时触发

    timeout

  • css隐藏移动端滚动条

    html::-webkit-scrollbar,
    body::-webkit-scrollbar {
    display: none;
    }
    
    html,
    body {
    height: 100%;
    overflow: hidden;
    overflow-y: scroll;
    /* 使得ios滑动流畅 */
    -webkit-overflow-scrolling: touch;
    }
    

    PS : 设置 height: 100%; overflow: hidden; overflow-y: scroll; 是重点

    来自_Raymond的评论 – 简书

  • jQuery

    jQuery对象

    用jQuery方式获取过来的对象是jQuery对象.

     $("div");  // $("div")是一个jQuery 对象
    

    jQuery 对象只能使用 jQuery 方法

    jQuery对象转换为DOM对象

    //加上索引号即可转为DOM对象,可以使用DOM对象的方法
    $("div")[0]
    $("div").get(0)
    

    隐式迭代

    隐式迭代就是把匹配的所有元素内部进行遍历循环.

    <div>我们一起被修改</div>
    <div>我们一起被修改</div>
    <div>我们一起被修改</div>
    <div>我们一起被修改</div>
    
    <script>
    $("div").css("background", "pink");
    //隐式迭代直接把元素遍历了一遍,可以直接修改所有div样式
    </script>
    

    筛选选择器

    $(function() {
        $("ul li:first").css("color", "red"); //:first :last
        $("ul li:eq(2)").css("color", "blue"); //选择第n个元素 :eq(n)
        $("ol li:odd").css("color", "skyblue"); //奇数
        $("ol li:even").css("color", "pink"); //偶数
      	//注意:索引号从0开始
    })
    

    筛选方法

    parent()

    查找最近父级

    $("li").parent();

    parents()

    可返回指定父级,如果参数为空,返回所有父级.

    $("li").parents("选择器");

    children(“选择器”)

    相当于$("ul>li")最近一级(亲儿子)

    $("ul").children("li");

    find(“选择器”)

    相当于$("ul li"),后代选择器

    $("ul").find("li");

    siblings(“选择器”)

    查找兄弟节点(不包括自己)

    $(".first").siblings("li");

    eq(index)

    相当于$("li:eq(2)");方法里面可以换成变量,比较灵活

    $("li").eq(2);

    nextAll()

    查找当前元素之后的所有同辈元素

    $(".first").nextAll();

    prevtAll()

    查找当前元素之前的所有同辈元素

    $(".last").prevtAll();

    hasClass(“类名”)

    查找元素是否含有某个类,返回值true or false.

    $("div").hasClass("box");

    得到当前元素索引号

    方法

    $(this).index();

    排他思想

    利用查找兄弟元素的方法

    siblings("选择器") 选择兄弟节点,除了自己

    $("div").eq(1).show();
    $("div").eq(1).siblings().hide();
    

    链式编程

    //上个小节的代码可以改写为这样
    $("div").eq(1).show().siblings().hide();
    

    操作CSS方法

    参数只写属性名,返回值是属性值.

    $("div").css("color"); //#333
    

    修改CSS样式

     $("div").css("属性名","属性值");
    //逗号分隔,属性必须加引号,值是数字不用加单位和引号
    

    修改多个CSS样式(利用对象)

     $("div").css({
       	 属性名:"属性值"  //如果值不是数字,则需要加引号
         width: 400,
         color:"lightblue"
         backgroundColor: "red" // 如果是复合属性则必须采取驼峰命名法
     });
    

    设置类样式方法(原生的classList)

    添加类

    $("div").addClass("active");
    

    移除类

    $("div").removeClass("active");
    

    切换类

    $("div").toggleClass("active");
    //有就移除,没有就添加
    

    jQuery效果

    []内表示可以省略

    speed:三种预定速度之一的字符串(“slow”,”normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)

    easing:要使用的擦除效果的名称(需要插件支持).默认jQuery提供”linear” 和 “swing”.

    fn:在动画完成时执行的函数,每个元素执行一次.

    停止排队

    stop()

    必须写在动画的前面,相当于结束上一次动画.

    显示 / 隐藏 / 切换

    show([speed],[easing],[fn])

    hide([speed],[easing],[fn])

    toggle([speed],[easing],[fn])

    滑动

    slideDown([speed],[easing],[fn])

    slideUp([speed],[easing],[fn])

    slideToggle([speed],[easing],[fn])

    事件切换

    hover([overfn,]outfn)

    相当于mouseovermouseout

    hover(fn1(){},fn2(){})
    //over:鼠标移到元素上要触发的函数
    //out:鼠标移出元素要触发的函数
    //如果只写一个函数,则鼠标移入移出都会触发
    

    淡入淡出

    fadeIn([speed],[easing],[fn])

    fadeOut([speed],[easing],[fn])

    fadeToggle([speed],[easing],[fn])

    fadeTo(speed,opacity,[easing],[fn]) //时间和透明度必须写

    自定义动画

    animate(params,[speed],[easing],[fn])

    params:一组包含作为动画属性和终值的样式属性和及其值的集合

    获取属性

    获取元素固有属性值

    获取属性值ele.prop("属性名")

    修改属性值ele.prop("属性名",[值])

    获取自定义属性值

    自定义和自带的都能用

    获取自定义属性值ele.attr("自定义属性名")

    //类似原生 getAttribute()

    修改自定义属性值ele.attr("自定义属性名",[值])

    //类似原生 setAttribute()

    H5新增的data-*也可以用这个方法得到

    数据缓存

    data([key],[value])

    当参数只有一个key的时候,为读取该jQuery对象对应DOM中存储的key对应的值,值得注意的是,如果浏览器支持HTML5,同样可以读取该DOM中使用 data-[key] = [value] 所存储的值.

    设置

     $("span").data("uname", "andy");
     //不会出现在DOM上,存在内存中
    

    使用

     $("span").data("uname"); //andy
    

    读取的data-[key]值

    <div data-test="this is test" ></div>
    
    $("div").data("test"); //this is test!;
    //不需要加data-
    

    jQuery 内容文本值

    获取设置元素内容 html()

    console.log($("div").html());

    修改内容

    $("div").html("123");

    获取设置元素文本内容 text()

    console.log($("div").text());

    修改内容

    $("div").text("123");

    获取设置表单值 val()

    console.log($("input").val());

    修改内容

    $("input").val("123");

    遍历元素

    $().each(fn("索引号",对应DOM对象))

    主要用于遍历DOM对象

    两个参数均可自己命名

    <div>1</div>
    <div>2</div>
    
    $("div").each(function(i, domEle) {
    
    // 0 1
    console.log(i);
      
    //<div>1</div>
    //<div>2</div>
    console.log(domEle); 
    
    })
    

    $.each(arr,fn(索引号,ele){})

    主要用于遍历数据,处理数据.

    $.each({
        name: "andy",
        age: 18
    }, function(i, ele) {
        console.log(i); // 输出的是 name age 属性名
        console.log(ele); // 输出的是 andy  18 属性值
    })
    

    创建添加删除元素

    创建

    $("<li> 小li </li>");

    添加

    内部添加(和获取元素是父子关系)

    放到最后一个$("ul").append($("<li> 小li </li>"));

    $("ul").prepend($("<li> 小li </li>"));放到第一个

    外部添加(和获取元素是兄弟关系)

    放到后面$("div").after("<div>新的div</div>");

    $("div").before("<div>新的div</div>");放到前面

    删除

    删自己$("div").remove();

    //删子元素

    $("div").empty(); 相当于清空自己的所有内容

    $("div").html(""); 相当于修改元素内的内容

    jQuery 尺寸

    width() / height()

    获取设置元素 width和height大小

    $("div").width()

    innerWidth() / innerHeight()

    获取设置元素 width 和 height + padding 大小

    $("div").innerWidth()

    outerWidth() / outerHeight()

    获取设置元素 width 和 height + padding + border 大小

    $("div").outerWidth()

    outerWidth(true) / outerHeight(true)

    获取设置 width 和 height + padding + border + margin

    $("div").outerWidth(true)

    jQuery 位置

    获取设置距离文档的位置(偏移) offset

    与父级无关

    $("div").offset()

    有两个属性lefttop

    获取$("div").offset().top;

    设置偏移$("div").offset({top:100,left:30});

    获取距离带有定位父级位置(偏移) position

    如果没有带有定位的父级,则以文档为准

    position方法不能设置偏移,其余用法和offset一样

    被卷去的头部

    被卷去的头部scrollTop()

    被卷去的左侧scrollLeft()

    填数值可以将页面跳转到对应位置

    返回顶部小例子

    注意是获取body和html元素,而不是文档

    $("body, html").stop().animate({
        scrollTop: 0
    });
    // $(document).stop().animate({
    //     scrollTop: 0
    // }); 不能是文档而是 html和body元素做动画
    

    jQuery 事件处理

    单个事件注册

    $("div").事件名(fn(){})

    事件处理 on

    绑定多个事件

    //绑定多个事件,每个事件对应不同函数
    $("div").on({
    
    mouserenter:fn(){},
    
    cilck:fn(){},
    
    dbclick:fn(){},
    
    })
    
    //绑定多个事件,事件之间用空格隔开,对应相同函数
    $("div").on("mouseenter mouseleave", function() {});
    
    事件委派

    $("绑定事件的元素").on("click", "触发的元素", fn() {});

    $("ul").on("click", "li", function() {
        alert(11);
    });
    //click 是绑定在ul 身上的,但是 触发的对象是 ul 里面的小li
    
    on可以给未来动态创建的元素绑定事件
    $("ul").append("<li> </li>");
    //新加的小li也绑定了事件
    

    事件解绑 off

    $("div").off();解除所有事件

    $("div").off("click"); 解除某个事件

    $("ul").off("click", "li"); 解除事件委托

    绑定只触发一次的事件

    $("p").one("click", function() {})

    自动触发事件

    默认行为 例:文本框focus会有光标闪烁

    元素.事件()

    $("div").click();会触发元素的默认行为

    元素.trigger(“事件”)

    $("div").trigger("click");会触发元素的默认行为

    元素.triggerHandler(“事件”)

    $("div").triggerHandler("click");不会触发元素的默认行为

    jQuery 事件对象

    和原生差不多

    $("div").on("click", function(event) {
        // console.log(event);
        console.log("点击了div");
        event.stopPropagation(); //阻止冒泡
    })
    

    jQuery 拷贝对象

    $.extend([deep], target, object1, [objectN])

    参数

    deep:如果设为true,则为深拷贝

    target:待修改对象。

    object1:待合并到第一个对象的对象。

    objectN:待合并到第一个对象的对象(可选)。

    var targetObj = {
        id: 0,
        msg: {
            sex: "男"
        }
    };
    var obj = {
        id: 1,
        name: "andy",
        msg: {
            age: 18
        }
    };
    
    浅拷贝把原来对象里面的复杂数据类型地址拷贝给目标对象
    • targetObj将会被obj中的同名属性覆盖
    • 但是,obj中的msg属性值是对象,浅拷贝只会拷贝msg的地址,所以targetObj打印出来的msg和obj指向同一地址
    $.extend(targetObj,obj);
    targetObj.msg.age = 20; //两个对象中的msg指向同一地址,所以都会被修改
    
    深拷贝把里面的数据完全复制一份给目标对象

    (如果里面有不冲突的属性,会合并到一起)

    • 因为是深拷贝,obj把属性复制一份给targetObj,所以如果targetObj中有和obj同名的属性,则会被覆盖
    • objmsg中的age则会合并到targetObjmsg里面
    • 如果如targetObj中的msg原来有age,则会被覆盖
    $.extend(true, targetObj, obj);
    targetObj.msg.age = 20;
    

    jQuery 多库共存

    • 如果$符号冲突 我们就使用jQuery
    • jquery释放对$控制权 自己来决定
    var diy = jQuery.noConflict();
    console.log(diy("span"));
    diy.each();
    

    jQuery 插件

    jQuery之家 / jQuery插件库

    瀑布流、图片懒加载、全屏滚动···

    jQuery API 中文文档

  • 截取字符串

    substring()

    语法

    str.substring(indexStart[, indexEnd])
    

    参数

    indexStart

    从哪开始截取且包含这个位置的字符(索引号从0开始)

    indexEnd

    可选

    截取到哪且不包含这个位置的字符

    • 如果任一参数小于 0 或为 NaN,则被当作0
    • 如果 indexStart 大于 indexEnd,则 substring 的执行效果就像两个参数调换了一样。
    <div class="box">测试文字苹果香蕉</div>
    <!-- length = 8 / index = [0-7] -->
    <script>
    let box = document.querySelector('.box')
    let boxText = box.innerHTML
    
    //"测试文字"
    boxText.substring(0, 4)
    boxText.substring(4, 0) 
     
    //"测试文字苹果香"
    boxText.substring(0,7)
    boxText.substring(4, 0) 
    
    //"测试文字苹果香蕉"
    boxText.substring(0, 8)
    boxText.substring(0, 999) 
      
    // ""
    boxText.substring(3,3)
    </script>
    

    返回值

    截取下来的字符串

    String.prototype.substring() – JavaScript | MDN

    slice()

    语法

    str.slice(beginIndex[, endIndex])
    
    • 返回的字符串也是包含初始值的那个字符,不包含结束值的那个字符
    • slice参数可以是负值,而substring不支持
    • substring的start和end位置调换也没关系,规则是由数值小的位置到数值大的位置,而slice则不行!

    slice()和substring() – 罗颖峰 – 博客园

    var str = 'The morning is upon us.';
    str.slice(-3);     // 返回 'us.'
    str.slice(-3, -1); // 返回 'us'
    str.slice(0, -1);  // 返回 'The morning is upon us'
    

    #给_slice()_传入负值索引

  • input标签的属性

    <input>常用type

    默认类型为 text

    Type描述
    button没有默认行为的按钮,上面显示 value 属性的值,默认为空
    checkbox复选框
    color用于指定颜色的控件;在支持的浏览器中,激活时会打开取色器
    radio单选按钮,允许在多个拥有相同 name 值的选项中选中其中一个
    file让用户选择文件的控件。使用 accept 属性规定控件能选择的文件类型。
    hidden不显示的控件,其值仍会提交到服务器
    image带图像的 submit 按钮.显示的图像由 src 属性规定。如果 src 缺失,alt 属性就会显示。
    password密码框
    search输入文本中的换行会被自动去除

    #<input>_types

    <input>常用属性

    属性描述
    checked用于控制控件是否被选中
    disabled表单控件是否被禁用
    maxlengthvalue 的最大长度(最多字符数目)
    nameinput 表单控件的名字。以名字/值对的形式随表单一起提交
    placeholder当表单控件为空时,控件中显示的内容
    required必填项

    #属性

  • 正则表达式

    创建正则语法

    let 变量名 = /表达式/

    其中 / / 是正则表达式的字面量

    判断是否是有符合规则的字符串

    test(): 用来查看字符串是否符合正则规则

    • 是符合,返回true
    • 不符合,返回false

    语法:正则表达式.test(被检测的字符串)

    检索(查找)符合规则的字符串

    exec(): 在字符串中搜索匹配的字符串部分

    语法:正则表达式.exec(被检测字符串)

    • 如果匹配成功,则返回一个数组
    • 如果匹配失败,则返回一个null
    let str = '我是测试文字'
    let reg = /文/
    let result = reg.exec(str)
    console.log(result) // 返回的是一个数组
    

    替换字符串

    replace()

    //要替换的字符串.replace(正则表达式,替换的内容)
    let str = '我是谁 你是谁 他是谁'
    let reg = /谁/g
    console.log(str.replace(reg, '你'))
    //我是你 你是你 他是你
    

    #使用正则表达式

    元字符

    有特殊含义,可以匹配更多规则,如:/[a-z]/

    #使用特殊字符

    边界符

    表示位置,开头和结尾,必须用什么开头,用什么结尾

    边界符含义
    ^匹配输入的开始。
    $匹配输入的结束。

    ^ 作为第一个字符出现在一个字符集合模式时,它将会有不同的含义.

    注意点:^$一起使用时,表示精准匹配,从头到尾都要符合,常用语表单校验

    量词

    表示重复次数

    量词含义
    *重复零次或更多次>=0
    +重复一次或更多次>=1
    ?重复0次或1次 0 || 1
    {n}重复n次==n
    {n,}重复n次或更多次>=n
    {n,m}重复n到m次n <= 次数 <= m

    注意点: 逗号左右两侧不能出现空格

    字符类

    特定的字符表示特定的匹配规则

    • [xxx] 只要字符串中有[]其中任何一个字符,就匹配成功
    console.log(/[abc]/.test('andy')) //a
    console.log(/[abc]/.test('baby')) //b
    
    • [] 里面有中划线 - ,表示一个范围 只要字符串的其中一个符合范围,就匹配成功
    [0-9] :0~9的范围
    [a-z] :a~z的范围
    [A-Z] :A~Z的范围
    [0-9a-zA-Z] :0~9 + a~z + A~Z 的范围
    
    • [] 里面有一个^表示取反 只有字符串中有一个符合范围,就匹配成功
    [^abc] :除了abc以外的字符
    
    • . 匹配除换行符以外的任何单个字符(如果加了s标志则可以匹配换行符)
    console.log(/.b/.test('abc')) //ab
    console.log(/.i/.test('liao')) //li
    

    注意点:换行符指的是js字符串中的换行,是\n,不是<br>

    预定义类

    预定义类含义
    \d匹配0-9的任意数字,相当于[0-9]
    \D匹配0-9以外的字符,相当于[^0-9]
    \w匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]
    \W除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]
    \s匹配不可见字符,如:空格、换行\n、制表符tab \t
    \S匹配可见字符

    #预定义类

    修饰符(标志)

    语法:/表达式/修饰符

    标志描述
    g全局搜索
    i不区分大小写搜索
    s允许 . 匹配换行符
    console.log(/a/g.test('banana')) //a
    
    console.log(/a/i.test('A')) //A
    
    console.log(/a./s.test('ba na na')) //a空格
    

    #通过标志进行高级搜索

    详细内容请前往正则表达式 – JavaScript | MDN