[Web] JavaScript——JavaScript简介

目录

一、JavaScript介绍

二、JS与HTML结合使用的方式

1、第一种

2、第二种

三、变量

1、变量和数据类型

2、关系与逻辑运算

四、数组

1、定义方式

2、使用方式

五、函数

1、函数的两种定义方式

2、隐形参数arguments

六、JS中的自定义对象

1、Object形式的自定义对象

2、{}花括号形式的自定义对象

七、事件

1、什么是事件?

 2、事件注册

3、onload事件

4、onclick事件

5、onblur事件

6、onchange事件

7、onsubmit事件

八、DOM模型

1、getElementById()

2、正则表达式对象

3、两种验证的提示方式

4、getElementsByName()

5、getElementsByTagName()

6、节点的常用属性和方法

7、createElement()


一、JavaScript介绍

JS语言主要是完成页面的数据验证。因此它运行在客户端,需要浏览器来解析执行JS代码。

JS是弱类型语言,Java是强类型语言。

弱类型:变量类型可变,前面赋值了整型,后面可以赋值为字符串。

var i;
i = 1;
i = "abc";

强类型:变量类型不可变,前面确定了整形,就只能是整型。

int i = 1;

特点:

  • 交互性(信息动态交互);
  • 安全性(不允许直接访问本地资源);
  • 跨平台性(只要是可以解析JS的浏览器都可以执行)。

二、JS与HTML结合使用的方式

1、第一种

在head或者body标签中,使用script标签定义JS代码。

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        // alert是JS提供的一个警告框函数,可以接收任意类型的参数,这个参数就是警告内容。
        alert("hello JS");
    </script>
</head>
<body>

</body>

2、第二种

使用script标签引入单独的JS代码文件。

JS文件:

alert("hello JS");

HTML文件:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="./js/test_01.js"></script>
</head>
<body>

</body>

注意:上面两种方法二选一,一个标签中不能两种方法都写上。

三、变量

1、变量和数据类型

(1)变量类型

  • 数值类型:number
  • 字符串类型:string
  • 对象类型:object
  • 布尔类型:boolean
  • 函数类型:function

(2)三种特殊值

  • undefined:未定义,变量未赋值时,默认值都是undefined;
  • null:空值;
  • NAN:Not a Number,非数值类型。

(3)例子

JS文件:

var i;
alert(i); // undefined

i = 12;
alert(typeof(i)); // number

i = "123";
alert(typeof(i)); // string

var a = 10;
var b = "abc";
alert(a * b); // NaN

a = 10;
b = "10";
alert(a * b); // 100

输出情况如注释所示,特别的是:数值与字符串相乘,若字符串是全数字,是可以得到正确答案的。

2、关系与逻辑运算

(1)关系运算

只需要知道与Java不一样的地方即可。

等于:==,会进行简单的字面上的比较
全等于:===,不仅比较字面,还会比较类型

看一个例子就能理解:

var a = 12;
var b = "12";
alert(a == b); // true
alert(a === b); // false

(2)逻辑运算

且运算:&&
    -- 当结果为真,返回最后一个表达式
    -- 当结果为假,返回第一个为假的

或运算:||
    -- 当结果为真,返回第一个为真的
    -- 当结果为假,返回最后一个表达式

非(取反)运算:!

在 JS 中,所有变量,都可以作为一个 boolean 类型去使用。其中,0、null、undefined、""(空串)都认为是 false 。

var a = 0;
if (a) {
    alert("true");
} else {
    alert("false"); // false
}

四、数组

1、定义方式

var 数组名 = []; // 空数组
var 数组名 = [1, 'abc', true]; // 定义的同时赋值

2、使用方式

JS中的数组,只要通过数组下标赋值,那么最大的下标值,就会自动的给数组进行扩容。并且中间没有赋值的下标,显然他们的值是undefined。

(注意,只有赋值的时候才会扩容,读操作只会得到undefined)

var a = [];
alert(a.length);

a[0] = 12;
alert(a.length);

a[2] = 13;
alert(a.length)

for (var i = 0; i < a.length; ++ i) { // 注意这里是var,不是int
    alert(a[i]);
}

alert(a[10]); // 不会扩容

五、函数

1、函数的两种定义方式

(1)使用function关键字定义

function 函数名(argument list) {
    statement
}

 例子:

function func1() {
    alert("无参函数");
}

function func2(a, b) {
    alert("有参函数不用写类型,a = " + a + ",b = " + b);
}

