本文需要你:
- 有一定的 Java 基础,大致了解面向对象编程的概念
- 有一定的 HTML 基础,了解标签、标签属性等概念
JavaScript介绍
JS 是弱类型,Java 是强类型。
什么是弱类型?
js定义的变量类型不强制确定,并可以更换,使用
var
声明:var x; x = 12; alert(x); // 这个函数的含义是输出提示框,运行的结果是输出12 x = "abc"; alert(x); // 输出abc
JavaScript 的特性:
- 交互性:目标是实现信息的动态交互。
- 安全性:不直接访问本地硬盘。
- 跨平台性:只要是可以解释JS的浏览器都可以执行,和平台无关。
将JS代码嵌入HTML
-
直接嵌入 script 标签
<script type="text/javascript"> alert("hello javascript!"); </script>
-
导入 js 文件
<script type="text/javascript" src="script.js"></script>
注意:两种形式选其中之一,使用了src导入就不要再在标签中写代码,否则标签中的代码将不被执行。
变量
变量类型
- 数值类型:number
- 字符串类型:string
- 对象类型:object
- 布尔类型:boolean
- 函数类型:function
特殊的值:
- undefined:未定义,所有js变量未被赋予初始值时,默认的值
- null:空值
- NAN:not a number,意思是非数字,非数值。
变量声明和赋值
var i;
i = 12;
变量的关系运算和逻辑运算
基本和 Java 一致。
注意,在js中的特殊运算符号:
- ==:只做字面值的比较,例如:
12 == "12"
,结果为true - ===:字面值和类型比较,例如:
12 === "12"
,结果为false
在js中,所有变量都可以直接当作布尔变量判断,0、null、undefined、""(空串)都认为是false。
var c = null;
if(c) {
alert("null为真");
} else {
alert("null为假");
}
// 输出"null为假"
基于以上规则,js的与运算有以下规则:
- 当表达式全为真,返回最后一个表达式的值。
- 当表达式有一个为假,返回第一个为假的值。
其他逻辑运算也有类似的规则。
数组
定义和赋值:
// 数组的声明
var arr = [];// 此时数组长度为0
arr[0] = 12;// 此时数组长度为1
arr[2] = "abc";// 此时数组长度为3,[12, undefined, "abc"]
函数(重要)
函数的定义
// 第一种定义方式
function func(){
alert("无参函数func()被调用了");
}
function func2(a, b) { // js中,无需声明参数类型
alert("有参函数func2()被调用了 a = " + a + ", b = " + b);
}
function sum(num1, num2) { // js中,无需声明返回值类型,如果有返回值,直接返回即可
var result = num1 + num2;
return result;
}
// 第二种定义方式
var func = function (){
alert("无参函数func()被调用了");
}
var func2 = function (a, b) { // js中,无需声明参数类型
alert("有参函数func2()被调用了 a = " + a + ", b = " + b);
}
var sum = function (num1, num2) { // js中,无需声明返回值类型,如果有返回值,直接返回即可
var result = num1 + num2;
return result;
}
注意:js不允许函数重载,如果重载,会覆盖掉上次的定义。
隐形参数
js的function机制实际上是将传入的参数当作一个数组处理。可以在函数体中使用arguments调用,称为隐形参数。
function fun(a) {
alert(arguments.length + ", " + a);
}
fun(1, "abc", 3); // 输出为 3, 1
例子:利用隐形参数的机制求输入所有参数的和。
function sum(num1, num2) { // 这里传递两个参数是为了可读性好一些
var result = 0;
for(var i = 0; i < arguments.length; i++) {
if(typeof(arguments[i]) == "number") { // 防止用户可能输入的字符串类型影响结果
result += arguments[i];
}
}
return result;
}
对象
-
Object形式的自定义对象
var obj = new Object(); obj.name = "setsuna"; obj.age = 18; obj.fun = function() { alert("姓名:" + this.name + ", 年龄:" + this.age); } obj.fun();
-
使用{}定义对象
var obj = { name: "setsuna", // 注意使用冒号而不是等于号声明!!!属性之间需要有逗号隔开 age: 18, fun: function() { alert("姓名:" + this.name + ", 年龄:" + this.age); } } obj.fun();
事件
事件的注册
- 静态注册:通过html标签的时间属性直接赋予事件响应后的代码。
- 动态注册:先通过js代码得到标签的dom对象,然后再通过
dom对象.事件名 = function(){}
注册。- 获得标签对象
- 标签对象.事件名 = function(){}
onload事件
页面加载完成后执行,常用于页面js代码的初始化操作。
-
静态注册
<body onload="alert("静态注册");"> </body>
由于代码很可能不止一条,所以常用的写法是这样的:
... <script type="text/javascript"> function onloadFun(){ ... 代码 } </script> ... <body onload="onloadFun();"> </body>
-
动态注册
<script type="text/javascript"> window.onload = function() { alert("动态注册的onload事件"); } </script>
onclick事件
用户点击某个元素时执行,常用于按钮等与用户交互的元素。
-
静态注册:
<button onclick="alert("静态注册");">按钮</button>
-
动态注册:
// 在js文件或者script标签中 window.onload = function() { // 加载时,完成onclick事件的注册 var buttonObj = document.getElementById("btn01"); buttonObj.onclick = function () { alert("动态注册onclick"); } }
onblur事件
元素失去焦点时执行,常用于输入框。
-
静态注册:和onclick类似
-
动态注册:
// 在js文件或者script标签中 window.onload = function() { // 加载时,完成onblur事件的注册 var pwdObj = document.getElementById("passwd"); pwdObj.onblur = function () { console.log("密码框失去焦点"); } }
onchange事件
内容发生改变时执行,常用于输入框、下拉列表。
-
静态注册:和onblur类似。
-
动态注册:
// 在js文件或者script标签中 window.onload = function() { // 加载时,完成onchange事件的注册 var selectObj = document.getElementById("sel01"); selectObj.onchange = function () { console.log("选择已经发生改变"); } }
onsubmit事件
发生表单提交事件时执行。
-
静态注册:
注意:在静态注册中,onsubmit的return不能省。
<head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> function onsubmitFun(){ alert("静态注册表单提交事件---发现不合法的输入"); return false; } </script> </head> <body> <!--return false 可以阻止表单提交--> <form action="http://localhost:8080" method="get" onsubmit="return onsubmitFun();"> <input type="submit" value="静态注册"/> </form> </body> </html>
-
动态注册:
注意:对于动态注册,需要阻止提交就返回false,正常提交就返回true。
<head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> window.onload = function () { var formObj = document.getElementById("form01"); formObj.onsubmit = function () { alert("动态注册表单提交事件---发现不合法"); return false; } } </script> </head> <body> <!--return false 可以阻止表单提交--> <form action="http://localhost:8080" id="form01" method="get"> <input type="submit" value="动态注册"/> </form> </body>
DOM模型(重要)
DOM,Document Object Model:文档对象模型
- 将文档中的标签、属性、文本转换为对象来管理。
Document对象
- Document管理了所有的HTML文档内容
- Document是一种树结构的文档,有层级关系
- Document让我们把所有的标签和文本都对象化(体现在树中为一个结点)
- 我们可以通过Document访问所有的标签对象
Document对象的查询
- getElementById:通过id查询
- getElementsByName:通过name查询,返回的是一个集合,里面有所有满足要求的dom对象引用
- getElementsByTagName:通过标签名查询,返回集合
示例一:
检验输入的用户名是否符合以下规则:长度为5-12个字符,只能包括字母、数字或下划线。
示例二:
操作复选框,实现「全选」、「全不选」、「反选」功能。