js笔记
引言:小编也在努力学习的过程中,如果hxd们有什么建议或者错误纠正,请联系我哦!点击下载文章
变量
-
alert() 是 JavaScript 语言提供的一个警告框函数
-
JavaScript 的变量类型:
1. 数值类型: number
2. 字符串类型: string
3. 对象类型: object
4. 布尔类型: boolean
5. 函数类型: function
- JavaScript 里特殊的值:
undefined 未定义,所有 JS 变量为赋予初始值的时候,默认值都是undefined
null 空值
NaN 全称是:Not a Number。非数字,非数值。
-
typeof() 是 JavaScript 语言提供的一个函数,可以取变量的数据类型返回
-
JS 中的定义变量格式:
var 变量名;
var 变量名 = 值;
关系运算
-
等于: == 等于是简单的做字面值的比较
-
全等于: === 除了做字面值的比较之外,还会比较两个变量的数据类型
var a = "12";
var b = 12;
alert(a == b); // 输出结果:true
alert(a === b); // 输出结果:false
逻辑运算
-
且运算: &&
-
或运算: ||
-
取反运算: !
-
在 JavaScript 语言中,所有的变量,都可以作为一个 boolean 类型的变量去使用。
-
0、null、undefined、""(空串)都认为是 false ;
var a = 0;
if(a) {
alert("零为真");
}else {
alert("零为假");
} // 输出结果:零为假
var b = null;
if(b) {
alert("null为真");
}else {
alert("null为假");
}// 输出结果:null为假
var c = undefined;
if(c) {
alert("undefined为真");
}else {
alert("undefined为假");
}// 输出结果:undefined为假
var d = ""; // 空串是一个空格都没有
// 如果这里写:var d = " "; 则d不为空串,显示结果变为:空串为真
if(d) {
alert("空串为真");
}else {
alert("空串为假");
}// 输出结果:空串为假
- && 且运算
有两种情况:
第一种:当表达式全为真的时候。返回最后一个表达式的值
第二种:当表达式中,有一个为假的时候。返回第一个为假的表达式的值
var a = "abc";
var b = true;
var d = false;
var c = null;
alert(a && b); // 输出结果:true
alert(b && a); // 输出结果:true
alert(a && d); // 输出结果:false
alert(a && c); // 输出结果:null
alert(a && d && c); // 输出结果:false
- || 或运算
第一种情况:当表达式全为假的时,返回最后一个表达式的值
第二种情况:只要有一个表达式为真。就会返回第一个为真的表达式
var a = "abc";
var b = true;
var d = false;
var c = null;
alert(d || c); // 输出结果:null
alert(c || d); // 输出结果:false
alert(a || c); // 输出结果:abc
alert(b || c); // 输出结果:true
数组
数组定义的方式:
JS 中数组的定义:
格式:
var 数组名 = []; // 空数组
var 数组名 = [1, 'abc', true]; // 定义数组同时赋值元素
var arr = []; // 定义一个空数组
alert(arr.length); // 输出结果:0
arr[0] = 12;
alert(arr[0]); // 输出结果:12
alert(arr.length); // 输出结果:1
/* JavaScript语言中的数组,只要我们通过数组下标赋值,那么最大的下标值,就会自动给数组做扩容操作 */
arr[2] = "abc";
alert(arr.length); // 输出结果:3
alert(arr[1]); // 输出结果:undefined
// 数组的遍历
for(var i=0; i<arr.length; i++) {
alert(arr[i]);
}
函数
函数的两种定义方式
- 第一种,可以使用 function 关键字来定义函数。
定义的格式如下:
function 函数名(形参列表) {
函数体
}
// 定义一个无参函数
function fun() {
alert("无参函数fun()被调用了");
}
// 函数调用===>>>才会执行
fun(); // 输出结果:无参函数fun()被调用了
// 定义一个有参函数
function fun2(a, b) {
alert("有参函数fun2()被调用了, a = " + a + ", b = " + b);
}
fun2(12, "abc"); // 输出结果:有参函数fun2()被调用了, a = 12 , b = abc
在 JavaScript 语言中,如何定义带有返回值的函数?
答:只需要在函数体内直接使用 return 语句返回值即可
//定义带有返回值的函数
function sum(num1, num2) {
var result = num1 + num2;
return result;
}
alert(sum(100, 50)); // 输出结果:150
- 函数的第二种定义方式,格式如下:
使用格式如下:
var 函数名 = function(形参列表) {
函数体
}
var fun = function() {
alert("无参函数");
}
fun(); // 输出结果:无参函数
var fun2 = function(a, b) {
alert("有参函数 a = " + a + ", b = " + b);
}
fun2(1, 2); // 输出结果:有参函数 a = 1, b = 2
var fun3 = function(num1, num2) {
return num1 + num2;
}
alert(fun3(100, 200)); // 输出结果:300
注意:在 java 中函数允许重载。但是在JS中函数的重载会直接覆盖掉上一次的定义
function fun() {
alert("无参函数fun()");
}
function fun(a, b) {
alert("有参函数fun(a, b)");
}
fun(); // 输出结果:有参函数fun(a, b)
函数的 arguments 隐形参数(只在 function 函数内)
就是在 function 函数中不需要定义,但却可以直接用来获取所有参数的一个变量。我们把它叫做隐性参数。隐性参数特别像 java 基础的可变长参数一样。
public void fun(Object … args);
可变长参数其实是一个数组。那么 js 中的隐形参数也跟 java 的可变长参数一样,操作类似数组。
function fun() {
alert(arguments); // 输出结果:[object Arguments]
alert(arguments.length); // 查看参数个数 输出结果:2
alert("无参函数fun()");
alert(arguments[0]); // 输出结果:0
alert(arguments[1]); // 输出结果:ab
for(var i=0; i<argumrnts.length; i++) {
alert(arguments[i]); //输出结果:0 ab
}
}
fun(1, "ab");// 输出结果:无参函数fun()
// 需求:要求编写一个函数,用于计算所有参数相加的和,并返回
function sum(num1, num2) {
var result = 0;
for(var i=0; i<arguments.length; i++) {
if(typeof(arguments[i]) == "number") {
// 为了防止出现alert(sum(1, 2, 3, 4, "abc", 5, 6, 7, 8, 9)) // 输出结果:10abc56789 要判断参数类型是否为 number
result += arguments[i];
}
}
return result;
}
alert(sum(1, 2, 3, 4, 5, 6, 7, 8, 9)); // 输出结果:45
JS 中的自定义对象
Object 形式的自定义对象
对象的定义:
var 变量名 = new Object(); // 对象实例(空对象)
变量名.属性名 = 值; // 定义一个属性
变量名.函数名 = function(){}; // 定义一个函数
对象的访问:
变量名.属性名/函数名();
var obj = new Object();
alert(typeof(obj)); // 输出结果:object
obj.name = "华仔";
obj.age = 18;
obj.fun = function() {
alert("姓名:" + this.name + ",年龄:" + this.age);
}
alert(obj.name); // 输出结果:华仔
obj.fun(); // 输出结果:姓名:华仔,年龄:18
{} 形式的自定义对象
var 变量名 = {}; // 空对象
var 变量名 = {
属性值:值, // 定义一个属性
属性值:值, // 定义一个属性
函数名:function(){} // 定义一个函数
};
对象的访问:
变量名.属性名/函数名();
var obj = {}; // 空对象
alert(typeof(obj)); // 输出结果:object
var obj = {
name: "张三",
age: 18,
fun : function() {
alert("姓名:" + this.name + ", 年龄:" + this.age);
}
};
alert(obj.name); // 输出结果:张三
obj.fun(); // 输出结果:姓名:张三,年龄:18
JS 中的事件
-
什么是事件?
答:事件是电脑输入设备与页面进行交互的响应。我们称之为事件。 -
常用的事件:
onload 加载完成事件: 页面加载完成之后,常用于做页面js代码初始化操作
onclick 单击事件: 常用于按钮的点击响应操作
onblur 失去焦点事件: 常用于输入框失去焦点后验证其输入内容是否合法
onchange 内容发生改变事件: 常用于下拉列表和输入内容发生改变后的操作
onsubmit 表单提交事件: 常用于表单提交前,验证所有表单项是否合法
- 事件的注册又分为静态注册和动态注册两种:
(1)什么是事件的注册(绑定)?
答:其实就是告诉浏览器,当事件响应后要执行哪些操作代码,叫做事件注册或绑定。
(2) 静态注册事件:通过HTML标签的事件属性直接赋予事件响应后的代码,这种方式叫做静态注册。
(3)动态注册事件:是指先通过 js 代码得到标签的 dom 对象,然后通过 dom 对象 . 事件名 = function(){} 这种形式赋予事件响应后的代码,叫动态注册。
(4)动态注册基本步骤:
1.获取标签对象
2.标签对象.事件名 = function(){}
onload 加载完成事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title<title>
</head>
<!-- 静态注册onload事件
onload事件是浏览器解析完页面之后就会自动触发的事件
-->
<body onload="alert('静态注册onload事件')">
<!-- 输出:静态注册onload事件 -->
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> Title</title>
<script type="text/javascript">
//onload事件的方法
function onloadFun() {
alert('静态注册onload事件,所有代码');
}
</script>
</head>
<body onload="onloadFun();">
<!-- 输出:静态注册onload事件,所有代码 -->
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> Title</title>
<script type="text/javascript">
//onload事件的方法
function onloadFun() {
alert('静态注册onload事件,所有代码');
}
//onload事件动态注册,是固定写法
window.onload = function() {
alert("动态注册的onload事件");
}
// 输出:动态注册的onload事件
</script>
</head>
<body>
</body>
</html>
onclick 单击事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
// 静态注册onclick事件
function onclickFun() {
alert("静态注册onclick事件");
}
// 动态注册onclick事件
window.onload = function() {
// 1. 获取标签对象
/*
* document 是 JavaScript 语言提供的一个对象(文档)
*/
var btnObj = document.getElementById("btn01");
alert(btnObj); // 输出:[object HTMLButtonElement]
// 2. 通过标签对象.事件名 = function(){}
btnobj.onclick = function() {
alert("动态组成的onclick事件");
}
}
</script>
</head>
<body>
<!-- 静态注册onlick -->
<button onclick="onclickFun();">按钮1</button>
<button id="btn01">按钮2</button>
</body>
</html>
onblur 失去焦点事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title<title>
<script type="text/javascript">
// 静态注册失去焦点事件
function onblurFun() {
// console 是控制台对象,是JavaScript语言提供,专门用来想浏览器的控制器打印输出,用于测试使用
// log()是打印的方法
console.log("静态注册失去焦点事件");
}
//动态注册onblur事件
window.onload = function() {
// 1. 获取标签对象
var passwordObj = document.getElementById("password");
// 2. 通过标签对象.事件名 = function(){}
passwordObj.onblur = function() {
console.log("动态注册失去焦点");
}
}
</script>
</head>
<body>
用户名:<input type="text" onbulr="onblurFun();"><br>
密码:<input id="password" type="password"><br>
</body>
</html>
onchange 内容发生改变事件
<!DOCTYPE html>
<html lag="en">
<head>
<meta charset="UTF-8">
<title>Title<title>
<script type="text/javascript">
//静态注册onchange
function onchangeFun() {
alert("女神已经改变了");
}
//动态注册onchange
window.onload = function() {
//1.获取标签对象
var selObj = document.getElementById("sel01");
//2.通过标签对象.事件名 = function(){}
selObj.onchange = function() {
alert("男神已经发生改变");
}
}
</script>
</head>
<body>
请选择你心中的女神:
<!--静态注册onchange事件-->
<select onchange="onchangeFun();">
<option>--女神--</option>
<option>芳芳</option>
<option>佳佳</option>
<option>娘娘</option>
</select>
请选择你心中的男神:
<!--动态注册onchange事件-->
<select id="sel01">
<option>--男神--</option>
<option>张三</option>
<option>华仔</option>
<option>富城</option>
</select>
</body>
</html>
onsubmit 表单提交事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title<title>
<script type="text/javascript">
//静态注册onsubmit表单提交事件
function onsubmitFun() {
//要验证所有表单项是否合法,如果有一个不合法就阻止表单提交
alert("静态注册onsubmit表单提交事件---发现不合法");
return false;
}
//动态注册onsubmit表单提交事件
window.onload = function() {
//1.获取标签对象
var formObj = document.getElementById("form01");
//2.通过标签对象.事件名 = function(){}
form01.onsubmit = function() {
alert("动态注册onsubmit表单提交事件---发现不合法");
return false;
}
}
</script>
</head>
<body>
<!-- 静态注册onsubmit表单提交事件 -->
<!-- return false可以阻止表单提交 -->
<form action="http://localhost:8080" method="get" onsubmit="return onsubmitFun();">
<input type="submit" value="静态注册">
</form>
<!-- 动态注册onsubmit表单提交事件 -->
<form action="http://localhost:8080" method="get" id="form01">
<input type="submit" value="动态注册">
</form>
</body>
</html>
DOM 模型
DOM 全称 Document Object Model 文档对象模型
大白话:就是把文档中的标签,属性,文本,转换成为对象来管理。
Document 对象
- 对它的理解:
- 第一点:document它管理了所有的html文档内容
- document 它是一种树结构的文档,有层级关系
- 它让我们把所有的标签都对象化
- 我们可以通过document访问所有的标签对象
Document 对象中的方法介绍
document.getElementById(elementId)
通过标签的id属性查找dom对象,elementId是标签的id属性值
document.getElementsByName(elementName)
通过标签的name属性查找标签dom对象,elementName是标签的name属性值
document.getElementsByTagName(tagname)
方法,通过给定的标签名,创建一个标签对象。tagName是要创建的标签名。
注释:
document对象的三个查询方法,如果有id属性,优先使用getElementById方法来进行查询,如果没有id属性,则优先使用getElementsByName方法来进行查询,如果id属性和name属性都没有,最后再按标签名查getElementsByTagName
以上三个方法,一定要在页面加载完成之后执行,才能查询到标签对象。
1. getElementById()的实例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title<title>
<script type="text/javascript">
/*
* 需求:当用户点击了校验按钮,要获取输入框里的内容,验证其是否合法
* 验证的规则是:必须有字母,数字,下划线组成,并且长度是5到12位
* */
function onclickFun() {
// 1. 当我们要操作一个标签的时候,一定要先获取这个标签对象
var usernameObj = document.getElementById("username");
alert(usernameObj);
alert(usernameObj.value);
var usernameText = usernameObj.value;
// 如何验证字符串符合某些规则,需要使用正则表达式技术
var patt = /^\w{5,12}&/;
/*
* test() 方法用于测试某个字符是不是匹配我的规则
* 匹配就返回true,不匹配就返回false
*/
if(patt.text()) {
alert("用户名合法");
}else {
alert("用户名不合法");
}
}
</script>
</head>
<body>
用户名:<input type="text" id="username" value=""/>
<button onclick="onclickFun()">校验</button>
</body>
</html>
2. getElementsByName()的实例
返回的是多个
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title<title>
<script type="text/javascript">
// 全选
function checkAll() {
// 让所有复选框都选中
// document.getElementsByName(); 是根据指定的name属性查询返回多个标签集合
// 这个集合的操作和数组一样
// 集合中每个元素都是dom对象
// 集合中的元素顺序是他们在HTML页面中从上到下的顺序
// checked 表示复选框的选中的状态,如果选中时true,不选中是false
// checked属性可读可写
var hobbies = document.getElementsByName("hobby");
for(var i=0; i<hobbies.length; i++) {
hobbies[i].cheaked = true;
}
}
//全不选
function checkNo() {
var hobbies = document.getElementsByName("hobby");
for(var i=0; i<hobbies.length; i++) {
hobbies[i].cheaked = false;
}
}
//反选
function checkReverse() {
var hobbies = document.getElementsByName("hobby");
for(var i=0; i<hobbies.length; i++) {
if(hobbies[i].checked) {
hobbies[i].checked = false;
}else {
hobbies[i].checked = true;
}
}
}
</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="js">JavaScript
<br>
<button onclick="checkAll();">全选</button>
<button onclick="checkNo();">全不选</button>
<button onclick="checkReverse();">反选</button>
</body>
</html>
3. getElementsByTagName()的实例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title<title>
<script type="text/javascript">
// 全选
function checkAll() {
// document.getElementsByTagName(""); 是按照指定标签名来进行查询并返回集合
// 这个集合的操作与数组一样
// 集合中都是dom对象
// 集合中元素顺序,是他们在HTML页面中从上到下的顺序
var inputs = document.getElementsByTagName("input");
for(var i=0; i<inputs.length; i++) {
inputs[i].checked = true;
}
}
</script>
</head>
<body>
兴趣爱好:
<input type="checkbox" value="cpp">C++
<input type="checkbox" value="java">java
<input type="checkbox" value="js">JavaScript
<br>
<button onclick="checkAll();">全选</button>
</body>
</html>
正则表达式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title<title>
<script type="text/javascript">
//var patt = /^\w{5, 12}$/;
//表示要求字符串中,是否包含字母e
//var patt = new RegExp("e");// var patt = /e/; 也是正则表达式
//alert(patt); // 输出:/e/
//var str = "abcd";
//var str1 = "abcde";
//alert(patt.test(str)); // 输出:false
//alert(patt.test(str1)); // 输出:true
var patt = /[abc]/; // 表示是否包含字母a或b或c
var patt = /[a-z]/; // 表示是否包含小写字母
var patt = /[A-Z]/; // 表示是否包含大写字母
var patt = /[0-9]/; // 表示是否包含任意数字
var patt = /\w/; // 表示是否包含字母,数字,下划线
var patt = /a+/; // 表示是否包含至少一个a
var patt = /a*/; // 表示是否包含零个或多个a
var patt = /a?/; // 表示是否包含一个或零个a
var patt = /a{3}/; // 表示是否包含连续三个a
var patt = /a{3, 5}/; // 表示是否包含至少3个连续的a,最多5个连续的a
var patt = /a{3,}/; // 表示是否包含至少3个连续的a
var patt = /a$/; // 表示必须以a结尾
var patt = /^a/; // 表示必须以a开头
var patt = /^a{3, 5}$/; // 表示从头到尾必须完全匹配至少3个连续的a,最多5个连续的a
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title<title>
<script type="text/javascript">
/*
* 需求:当用户点击了校验按钮,要获取输入框里的内容,验证其是否合法
* 验证的规则是:必须有字母,数字,下划线组成,并且长度是5到12位
* */
function onclickFun() {
// 1. 当我们要操作一个标签的时候,一定要先获取这个标签对象
var usernameObj = document.getElementById("username");
alert(usernameObj);
alert(usernameObj.value);
var usernameText = usernameObj.value;
// 如何验证字符串符合某些规则,需要使用正则表达式技术
var patt = /^\w{5,12}&/;
/*
* test() 方法用于测试某个字符是不是匹配我的规则
* 匹配就返回true,不匹配就返回false
*/
var usernameSpanObj = document.getElementById("usernameSpan");
// innerHTML 表示起始标签和结束标签中的内容
// innerHTML 这个属性可读可写
alert(usernameSpanObj.innerHTML);
if(patt.text()) {
//alert("用户名合法");
//usernameSpanObj.innerHTML = "用户名合法";
usernameSpanObj.innerHTML = "<img src="right.jpg" width="18" height="18">";
}else {
//alert("用户名不合法");
//usernameSpanObj.innerHTML = "用户名不合法";
usernameSpanObj.innerHTML = "<img src="wrong.jpg" width="18" height="18">";
}
}
</script>
</head>
<body>
用户名:<input type="text" id="username" value=""/>
<span id="usernameSpan" style="color:red;"></span>
<button onclick="onclickFun()">校验</button>
</body>
</html>
节点的常用属性和方法
节点就是标签对象
方法:
通过具体的元素调用getElementsByName()方法,获取当前节点的指定标签名孩子节点
appendChild(oChildNode)方法,可以添加一个子节点,oChildNode 是要添加的孩子节点
属性:
childNodes 属性:获取当前节点的所有子节点
firstChild 属性:获取当前节点的第一个子节点
lastChild 属性:获取当前节点的最后一个子节点
parentNode 属性:获取当前节点的父节点
nextSibling 属性:获取当前节点的下一个节点
previousSibling 属性:获取当前节点的上一个节点
className 属性:用于获取或设置标签的 class 属性
innerHTML 属性:表示获取/设置起始标签和结束标签中的内容
innerText 属性:表示获取/设置起始标签和结束标签中的文本