java之javascript基础

目录

前言

如何引入js脚本

js的数据类型

 null,undefined,NaN这几个关键字

关于js的一些变量命名,运算符,循环语句,函数,数组 

关于布尔类型值判断的问题

 Function函数对象

下面说一下window对象中open函数的用法

浏览器对象中Location对象的用法

javascript:void(0)的用法与含义

DOM文档对象模型关于结点值,结点类型获取问题

DOM文档对象模型之如何添加子结点,删除子结点

DOM增删该节点的具体操作

DOM控制元素样式

javascript中的正则表达式对象 

js中关于函数传参问题与变量是字符串的拼接问题


前言

        js的地位就不用说了,前端脚本之王,作为后端开发,也是一个必须了解掌握到的技术。

如何引入js脚本

        既然js是写前端的,那么js一定会和html标签搭配使用,下面给出html内部引入js代码的二种方式

        

js的数据类型

        这里将js与c语言、java语言的数据类型做一个对比。

        先来说一下c语言:

             

        再来说一下java语言的数据类型:

                 

        下面来说javascript的数据类型: 

         另外,Object,undefined也可以看成是js的数据类型,前者是对象类型,后者是未定义数据类型

         对于c语言与java语言来说,他们是强类型语言,在定义变量的时候,需要带上数据类型,比如int num =3;但是对于js来说,不用,它是弱类型语言,但是一般用var来声明一个变量,如果一个变量不用var声明就是全局变量,但是需要谨慎使用,容易引起程序结构性问题,还可以用const来声明一个变量,表明是一个常量。

 null,undefined,NaN这几个关键字

        在javascript中,有一个typeof运算符,用来测试变量的数据类型

        比如var num = 3;console.log(typeof(num)),这里就会在控制台打印number数据类型

        对于var num = nulll来说,他是object类型

        NaN:这是一个number类型,表明是一个非数字,同时NaN与任何数==、===都是false,可以通过isNaN函数判断是不是NaN

        undeifned就是undefined类型,这个表示未定义

关于js的一些变量命名,运算符,循环语句,函数,数组 

        能学到js,基础应该是有的,所以我这就不过多去阐述这些东西,可以直接去查w3c手册。

关于布尔类型值判断的问题

 <script type = "text/javascript">
        var num1 = NaN
        //NaN表示假
        if(num1) {
            document.writeln("NaN为真");
        } else {
            document.writeln("NaN为假");
        }
        document.writeln("<br/>")//在html文件中换行必须用这个<br/>标签
        var str1 = "";
        if(str1) {
            document.writeln("空字符串为真");
        } else {
            document.writeln("空字符串为假");
        }
        document.writeln("<br/>");
        var num2 = null;
        if(num2) {
            document.writeln("null为真");
        } else {
            document.writeln("null为假");
        }
        document.writeln("<br/>");
        var num3 = undefined;
        if(num3) {
            document.writeln("undefined为真");
        } else {
            document.writeln("undefined为假");
        }
    </script>

运行结果:

以上这些都表示为假的逻辑值

 Function函数对象

这里也就是说,如何来创建一个函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        var add = function(num1,num2) {
            return num1 + num2;
        }

        function minus(num1,num2,num3,num4) {
            return num1 - num2;
        }
        var value = add(1,2);
        var value1 = minus(1,2);
        alert(value + " " + value1);//3 -1

        //通过length获取形参个数,不是实际参数个数
        document.writeln(add.length + " " + minus.length);//2 4

        //这个arguments.length代表了实际传入参数个数
        //arguments是一个数组,代表实际传入参数个数
        function multi(num1,num2,num3,num4) {
            alert("参数个数" + arguments.length);//3
            for(var i = 0;i < arguments.length;i++) {
                //打印传入的参数
                document.writeln(arguments[i]);//1 2 3
            }
        }
        multi(1,2,3);//这里会弹出3
    </script>
</head>
<body>

</body>
</html>

下面说一下window对象中open函数的用法

1.自己设置一个窗口,并且设置窗口内容,然后来检测一下窗口的closed状态是否处于被关闭状态

<html>
<head>
<script type="text/javascript">
function ifClosed()
  {
  document.write("'myWindow' has been closed!")
  }

function ifNotClosed()
  {
  document.write("'myWindow' has not been closed!")
  }