func1();
func2(1, 2);

function func3(a, b) {
    var res = a + b;
    return res;
}

alert(func3(1, 2));

(2)使用var来定义函数

var 函数名 = function(argument list) {
    statement
}

例子: 

var func1 = function(a, b) {
    var res = a + b;
    return res;
}

alert(func1(1, 2));

需要注意的是:JS是不允许函数重载的,同名函数只有最后一个有效。

2、隐形参数arguments

对于没有参数列表的函数,依旧可以传递参数,这是因为JS提供了隐形参数列表arguments,传递的参数全都放到arguments中。其操作类似数组。

var func1 = function(a, b) {
    alert(arguments.length);
    var res = 0;
    for (var i = 0; i < arguments.length; ++ i) {
        if (typeof(arguments[i]) == "number")
            res += arguments[i];
    }
    alert(res);
}

func1(1, 2, 3, 4, 5, "abc");
//输出:6 15

六、JS中的自定义对象

1、Object形式的自定义对象

(1)定义

var 变量名 = new Object();   // 对象实例(空对象)
变量名.属性名 = 值;           // 定义一个属性
变量名.函数名 = function() {  // 定义一个函数
    statement
}

(2)调用

变量名.属性名 / 函数名();

 (3)例子:

var obj = new Object();
obj.name = "www";
obj.age = 18;
obj.func1 = function(a, b) {
    alert(a + b);
    alert("name is " + this.name + " age is " + this.age);
}

obj.func1(1, 2);

2、{}花括号形式的自定义对象

(1)定义

var 变量名 = {
    属性名 : 值,
    属性名 : 值,
    函数名 : function() {
        statement    
    }
};

(2)例子:

var obj = {
    name:"www",
    age:18,
    func1:function() {
        alert("name is " + this.name + " age is " + this.age);
    }
};

obj.func1();

七、事件

1、什么是事件?

事件就是电脑设备与页面进行交互的响应。

常用的事件有:

  • onload:加载完成事件;浏览器自动执行, 常用于JS代码的初始化
  • onclick:单击事件;常用于按钮的点击响应事件
  • onblur:失去焦点事件;常用于输入框失去焦点后,验证内容是否合法
  • onchange:内容改变事件;常用于下拉列表和输入框内容发生改变后的操作
  • onsubmit:表单提交事件;常用于表单提交时,验证所有表单项是否合法

 2、事件注册

事件的注册(绑定)就是,告诉浏览器,当事件响应后要执行什么操作。有两种方式:

(1)静态注册

通过HTML标签的事件属性直接赋予事件响应后的代码。

(2)动态注册

先通过JS代码得到标签的dom对象,再通过

dom对象.事件名 = function() {}

这种形式赋予事件响应后的代码。

3、onload事件

(1)静态注册

JS文件:

function onloadFun() {
    alert("静态注册onload事件");
}

HTML文件:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="./js/test_01.js"></script>
</head>
<body onload="onloadFun()">

</body>

(2)动态注册

JS文件:

window.onload = function() {
    alert("动态注册onload");
}

HTML文件:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="./js/test_01.js"></script>
</head>
<body>

</body>

4、onclick事件

JS文件:

var onclickFunc = function() {
    alert("静态注册onclick事件");
}

window.onload = function() {
    // 1.获取标签对象
    /*
        document是JS提供的一个对象(文档),代表的就是HTML这整个页面
    */
    var btnObj = document.getElementById("btn02");
    // 2.
    btnObj.onclick = function() {
        alert("动态注册onclick事件");
    }
}

HTML文件:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="./js/test_01.js"></script>
</head>
<body>
    <button onclick="onclickFunc()">按钮1</button>
    <button id="btn02">按钮2</button>
</body>

5、onblur事件

JS文件:

var onblurFunc = function() {
    // console是控制台对象,是JS提供专门用于向浏览器的控制台打印输出,用于测试。
    // log()是打印,相当于print
    console.log("静态注册onblur事件");
}

window.onload = function() {
    var pwObj = document.getElementById("password");
    pwObj.onblur = function() {
        console.log("动态注册onblur事件");
    }

}

HTML文件:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="./js/test_01.js"></script>
</head>
<body>
    用户名:<input type="text" onblur="onblurFunc();"> <br/>
    密码:<input type="text" id="password"> <br/>
</body>

6、onchange事件

JS文件:

var onchangeFunc = function() {
    alert("静态注册onchange事件");
}

