Day52.JavaScript、对象|数组、JSON、DOM操作、正则RegExp

目录

一、JavaScript

(1).JavaScript的基本语法

(2).JavaScript数据类型

(3).函数(重点)

(4).对象(重点)

(5).数组(重点)

数组常用函数

二、JSON(重点)

JSON对象和JSON字符串互转

三、JavaScript的DOM

DOM操作 (节点查询、增删改)

四、JavaScript的事件驱动(很重要)

五、正则表达式(RegExp)


一、JavaScript

在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。Netscape在最初将其脚本语言命名为LiveScript,因为Netscape与Sun合作,网景公司管理层希望蹭Java的热度,因此取名为JavaScript。

JavaScript总共分成三部分: ECMAScript(基本语法)、BOM(浏览器对象模型)、DOM(文档对象模型)

  • 基于对象

JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。但是面向对象的三大特性:『封装』、『继承』、『多态』中,JavaScript能够实现封装,可以模拟继承,不支持多态,所以它不是一门面向对象的编程语言。

  • 事件驱动

JavaScript是一种采用事件驱动的脚本语言,它不需要经过Web服务器就可以对用户的输入做出响应

  • 弱类型

JavaScript中也有明确的数据类型,但是声明一个变量后它可以接收任何类型的数据,并且会在程序执行过程中根据上下文自动转换类型。(万事万物皆可var) 

  • 跨平台性

JavaScript脚本语言不依赖于操作系统,仅需要浏览器的支持。因此一个JavaScript脚本在编写后可以带到任意机器上使用,前提是机器上的浏览器支持JavaScript脚本语言。目前JavaScript已被大多数的浏览器所支持

关键字:

(1).JavaScript的基本语法

JavaScript的引入方式

① 内部脚本方式(内部书写)

        <script></script> 放到<//body> 写到结束标签的上面

② 外部脚本方式(引入外部文件)

        <script src="外部标签地址"></script> 写到head中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS的引入方式</title>
    <!--
        建议在head中引入外部的js文件
    -->
    <script src="../js/outer.js"></script>
</head>
<body>

    <!--
        第一种引入方式: 内部引入方式,在HTML文档内部,通过script标签去编写js代码
    -->
    <!--
        第二种引入方式: 外部引入方式,在当前项目中创建一个js文件,然后在需要引入的HTML里面使用script标签引入
        一个script标签要么负责编写内部的js代码,要么负责引入外部的js文件
    -->
    <script type="text/javascript">
        //调用外部js文件中的方法
        showMessage();
        alert("hello world");
    </script>
</body>
</html>

语法规范

1.可以不写分好,但是建议补充完整;

2.所有标点符号 英文半角

3.严格区分大小写

4.使用了未初始化变量 值是 undefined

5.使用了未声明的变量 会报错  “ncaught ReferenceError: z is not defined

(2).JavaScript数据类型

  • 关键字:var,其实ECMAScript6之后建议使用let
    数据类型:JavaScript变量是弱类型的,可以接收任意类型的数据

  • 基本数据类型

    • 数值型(number):整数、小数,NaN (number与undefined做运算时)

    • 字符串(string):JavaScript不区分字符、字符串;

    • 布尔型(boolean):true、false

      在JavaScript中,其他类型和布尔类型的自动转换。

      表示true:非零的数值,非空字符串,非空对象

      表示false:false、零,空字符串"",null,undefined、NaN

      例如:"false"放在if判断中

    • 不明确的(undefined):未赋值的变量

    • 空值 null:空值,object类型