function checkWin()
  {
  if (myWindow.closed)
    ifClosed()
  else
    ifNotClosed()
  }
</script>
</head>
<body>

<script type="text/javascript">
//省去了两个参数,第三个参数直接设置了窗口的大小
myWindow=window.open('','','width=200,height=100')
myWindow.document.write("This is 'myWindow'")
</script>

<input type="button" value="Has 'myWindow' been closed?" onclick="checkWin()" />

</body>
</html>

当然了,它还可以帮我们直接打开一个链接

浏览器对象中Location对象的用法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <input type = "button" id = "gobaidu" value = "去百度"  />

     <script>
         var obj = document.getElementById("gobaidu");
         obj.onclick=function () {
             //直接利用href属性帮我们跳转到一个链接
            location.href="https://www.baidu.com";
         }
     </script>
</body>
</html>

javascript:void(0)的用法与含义

 这两者有啥区别:

        1.前者不会整体刷新页面,后者会整体刷新页面

        2.后者会给我们抛出一个锚,然后跳转到网页的上端

DOM文档对象模型关于结点值,结点类型获取问题

先来看一下结点类型nodeType

顺便在说一下nodeName 

另外一个需要注意的是,html结构中的各种空格,换行符都可能会把文本节点当做同胞元素处理。这就会导致错误。 

下面看一个文档结构

然后我们来获取一下div1的firstChild的类型,弹出来是3,也就是文本结点

那我们把这个文档结构修改一下

这下弹出的又是1,属性结点了,换句话说,空格被当成了文本结点进行处理

那么针对于下面这个文档结构,想要获取div1的值怎么处理

首先拿到div1元素对象,然后firstChild是空格,那么它的兄弟结点nextSibling就是div2这个元素结点,那么再来调用一下nextSibling是不是就是div1这个文本结点了,在通过nodeValue属性就可以获取这个结点值了。

先来看这个为什么会弹出NULL

 然后继续看下面

 第一个弹出

上面还多了两个方法,一个是innerText,只弹出元素内部的值

只获取标签里面的值,不带标签元素

另外一个是innerHtml

把内部的标签元素也一起带上打印

DOM文档对象模型之如何添加子结点,删除子结点

 看一个图

上面就是div1这个盒子包含了div2这个盒子,我现在还想给div1这个盒子追加一个盒子div3,最后我们还要把它删除

这里就会用到这几个函数:

1.createElement("div") 创建元素结点

2.appendChild(结点对象) 把这个结点对象添加到调用者上 

3.removeChild(结点对象)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            border: 1px solid red;
        }

        #div1{
            width:200px;
            height:200px;
        }

        #div2{
            width:100px;
            height:100px;
        }

        #div3{
            width:100px;
            height:100px;
        }
    </style>
</head>
<body>
    <div id = "div1">
        <div id = "div2">
            div2
        </div>
        div1
    </div>
    <a href = "javascript:void(0);" id="add">添加子节点</a>
    <a href = "javascript:void(0);" id="del">删除子节点</a>
    <!--利用javascript来获取文本节点-->
    <script>

     var add = document.getElementById("add");
     add.onclick=function () {
         var div1 = document.getElementById("div1");
         var div3 = document.createElement("div");
         //还可以设置创建出来的节点属性
         div3.setAttribute("id","div3");
         div1.appendChild(div3);//追加为div1的一个孩子结点
     }

     //下面就是删除子节点
      var del = document.getElementById("del");
      del.onclick=function(){
          var div3 = document.getElementById("div3");
          var div1 = document.getElementById("div1");
          div1.removeChild(div3);
      }
    </script>
</body>
</html>

DOM增删该节点的具体操作

我们要做的是通过js来添加一个节点

这里要用到的东西就是

1.如何拿到input框里面的值,通过DOM中input对象的value属性获取

2.如何创建元素结点,文本结点,并把它俩作为子结点

createElement("td")

createTextNode(文本变量)

appendChild(元素)

因为这里面还涉及到超链接,就是一些属性的问题

还要用到

setAttribute("属性名",属性值)

另外我们还需要删除tr这个整体标签,那么就要知道它的父类,可能会用到

parentNode这个属性