window.onload = function() {
    var selectObj = document.getElementById("select");
    selectObj.onchange = function() {
        alert("动态注册onchange事件");
    }

}

HTML文件:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="./js/test_01.js"></script>
</head>
<body>
    <select onchange="onchangeFunc()">
        <option>--语言--</option>
        <option>--C/C++--</option>
        <option>--Java--</option>
        <option>--Python--</option>
    </select>

    <br/>

    <select id="select">
        <option>--语言--</option>
        <option>--C/C++--</option>
        <option>--Java--</option>
        <option>--Python--</option>
    </select>
</body>

7、onsubmit事件

JS文件:

var onsubmitFunc = function() {
    // 要验证所有表单项是否合法,如果有一个不合法,则阻止表单提交
    alert("静态注册onsubmit事件");
    return false;
}

window.onload = function() {
    var formObj = document.getElementById("submit");
    formObj.onsubmit = function() {
        alert("动态注册onsubmit事件");
        return false; // 注意要写在function里面
    }
}

HTML文件:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="./js/test_01.js"></script>
</head>
<body>
    <!--  return false 可以组织表单提交  -->
    <form action="http://localhost:8080" method="get" onsubmit="return onsubmitFunc()">
        <input type="submit" value="静态注册"/>
    </form> <br/>
    <form action="http://localhost:8080" method="get" id="submit">
        <input type="submit" value="动态注册"/>
    </form>
</body>

八、DOM模型

DOM全称是Document Object Model 文档对象模型。它将HTML文档中的标签、属性、文本,转换为对象进行管理。

  • Document管理所有的HTML文档内容;
  • Document是一种树型结构的文档,有层级关系;
  • Document把所有的标签都对象化;
  • 可以通过Document访问所有标签;

1、getElementById()

返回对拥有特定id的第一个对象的引用。因此要保证各标签id不同,否则查不到。

例子:实现输入字符串长度在5-12之间。

<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script type="text/javascript" src="./js/test_01.js"></script>-->
    <script type="text/javascript">
        var onclickFunc = function() {
            // 当要操作一个标签的时候,一定要先获取这个标签对象
            var usernameObj = document.getElementById("01");
            // [object HTMLInputElement] 它就是dom对象
            var usernameText = usernameObj.value;
            // 使用正则表达式验证字符串是否符合规则
            var patt = /^\w{5,12}$/; // 长度要在5-12
            // test() 用于测试字符串是否符合规则
            if (patt.test(usernameText)) {
                alert("用户名合法");
            } else {
                alert("用户名不合法");
            }
        }
    </script>
</head>
<body>
    用户名:<input type="text" id="01" value="default"/>
    <button onclick="onclickFunc();">验证</button>
</body>

对于输入的检测用到了正则表达式,接下来学习一下正则表达式。

2、正则表达式对象

语法

var patt = /正则表达式主体/;

或

var patt = new RegExp("正则表达式主体");

正则表达式可以是一个简单的字符,或一个更复杂的模式。

正则表达式可用于所有文本搜索和文本替换的操作。

例子

var patt = /^\w{5,12}$/;
  • ^s:表示以字符串s开头;
  • s$:表示以字符串s结尾;
  • \w:表示包含数字、字母或下划线的字符串;
  • s{a,b}:表示至少有a个连续的,且最多b个连续的s;

因此,上面的组合意思就是:以长度为5-12的包含数字、字母或下划线的字符串开头,以长度为5-12的数字、字母或下划线的字符串结尾,的字符串。

而如果没有^和$,就仅仅会去匹配最小条件,所以,当需要全局匹配时,必须加上^和$。

3、两种验证的提示方式

本质上就是通过修改标签的innerHTML属性,来替换原本HTML文档中的内容,达到不同的效果。

(1)修改文本

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        var onclickFunc = function() {
            var usernameObj = document.getElementById("01");
            var usernameText = usernameObj.value;

            var usernameSpanObj = document.getElementById("02");
            /*
            innerHTML表示起始标签和结束标签中的内容,这个属性可读可写
             */
            var patt = /^\w{5,12}$/;
            if (patt.test(usernameText)) {
                usernameSpanObj.innerHTML = "输入合法";
            } else {
                usernameSpanObj.innerHTML = "输入不合法";
            }
        }
    </script>
</head>
<body>
    用户名:<input type="text" id="01" value="default"/>

    <button onclick="onclickFunc();">验证</button> <br/>

    <span id="02" style="color: red">这里是被修改的文本</span>
</body>

(2)修改图片