<body>
<h1>基本数据类型</h1>
<script>
//Ctrl + Shift + J 浏览器快速打开控制台
    /*
    number: 数值型 小数 整数
     */
    //声明数值类型的变量
    console.log("------------- number -------------");
    var i = 10;
    var d = 3.14;
    //快速打印 i.log; console:控制台 log:日志
    console.log(i);
    console.log(d);
    //判断类型
    console.log(typeof i);

    console.log("------------- string -------------");
    //字符串类型
    var s1 = '你好世界';
    console.log(s1);
    var s2 = "你好世界";
    console.log(s2);

    console.log(typeof s1);
    console.log(typeof s2);

    alert(s1);

    //var s2 = 'Hello';
    //console.log(s2);    //Js轻易不报错

    console.log("------------- boolean -------------");
    //布尔
    var b = true;
    console.log(b);
    console.log(typeof b);

    var b1 = false;
    console.log(b1);
    console.log(b1.valueOf())

    console.log("------------- undefined -------------");
    //undefined 一个类型
    var c;
    console.log(c); //不会报错,undefined
    console.log(typeof c) //undefined

    //使用未声明变量 报错: ncaught ReferenceError: z is not defined
    //console.log(z); //会报错
    //如果上面的JS出现问题,则下面的代码不再执行

    console.log("------------- null -------------");

    var n = null;
    console.log(n);
    console.log(typeof n)   //object

    console.log("------------- NaN -------------");

    //not a number;
    var m; //undefined 在和数值做运算时,结果为NaN
    var sum = 1+3+m;
    console.log(sum);
    console.log(sum.valueOf())  //NaN:number类型
</script>
</body>
  • 引用数据类型

    • 所有new出来的对象

    • 用 [] 声明的数组

    • 用 {} 声明的对象

(3).函数(重点)

① 内置函数:系统定义好的函数

  • 弹出警告框

<script>   alert("警告框内容");  </script>
  • 弹出确认框 返回布尔值  确认:true 取消:false

<script> var result = confirm("确定要删除吗?"); </script>
  • 信息输入框 返回string类型

<script>  var s = prompt("请您输入年龄",30); //默认值30  </script>
<script>
  /*
  内置函数: 系统定义好的函数 Ctrl + Shift +j
   */
  //提示框
  alert("你好 世界");

  //确认框: 确定 true 取消 false
  var b = confirm("确定退出吗?");
  console.log(b);

  //信息输入框 prompt
  //方式2 加入默认值
  var s2 = prompt("请您输入年龄",30);
  console.log(s);
</script>

猜数字游戏 — 通过使用 Math、random、确认框、流程控制语句

<script>
    /*m 较小的数 n 较大的数 取值范围[m,n]
    Math.floor(Math.random()*(n-m+1)+m)  //floor 向下取整*/

    var number = Math.floor(Math.random()*(100-0+1)+0);
    console.log(number);

    var n;
    while (true){
        n = prompt("请输入您的幸运数字:");
        if(n<number){
            alert("小了!")
        }else if(n>number){
            alert("大了!")
        }else{
            alert("恭喜您,幸运数字为"+n);
            break;
        }
    }
</script>

② 自定义的函数 :声明函数

方式1:

<script>  
function sum(a, b) { 
return a+b; 
}  </script>

方式2: 

<script>  
var f2= function() { 
alert("f2 函数执行了")
};  
</script>

注意:

1.如果函数需要返回值,在底部return即可。

2.实参的数量可以和形参不一致,没有赋值的形参 值为 undefined

3.如果函数没有返回值,使用变量接收函数执行结果,值为 undefined

4.js没有函数重载 如果函数名相同,调用最下面的函数

<script>
    //函数的声明
    function f1(){
    //alert("f1 函数执行了")
    }

    //函数调用
    f1();

    //函数声明2: 将函数赋值给f2
    var f2 = function(){
    //alert("f2 函数执行了")
    }
    f2();

    console.log("----------带参数的声明----------")

    //带参数的函数
    function sum(a,b){  //var
      console.log(a);
      console.log(b);
      console.log(a+b);
    }
    sum(30,40);   //70
    sum(20);  //b:undefined 只声明未赋值  a+b:NaN


    console.log("----------带返回值的声明----------")

    function getName(a,b){
      console.log(a);
      console.log(b);
      console.log(a+b);
      return "安其拉";     //需要返回,加return 默认返回undefined
    }
    var name = getName("李白","杜甫");
    console.log(name);

</script>

应用:判断一个数是否为质数 (求1-100内质数)