好了直接上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table{
            border:1px solid;
            margin: auto;
            width:500px
        }
        td,th{
            text-align:center;
            border:1px solid;
        }
        div{
            text-align:center;
            margin:50px;
        }
    </style>
</head>
<body>
<div>
    <input type="text" id="id" value="请输入编号">
    <input type="text" id="name"  placeholder="请输入姓名">
    <input type="text" id="gender"  placeholder="请输入性别">
    <input type="button" value="添加" id="btn_add">

</div>

<table>
    <caption>学生信息表</caption>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>操作</th>
    </tr>

    <tr>
        <td>1</td>
        <td>令狐冲</td>
        <td>男</td>
        <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td>2</td>
        <td>任我行</td>
        <td>男</td>
        <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td>3</td>
        <td>岳不群</td>
        <td>?</td>
        <td><a href="javascript:void(0);" onclick="delTr(this);" >删除</a></td>
    </tr>

</table>

<script>
    //1.先把添加做了
    var add = document.getElementById("btn_add");
    //得到三个节点的值
    var id = document.getElementById("id").value;
    var name = document.getElementById("name").value;
    var gender = document.getElementById("gender").value;

    add.onclick=function () {

        //我们现在的目的是在td里面放数据
        var td_id = document.createElement("td");
        //创建文本节点
        var text_id = document.createTextNode(id);//传入是一个值
        //添加到td下面
        td_id.appendChild(text_id);

        //和上面类似
        var td_name = document.createElement("td");
        var text_id = document.createTextNode(name);
        td_name.appendChild(text_id);

        //和上面类似
        var td_gender = document.createElement("td");
        var text_gender = document.createTextNode(gender);
        td_gender.appendChild(text_gender);

        //注意还有一个删除的超链接节点
        var td_a = document.createElement("td");
        var a = document.createElement("a");
        var text_a = document.createTextNode("删除");
        a.appendChild(text_a);
        td_a.appendChild(a);
        //a这个超链接标签需要设置一些属性
        a.setAttribute("href","javascript:void(0)");
        a.setAttribute("onclick","delTr(this)");

        //创建节点
        var tr = document.createElement("tr");

        //需要把上面的td加到tr下面去
        tr.appendChild(td_id);
        tr.appendChild(td_name);
        tr.appendChild(td_gender);
        tr.appendChild(td_a);

        //获取table节点,然后把tr加上去
        var table = document.getElementsByTagName("table")[0];
        table.appendChild(tr);
    }

    //下面来做删除的部分(需要一个父节点来删除它的子节点)
   //删除是把这个节点对象给传进来了
    function delTr(obj) {
        //这里obj是a->td->tr->table这样才能找到父类table
        var table = obj.parentNode.parentNode.parentNode;
        var tr = obj.parentNode.parentNode;
        table.removeChild(tr);
    }

</script>
</body>
</html>

上面这个代码感觉写的有点长,下面提供一个更好的解决办法

add.onclick = function(){
        //下面我们换一种添加方法,使用innerHtml进行数据的添加
        table.innerHTML += "<tr>\n" +
            "        <td>"+id+"</td>\n" +
            "        <td>"+name+"</td>\n" +
            "        <td>"+gender+"</td>\n" +
            //双引号内部有双引号要进行转义
            "        <td><a href=\"javascript:void(0);\" onclick=\"delTr(this);\" >删除</a></td>\n" +
            "    </tr>";
    }

DOM控制元素样式

使用style属性来设置

div1.style.border = "1px solid red"

div1.style.fontSize(这里属性全部变成小驼峰不是以前的下划线font-size)

javascript中的正则表达式对象 

RegExp正则表达式一个缩写 

test()方法是用于判断是否符合正则要求

exec:查找找到的第一个匹配的正则表达式的值 

compile():用来改变正则表达式模式

js中关于函数传参问题与变量是字符串的拼接问题

比如这样一种情况,这是js的一个函数

这里是在页面加载完成之后会去调用的一个函数

 下面调用代码

中间做了一个缺省的值,也就是说currentPage做了一个null的默认,另外还有一个rname就是参数名字 

上面这个函数还有以下几种调用方式

下面再来说一下, 在对于html标签的拼接过程中,如果涉及到的是字符串类型的参数,在拼接的时候,就必须用双引号给引用起来

对于上面的参数来说,rname是一个字符串的类型,那么就必须用双引号

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值