<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script type="text/javascript" src="./js/test_01.js"></script>-->
    <script type="text/javascript">
        var onclickFunc = function() {
            var usernameObj = document.getElementById("01");
            var usernameText = usernameObj.value;

            var usernameSpanObj = document.getElementById("02");
            /*
            innerHTML表示起始标签和结束标签中的内容,这个属性可读可写
             */
            var patt = /^\w{5,12}$/;
            if (patt.test(usernameText)) {
                usernameSpanObj.innerHTML = "<img src=\"./src/right.jpg\" width=\"18\" height=\"10\"/>";
            } else {
                usernameSpanObj.innerHTML = "<img src=\"./src/wrong.jpg\" width=\"18\" height=\"10\"/>";
            }
        }
    </script>
</head>
<body>
    用户名:<input type="text" id="01" value="default"/>
    <button onclick="onclickFunc();">验证</button> <br/>
    <span id="02">
        <!-- 当检验后,这里将会被<img />替换 -->
    </span>
</body>

其中需要注意,双引号需要用转义字符,否则会将字符串断开。

4、getElementsByName()

注意到这里的elements是复数,因此返回的是带有指定名称的对象集合。操作与数组一致,元素顺序与HTML文档中从上到下的顺序一致。

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        var allSelect = function() {
            var hobbies = document.getElementsByName("hobby");
            for (var i = 0; i < hobbies.length; ++ i) {
                hobbies[i].checked = true;
            }
        }

        var noneSelect = function() {
            var hobbies = document.getElementsByName("hobby");
            for (var i = 0; i < hobbies.length; ++ i) {
                hobbies[i].checked = false;
            }
        }

        var reverseSelect = function() {
            var hobbies = document.getElementsByName("hobby");
            for (var i = 0; i < hobbies.length; ++ i) {
                if (hobbies[i].checked == false) hobbies[i].checked = true;
                else hobbies[i].checked = false;
            }
        }

    </script>
</head>
<body>
    兴趣爱好:
    <input type="checkbox" name="hobby" value="Cpp"/> C++
    <input type="checkbox" name="hobby" value="Java"/> Java
    <input type="checkbox" name="hobby" value="Python"/> Python
    <br/>
    <button onclick="allSelect();">全选</button>
    <button onclick="noneSelect();">全不选</button>
    <button onclick="reverseSelect();">反选</button>
</body>

5、getElementsByTagName()

与 getElementsByName() 类似,只不过是通过标签名获取集合。

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        var allSelect = function() {
            var hobbies = document.getElementsByTagName("input");
            for (var i = 0; i < hobbies.length; ++ i) {
                hobbies[i].checked = true;
            }
        }
    </script>
</head>
<body>
    兴趣爱好:
    <input type="checkbox" value="Cpp"/> C++
    <input type="checkbox" value="Java"/> Java
    <input type="checkbox" value="Python"/> Python
    <br/>
    <button onclick="allSelect();">全选</button>
</body>

6、节点的常用属性和方法

节点就是标签对象。

(1)方法function

  • getElementsByTagName()方法,获取当前节点的指定标签名的孩子节点(如上一个例子,就是在<body>下的<input>标签);
  • appendChild( oChildNode )方法,可以添加一个子节点,oChildNode是要添加的子节点;

(2)属性

  • childNodes,获取当前节点的所有子节点;
  • firstChild,获取当前节点的第一个子节点;
  • lastChild,获取当前节点的最后一个子节点;
  • parentNode,获取当前节点的父节点;
  • nextSibling,获取当前节点的下一个节点;
  • previousSibling,获取当前节点的上一个节点;
  • className,用于获取或设置标签的 class 属性值;
  • innerHTML,用于获取或设置起始标签和结束标签之间的内容;
  • innerText,用于获取或设置起始标签和结束标签之间的文本;

(3)例子

JS文件:

window.onload = function() {
    // 1.
    var btn01Obj = document.getElementById("btn_01");
    btn01Obj.onclick = function() {
        var beijing = document.getElementById("beijing");
        alert(beijing.innerHTML);
    }

    // 2.
    var btn02Obj = document.getElementById("btn_02");
    btn02Obj.onclick = function() {
        var li_list = document.getElementsByTagName("li");
        alert(li_list.length);
    }

    // 3.
    var btn03Obj = document.getElementById("btn_03");
    btn03Obj.onclick = function() {
        var name_list = document.getElementsByName("gender");
        alert(name_list.length);
    }

    // 4.
    var btn04Obj = document.getElementById("btn_04");
    btn04Obj.onclick = function() {
        var city_list = document.getElementById("city_List");
        var li_list = city_list.getElementsByTagName("li");
        alert(li_list.length);
    }

    // 5.
    var btn05Obj = document.getElementById("btn_05");
    btn05Obj.onclick = function() {
        var res = document.getElementById("city_List");
        alert(res.childNodes.length); // 结果是9,因为空白字符也算一个节点对象
    }

    // 6.
    var btn06Obj = document.getElementById("btn_06");
    btn06Obj.onclick = function() {
        alert(document.getElementById("Os_List").firstChild.innerHTML);
        // 从这个样例中可以验证“5.”,空白字符也算一个节点对象
        alert(document.getElementById("Os_List").childNodes[1].innerHTML);
    }

    // 7.
    var btn07Obj = document.getElementById("btn_07");
    btn07Obj.onclick = function() {
        alert(document.getElementById("beijing").parentNode.innerHTML);
    }

    // 8.
    var btn08Obj = document.getElementById("btn_08");
    btn08Obj.onclick = function() {
        alert(document.getElementById("Linux").previousSibling.innerHTML);
    }

    // 9.
    var btn09Obj = document.getElementById("btn_09");
    btn09Obj.onclick = function() {
        alert(document.getElementById("username").value);
    }

    // 10.
    var btn10Obj = document.getElementById("btn_10");
    btn10Obj.onclick = function() {
        document.getElementById("username").value = "设置了一个值";
    }

    // 11.
    var btn11Obj = document.getElementById("btn_11");
    btn11Obj.onclick = function() {
        alert(document.getElementById("beijing").innerText);
    }
}

CSS文件:

li {
    border:1px solid black;
    background-color: aquamarine;
    display: inline-block;
}

HTML文件:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" type="text/css" href="./css/test_04.css"/>
    <script type="text/javascript" src="./js/test_04.js"></script>
</head>
<body>
<div>
    <div class="option_List">
        你喜欢哪个城市?<br/>
        <ul id="city_List">
            <li id="beijing">北京</li>
            <li>上海</li>
            <li>广州</li>
            <li>深圳</li>
        </ul>

        <br/>你喜欢哪一款游戏?<br/>

        <ul id="game_List">
            <li>Apex Legend</li>
            <li>Warframe</li>
            <li>CS:GO</li>
            <li>Genshin Impact</li>
        </ul>

        <br/>你的PC机操作系统是?<br/>

        <ul id="Os_List">
            <li>Window</li><li id="Linux">Linux</li> <!-- 这里不要换行,测试用 -->
            <li>Mac</li>
        </ul>

    </div>
    <div class="userInfo">
        gender:
        <input type="radio" name="gender" checked="checked"/>Male
        <input type="radio" name="gender"/>Female<br/>

        username:
        <input type="text" name="name" id="username" value="admin"/><br/>
    </div>
</div>

<div id="btn_list">
    <div><button id="btn_01">查找#beijing节点</button></div>
    <div><button id="btn_02">查找所有Li节点个数</button></div>
    <div><button id="btn_03">查找name等于gender的所有节点</button></div>
    <div><button id="btn_04">查找city下的li节点</button></div>
    <div><button id="btn_05">查找city下的所有节点</button></div>
    <div><button id="btn_06">查找PC下的第一个子节点</button></div>
    <div><button id="btn_07">查找#beijing的父节点的内容</button></div>
    <div><button id="btn_08">查找#Linux的前一个兄弟节点</button></div>
    <div><button id="btn_09">获取#username的属性值</button></div>
    <div><button id="btn_10">设置#username的属性值</button></div>
    <div><button id="btn_11">获取#beijing的文本值</button></div>
</div>

</body>

7、createElement()

<head>
    <meta charset="UTF-8">
    <title>Title_02</title>
    <script type="text/javascript">
        window.onload = function() { // 一定要加载完页面后,再添加节点,否则找不到body
            // 创建一个div标签,并且显示到页面上
            var divObj = document.createElement("div");
            // 添加文本信息
            divObj.innerHTML = "这是一个文本信息";
            // 再body标签上添加这个div标签
            document.body.appendChild(divObj);

            //还有另一种写法
            /*
                var divObj = document.createElement("div");
                var textNodeObj = document.createTextNode("这是一个文本信息");
                divObj.appendChild(textNodeObj);
                document.body.appendChild(divObj);
             */
            
        }
    </script>
</head>
<body>

</body>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值