<script>
    //判断一个数是否为质数
    var num = prompt("请输入数字");
    myfc(num);

    function myfc(num){
        var flag = true;
        for (let i = 2; i <= Math.sqrt(num); i++) {
            if(num%i==0){
                flag = false;
        };

        if(flag){
           return alert(num+"是质数");
        }else {
           return alert(num+"不是质数");
        }
    };
</script>

<script>
    //通过方法求1-100质数
    for (let i = 1; i <= 100; i++) {
        var r =myfc(i);
        if(r){
            console.log(i);
        }
    };

    function myfc(num){
        var flag = true;
        for (let i = 2; i <= Math.sqrt(num); i++) {
            if(num%i==0){
                flag = false;
            };
        };
        if(flag) {
            return true;
        }else {
            //console.log(num + "不是质数");
        };
    };
</script>

(4).对象(重点)

JavaScript中没有『类』的概念,对于系统内置的对象可以直接创建使用。

① 使用new关键字创建对象

<script>
    //创建对象方式1:
    var obj = new Object();
    console.log(obj);
    console.log(typeof obj);

    //给对象添加属性
    obj.username = "张三";
    obj.password = "123456";

    //获取对象属性
    console.log(obj.username);
</script>

② 使用{}创建对象(常用)

<script>
    //创建对象方式2
    var obj1 = {
        "uname":"李白",
        pwd:"123",
        "height":1.78,
        //对象内的函数
        "sleep":function (){
            console.log("睡觉...")
        }
    };
</script>
    //获取函数
    obj1.sleep();

④ this关键字

  • 在函数外面:this关键字指向window对象(代表当前浏览器窗口)

  • 在函数里面:this关键字指向调用函数的对象

<script>
    //函数外this:窗体对象 window
    console.log(this);
    function getName(){
        console.log("getName执行了")
        console.log(this.uname);    //在函数内 谁调用就是谁
    }
    var obj1 = {
        "uname":"李白",
        "height":1.87,
        "get":getName   //属性get 属性值引用getName方法
    }

    var obj2 = {
        "uname":"杜甫",
        "weight":65.5,
        "get":getName
    };
    //console.log(obj1);
    obj1.get(); //李白
    obj2.get(); //杜甫

    console.log("---------------------");
    //关于引用传递
    function change(o){
        o.uname="安其拉"
    }
    var obj3 = {
        "uname":"王安石",
        "height":1.87
    }
    console.log(obj3);  //王安石
    change(obj3);
    console.log(obj3);  //安其拉
</script>

(5).数组(重点)

① 创建数组

<script>
    //创建数组
    var arr1 = new Array();
    //添加数据
    arr1.push(1);
    arr1.push(10);
    arr1.push("你好");
    arr1.push("世界");

    //可变形参
    arr1.push(100,1000,'张三');
    console.log(arr1);

    //创建数据2
    var arr2 = new Array("张三","李四","王五",10);

    console.log(arr2);

    //创建数组3
    var arr3 = ["Bob","jim","marray"];
    console.log(arr3);
</script>

数组遍历

<script>    
    //数组遍历
    var arr = ["张三","李四","王五","赵六"];
    console.log(arr.length);    //获取数组长度

    //访问数组元素,下标从开始
    for (var i = 0; i < arr.length; i++) {
        console.log(arr[i]);
    };
    // v:数组元素
    console.log("--------------------");
    arr.forEach(function (v){
        console.log(v);
    })
  /*v:数组元素
    i:元素对应下标*/
    arr.forEach(function (v,i){
        console.log(v+"--->"+i);
    });
</script>

数组常用函数

splice: 切割(开始删除的下标,删除的数量)

slice: 获取数组内指定范围数据 [开始下标,结束下标) 左闭右开

join:将数组元素按照指定的分隔符拼接到一起

<script>

    var arr = ["张三","李四","王五","赵六"];
    //js数组长度可变
    console.log(arr);
    arr.length=3;        //设置数组长度为3
    console.log(arr);

    var arr1 = ["Bob","Jim","Marry","Jim"];

    //join:将数组元素按照指定的分隔符拼接到一起
    arr1.join("-");
    console.log(arr1);

    //indexOf:返回指定元素第一次、最后一次出现的下标
    var indexOf = arr1.indexOf("Jim");
    console.log(indexOf);

    var number = arr1.lastIndexOf("Jim");
    console.log(number);

    //reverse:反转数组
    arr1.reverse();
    console.log(arr1);  //['Jim', 'Marry', 'Jim', 'Bob']

    //splice: 切割(开始删除的下标,删除的数量)
    //arr1.splice(1,2);
    console.log(arr1);

    //slice: 获取数组内指定范围数据 [开始下标,结束下标) 左闭右开
    var arr3 = ["张三","李四","王五","赵六"];
    
    var strings = arr3.slice(1,3);
    console.log(strings);

</script>

二、JSON(重点)

json (JavaScript Object Notation) 是一种数据格式,在开发中凡是涉及到『跨平台数据传输』,JSON格式一定是首选。JS 对象简谱。

<script>
    json:数据格式
        json对象{"key":"value"}
        json数组[{"key":"value"},{"key":"value"}]
</script>

JSON嵌套

<script>
console.log("---------- json对象 ----------")
    //json对象1
    var json1 = {
        "usname":"李白",
        "height":"1.87",
        "sex":"男",
    }

    //json对象2 对象套对象
    var json2 = {
        "usname":"杜甫",
        "height":"1.76",
        "sex":"男",
        "wife":{    //嵌套
            "uname":"杜甫媳妇",
            "height":"1.69",
            "sex":"女",
        }
    }
    //获取杜甫媳妇的名字
    console.log(json2.wife.uname);
</script>
<script>
    var json3 = {
            "uname":"王安石",
        "height":"1.75",
        "sex":"男",
        "wife":{ //王安石的媳妇
            "uname":"王翠花",
            "height":"1.73",
            "sex":"女",
        },
        "sons":[ //王安石的儿子们
            {
                "sname":"王1",
                "sheight":"1.65",
                "ssex":"男",
                "hobby":["琴","棋","书","画"]
            },
            {
                "sname":"王大拿",
                "sheight":"1.55",
                "ssex":"男",
                "hobby":["抽烟","喝酒","烫头"]
            },
        ]
    };

    //遍历王安石的儿子们
    var sons = json3.sons;
    sons.forEach(function (value){
        console.log(value);
        //获取他们的爱好
        var hobby = value.hobby;
    });
</script>

JSON对象和JSON字符串互转

JSON.stringify()   JSON.parse(str)

<script>
    console.log("-------------- jons对象转为 字符串 --------------")
    var jsonObj = {
        "uname":"张三",
        "height":"1.76",
        "sex":"男"
    }
    //JSON.stringify json对象转字符串
    let s = JSON.stringify(jsonObj);
    console.log(s);

    //Ctrl + R 快速换名
    

    console.log("-------------- 字符串转为 jons对象 --------------")

    //注意 json格式字符串 key value必须采用双引号包裹
    var str = '{"uname":"张三","height":"1.76","sex":"男"}';
    // JSON.parse
    var obj = JSON.parse(str);
    console.log(obj);

</script>

三、JavaScript的DOM

DOM是Document Object Model的缩写,意思是『文档对象模型』——将HTML文档抽象成模型,再封装成对象方便用程序操作。

DOM树的概念

浏览器把HTML文档从服务器上下载下来之后就开始按照『从上到下』的顺序『读取HTML标签』。每一个标签都会被封装成一个『对象』。

而第一个读取到的肯定是根标签html,然后是它的子标签head,再然后是head标签里的子标签……所以从html标签开始,整个文档中的所有标签都会根据它们之间的『父子关系』被放到一个『树形结构』的对象中。

这个包含了所有标签对象的整个树形结构对象就是JavaScript中的一个可以直接使用的内置对象:document

例如,下面的标签结构:

会被解析为:

 

各个组成部分的类

整个文档中的一切都可以看做Node。各个具体组成部分的具体类型可以看做Node类型的子类。

组成部分

节点类型

具体类型

整个文档

文档节点

Document

HTML标签

元素节点

Element

HTML标签内的文本

文本节点

Text

HTML标签内的属性

属性节点

Attr

注释

注释节点

Comment

父子关系:

前辈后代关系:

DOM操作 (节点查询、增删改)

由于实际开发时基本上都是使用JavaScript的各种框架来操作,而框架中的操作方式和我们现在看到的原生操作完全不同,所以下面罗列的API仅供参考,不做要求。

① 在整个文档范围内查询元素节点

功能

API

返回值

根据id值查询

document.getElementById(“id值”)

一个具体的元素节

根据标签名查询

document.getElementsByTagName(“标签名”)

元素节点数组

根据name属性值查询

document.getElementsByName(“name值”)

元素节点数组

根据类名查询

document.getElementsByClassName("类名")

元素节点数组

<body>

<input type="text" value="111" id="in1" name="uname"> <br>
<input type="text" value="222" id="in2"> <br>
<input type="text" value="333" id="in3"> <br>
<input type="text" value="444" name="uname"> <br>

<script>
    //通过id值获取页面元素
    let byId = document.getElementById("in1");
    console.log(byId);
    console.log(byId.value);

    //通过标签名获取 获取当前页面 指定的标签元素
    let byTagName = document.getElementsByTagName("input");
    console.log(byTagName);

    //通过类名获取 获取当前页面所有指定的类名元素
    var byClassName = document.getElementsByClassName("in2");
    console.log(byClassName);

    //通过name获取
    let byName = document.getElementsByName("uname");
    console.log(byName);

</script>

</body>

②属性操作

测试:

<body>
<a href="http://www.baidu.com" id="a1">百度一下</a>
<br>
<button onclick="change()">点我变为神秘网站</button>

<div id="box">
    <p>今天是个好日子</p>
</div>

<script>

    function change() {
        //1.获取要更改的标签
        var aElement = document.getElementById("a1");
        //2.让属性=值 更改属性值 此时会将百度改为bilibili
        aElement.href='https://www.bilibili.com/';

        //获取属性值
        console.log(aElement.href);
    }

    console.log("--------------------获取数据-----------------------");
    //获取id名为 box的div
    var box = document.getElementById("box");
    //只获取文本内容
    var innerText = box.innerText;
    console.log(innerText);
    // <p>今天是个好日子</p> 获取了整个内容
    var innerHTML = box.innerHTML;
    console.log(innerHTML);

    console.log("--------------------填充数据-----------------------");

    //box.innerText='<h1>6666</h1>'; 不会解析html标签
    box.innerHTML='<h1>6666</h1>'; //会解析html标签
    
</script>

</body>

③在具体元素节点范围内查找子节点

功能

API

返回值

查找子标签

element.children

返回子标签数组

查找第一个子标签

element.firstElementChild

标签对象

查找最后一个子标签

element.lastElementChild

节点对象

④ 查找指定元素节点的父节点

功能

API

返回值

查找指定元素节点的父标签

element.parentElement

标签对象

⑤ 查找指定元素节点的兄弟节点

功能

API

返回值

查找前一个兄弟标签

node.previousElementSibling

标签对象

查找后一个兄弟标签

node.nextElementSibling

标签对象

标签体的操作

需求

操作方式

获取或者设置标签体的文本内容

element.innerText

获取或者设置标签体的内容

element.innerHTML

⑦DOM增删改操作

API

功能

document.createElement(“标签名”)

创建元素节点并返回,但不会自动添加到文档中

document.createTextNode(“文本值”)

创建文本节点并返回,但不会自动添加到文档中

element.appendChild(ele)

将ele添加到element所有子节点后面

parentEle.insertBefore(newEle,targetEle)

将newEle插入到targetEle前面

parentEle.replaceChild(newEle, oldEle)

用新节点替换原有的旧子节点

element.remove()

删除某个标签

<body>
<div id="box">
    <p id = "p1">111</p>
    <p id = "p2">222</p>
    <p id = "p3">333</p>
    <p id = "p4">444</p>
</div>
<script>
    console.log("------------ 添加节点 ------------")
    //1.创建节点
    let newP = document.createElement("p");
    newP.innerHTML="我是新的p标签";

    //2.获取当前box节点,尾部追加
    let boxDiv = document.getElementById("box");
    //boxDiv.appendChild(newP);

    //3.插入到指定节点前面
    var p3 = document.getElementById("p3");
    boxDiv.insertBefore(newP,p3)
    console.log("------------ 删除节点 ------------")

    let p4 = document.getElementById("p4");
    //删除p4的节点
    p4.remove();
    //删除p4的父节点
    //p4.parentElement.remove();
</script>
</body>

四、JavaScript的事件驱动(很重要)

① 事件的概念

  • HTML 事件是发生在 HTML 元素上的“事情”, 是浏览器或用户做的某些事情

  • 事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行。

② 常见事件

属性

此事件发生在何时...

onclick

当用户点击某个对象时调用的事件句柄。

ondblclick

当用户双击某个对象时调用的事件句柄。

onchange

域的内容被改变。

onblur

元素失去焦点。

onfocus

元素获得焦点。

onload

一张页面或一幅图像完成加载。

onsubmit

确认按钮被点击;表单被提交。

onkeydown

某个键盘按键被按下。

onkeyup

某个键盘按键被松开。

onmousedown

鼠标按钮被按下。

onmouseup

鼠标按键被松开。

onmouseout

鼠标从某元素移开。

omouseover

鼠标移到某元素之上。

onmousemove

鼠标被移动。

③ 事件绑定的方式

<!--方式1,操作页面设置属性-->
<button onclick="show()">点我</button>
<br>
<button id="btn">来啊</button>
<script>
    //事件: 操作页面元素想要做什么事情
    //事件绑定: 将一个事件与页面元素进行映射
    /*
    绑定事件的方式
        方式一: 页面元素开始标签内 事件名="函数"
        方式二: 获取页面元素
               对页面元素进行事件绑定*/
    function show(){
        alert("this is show()")
    }
    //方式二: 获取界面元素,绑定单击事件
    var btnElement = document.getElementById("btn");
    btnElement.onclick=function (){
        alert("this is 来啊 的效果");
    }

onload 加载完成事件: 页面加载完成之后,常用于做页面 js 代码初始化操作 
onclick 单击事件: 常用于按钮的点击响应操作。 
onblur 失去焦点事件: 常用用于输入框失去焦点后验证其输入内容是否合法。 
onchange 内容发生改变事件: 常用于下拉列表和输入框内容发生改变后操作 
onsubmit 表单提交事件: 常用于表单提交前,验证所有表单项是否合法

</script>

鼠标事件

<!--鼠标事件-->
<body>
<div id="box" onclick="f1()" ondblclick="f2()" onmousemove="f3()"
     onmousedown="f4()" onmouseup="f5()"></div>
<script>
    function f1(){
        console.log("鼠标被单击了")
    }
    function f2(){
        console.log("鼠标被双击了了")
    }
    function f3(){
        console.log("鼠标在移动")
    }
    function f4(){
        console.log("鼠标按下")
    }
    function f5(){
        console.log("鼠标抬起")
    }
</script>
</body>

文档事件

<body>
<!--获得焦点事件
onclick
        onblur: 光标在输入框内
        onfocus: 光标离开输入框
        onchange: 内容发生改变 触发onchange
-->
<input type="text" id="in1" onblur="b()" onfocus="f()" onchange="c(this)">
<script>
    function b(){
        console.log("失去焦点了");
    }
    function f(){
        console.log("获得焦点了");
    }
    function c(a){
        console.log("内容改变了");
        console.log(a);
        console.log(a.value);
    }
</script>

练习:动态表格

<body>
    <table border="1" width="400" style="text-align: center" id="tab">
        <tr>
            <th>序号</th>
            <th>用户名</th>
            <th>性别</th>
            <th>操作</th>
        </tr>
        <tr>
            <td>1</td>
            <td>张三</td>
            <td>男</td>
            <td><button onclick="del(this)">删除</button></td>
        </tr>
        <tr>
            <td>2</td>
            <td>热巴</td>
            <td>女</td>
            <td><button onclick="del(this)">删除</button></td>
        </tr>
    </table>
<div>
    序号: <input type="text" id="no" ><br>
    用户: <input type="text" id="uname"><br>
    性别: <input type="text" id="gender"><br>
    <button onclick="add()">添加</button>
</div>
    <script>
        //删除
        function del(ele){
            ele.parentElement.parentElement.remove()

            //第二种方式:event.target 拿到触发当前函数,获得this
        }
        //添加
        function add(){
            let no = document.getElementById("no");
            let uname = document.getElementById("uname");
            let gender = document.getElementById("gender");

            //2.创建一个tr元素对象表
            var tr = document.createElement("tr");

            let td1 = document.createElement("td");
            td1.innerText=no.value;
            let td2 = document.createElement("td");
            td2.innerText=uname.value;
            let td3 = document.createElement("td");
            td3.innerText= gender.value;
            //标签体操作,可以解析标签
            let td4 = document.createElement("td");
            td4.innerHTML="<button onclick=\"del(this)\">删除</button>"

            //3.将td添加到tr
            tr.append(td1,td2,td3,td4);
            console.log(tr);

            //4.获取当前表格,添加tr到末尾
            let tab = document.getElementById("tab");
            tab.appendChild(tr);

            //清空添加表单
            document.getElementById("no").value="";
            document.getElementById("uname").value="";
            document.getElementById("gender").value="";
        }
    </script>
</body>

五、正则表达式(RegExp)

常用方法 match 匹配、replace 替换、split 分割

i:忽略大小写 、g:全局匹配

<script>    
    var str = "Hello World GOOD";
    //匹配模式: g 全局匹配
    var reg = /o/g;
    var match = str.match(reg);
    console.log(match);//['o', 'o']

    //匹配模式: i 忽略大小写
    var reg1 = /o/ig; //全局忽略大小写匹配
    var match1 = str.match(reg1);
    console.log(match1);
</script>

创建与校验:

<script>
    var str = "a";
    //创建方式一: 对象方式
    var reg1 = new RegExp("a");
    //校验
    var b = reg1.test(str);
    console.log(b);//true


    //创建方式二: 变量形式
    var reg2 = /a/;

    let b1 = reg2.test(str);
    console.log(b1);//true
</script>

字符集合:

语法格式

示例

说明

[字符列表]

正则表达式:[abc] 含义:目标字符串包含abc中的任何一个字符 目标字符串:plain 是否匹配:是 原因:plain中的“a”在列表“abc”中

目标字符串中任何一个字符出现在字符列表中就算匹配。

[^字符列表]

[^abc] 含义:目标字符串包含abc以外的任何一个字符 目标字符串:plain 是否匹配:是 原因:plain中包含“p”、“l”、“i”、“n”

匹配字符列表中未包含的任意字符。

[字符范围]

正则表达式:[a-z] 含义:所有小写英文字符组成的字符列表 正则表达式:[A-Z] 含义:所有大写英文字符组成的字符列表

匹配指定范围内的任意字符。

元字符:

代码

说明

.

匹配除换行字符以外的任意字符。

\w

匹配字母或数字或下划线等价于[a-zA-Z0-9_]

\W

匹配任何非单词字符。等价于A-Za-z0-9_

\s

匹配任意的空白符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。

\S

匹配任何非空白字符。等价于\f\n\r\t\v。

\d

匹配数字。等价于[0-9]。

\D

匹配一个非数字字符。等价于0-9

\b

匹配单词的开始或结束

^

匹配字符串的开始,但在[]中使用表示取反

$

匹配字符串的结束

出现次数:

代码

说明

*

出现零次或多次

+

出现一次或多次

?

出现零次或一次

{n}

出现n次

{n,}

出现n次或多次

{n,m}

出现n到m次

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值