JavaScript笔记

第一章

1、什么是JavaScript

答:是一种基于对象和事件驱动的、并具有安全性能的脚本语言

2、JavaScript特点

答:向HTML页面中添加交互行为

​ 脚本语言,语法和Java类似

​ 解释性语言,边执行边解释

3、JavaScript组成

答:ECMAscript DOM BOM

单行注释://

多行注释:/* */

//弹框

alert("你好,javascript")
4、javascript引入的三种方式

内部文件,直接写在标签里的

外部文件,后缀名为.js文件

直接写在HTML文件中

5、变量的声明与赋值

声明变量

语法 var 变量名 = 值

		var name = "张三丰",age = 23,sex = "男"
		document.write("姓名:",name,"<br>")
		document.write("年龄:",age,"<br>")
		document.write("性别:",sex,"<br>")
6、数据类型

基本数据类型:number(数字类型)、string(字符串)、Boolean(true或false)

特殊数据类型:null(空)、undefined(未定义)、object(对象)、NaN(非数字)

7、如何查看JS数据类型
 			var a = 34,
			b = "张三"
			c = 34,56
			d = false
			//typeof查看数据类型
		document.write(typeof(a),"<br>")
		//number
		document.write(typeof(b),"<br>")
		//string
		document.write(typeof(a),"<br>")
		//boolean 布尔类型 true或者false
		document.write(typeof(d))
8、字符串类型
		var str = "你好,JavaScript"
		document.write(str,"<br>")
		//查看长度,属性 length 查看字符串的长度
		document.write("字符串的长度为:",str.length,"<br>")
		//方法
		//charAt(),根据下表(索引)获取字符
		document.write("字符串为零的字母是:",str.charAt(0),"<br>")
		//转为大写
		document.write("转为大写:",str.toLocaleUpperCase(),"<br>")
		//转为小写
		document.write("转为小写:",str.toLocaleLowerCase(),"<br>")
		//字母首次出现的位置
		document.write("v首次出现的位置:",str.indexOf("a"),"<br>")
		//截取字符串,包含开头不包含结尾
		document.write("截取Java:",str.substring(3,7),"<br>")
		//替换
		document.write("替换为你不好:",str.replace("你好","你不好"),"<br>")
9、运算符与表达式

算数运算符: +(加)、-(减)、*(乘)、/(除)、%(取模)、++(加加)、–(减减)

		var a = 6,
			b = 3
			document.write("a=",a,"<br>")
			document.write("b=",b,"<br>")
		//加法
		document.write("a+b=", a + b, "<br>")
		//减法
		document.write("a-b=", a - b, "<br>")
		//乘法
		document.write("a*b=", a * b, "<br>")
		//除法
		document.write("a/b=", a / b, "<br>")
		//取模
		document.write("a%b=", a % b, "<br>")
		
		//++、++在前先自增,后其他,++在后,先其他,后自增
		var c = a++
		document.write("c=",c)

比较运算符:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、!=(不等于)、 (等于)、=(等等于)

		var a = 6,
			b = 3
		//大于
		document.write("a > b:", a > b, "<br>")
		//小与
		document.write("a < b:", a < b, "<br>")
		//大于等于
		document.write("a >= b:", a >= b, "<br>")
		//小于等于
		document.write("a <= b:", a <= b, "<br>")
		// == 比较是否相等
		document.write("a == b:", a == b, "<br>")
		//不等于
		document.write("a!=b", a != b, "<br>")

		// === 三等号
		var c = "12",	//string
			d = 12	//number
			//比较字面常量
		document.write("c==d:", c == d,"<br>")
		//即比较值,也比较数据类型
		document.write("c===d:", c === d)

逻辑运算符:&&(与)、||(或)、!(非)

		//逻辑运算符:&& || !
		var a = 12,
			b = 5,
		c = 6
		//&& 与 一假即假
		document.write(a > b && c < b,"<br>")
		//|| 或 一真即真
		document.write(b>c || a<c,"<br>")
		//!非	取相反
		document.write(!true)

赋值运算符:+=、-=、*=、/=、%=

 		//赋值运算符 += -= *= /= %=
		var a = 12
		document.write("a=", a, "<br>")
		a += 6 //a+=6等价于a = a+6
		document.write("a=", a, "<br>")
		a -= 5 //a-=5等价于a = a-6
		document.write("a=", a, "<br>")

三目运算符:

		//三目运算符
		//语法	表达式 ? 值1 : 值2
		//含义:如果表达式为真,则执行冒号前面的,如果表达式为假,则执行冒号后面的
		var a = 12
		var mess = a >=18 ? "你成年" : "未成年"
		document.write(mess)
10、系统对话框

1、只有确定按钮的弹框

		alert("你好")

2、带有确定和取消按钮的弹框

		//带有确定和取消按钮的弹框
		var a = confirm("删除吗?")
		document.write(a)

3、带有输入框的弹框

		//带有输入框的弹框
		var b = prompt("你几岁了")
		document.write(b)
11、if语句

三种语法:

1、单分支语句结构 2、双分支语句结构 3、多分支语句结构

单分支语句

		//单分支语句
		//语法 if(条件表达式){代码块}
		var a = 12
		if(a>=18){
			document.write("成年")
		}

双分支语句

		//双分支语句
		//语法
		/*
		if(条件表达式){
			代码块1
		}else{
			代码块2
		}
		如果表达式为真则执行代码块1,否则执行代码块2
		*/
	   var b = prompt("你今年多大")
	   if(b>=18){
		   document.write("成年")
	   }else{
		   document.write("未成年")
	   }

多分支语句结构

	   //多分枝语句结构
	   /*
	   语法
	   if(条件表达式1){
		   代码块1
	   }else if(条件表达式2){
		   代码块2
	   }else if(条件表达式3){
		   代码块3
	   }
	   ...
	   else{
		   代码块n
	   }
	   如果表达式1成立,则执行代码块1如果表条件表达式2成立,则执行代码块2...
	   如果条件都不成立,则执行else中的代码
	   */
	  var d = prompt("你考多少分")
	  if(d>=90){
		  document.write("优")
	  }else if(d>=60){
		  document.write("良")
	  }else if(d<=60){
		  document.write("差")
	  }else{
		  document.write("啥也不是")
	  }
12、switch语句
		//swith语句
		/*
		语法
		swith(表达式){
			case 值1:
				代码块1
				break
			case 值2:
				代码块2
				break
			...
			default:
				代码块n
				break
		}
		
		*/
	   var sex = "aa"
	   switch (sex){
	   	case "男":
			document.write("帅哥")
	   		break;
	   	case "女":
			document.write("美眉")
	   		break;
		default :
			document.write("输入有误")
	   }
13、循环结构

循环四要素:开始值、结束值、循环体、变化值

for循环

for(初始化;条件表达式;增量){

​ 循环体

}

		for(var i = 1;i<=5;i++){
			document.write("跑了",i,"圈","<br>")
		}

while循环

while(条件表达式){

​ 循环体

}

如果表达式为真,则执行循环体

		var i = 1
		while(i<=50){
			document.write(i,"<br>")
			i++
		}

do-while循环

do{

循环体

}while(条件表达式)

		var i = 1
		do{
			document.write(i,"<br>")
			i++
		}
		while(i <= 100)

注:

while和do-while的区别

while是先判断条件是否成立;如果成立在执行循环体

do-while是先执行循环体;在判断条件是否成立

也就是说,do-while循环无论条件是否成立,至少会执行一次

14、循环中断

break:结束循环

continue:跳过本次循环,进入下次循环

break:

		for (var i = 1; i <= 10; i++) {
			//判断
			if (i == 5) {
				document.write("肚子疼,不跑了")
				break
			}
			document.write("跑了", i, "圈", "<br>")
		}

continue:

		for (var i = 1; i <= 10; i++) {
			//判断
			if (i == 5) {
				document.write("鞋带开了,下圈跟上","<br>")
				continue
			}
			document.write("跑了", i, "圈", "<br>")
		}
15、循环嵌套

五行五列

		//五行五列
		for(var j =0;j<=5;j++){
			for(var i = 0; i<=5; i++){
				document.write("*")
			}
			document.write("<br>")
		}

金字塔形状

		//金字塔形状
		for(var c = 1;c<=8; c++){
			for(var d = 1; d<=c; d ++){
				document.write("*")
			}
			document.write("<br>")
		}

九九乘法表

<style type="text/css">
			tr td{
				border: 1px solid red;
				height: 30px;
				width: 200px;
				background-color: yellow;
				color: green;
			}
		</style>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		//九九乘法表
		document.write("<table>")
		for (var i = 1; i <= 9; i++) {
			document.write("<tr>")
			for (var j = 1; j <= i; j++) {
				document.write("<td>",j,"*",i, "=", j*i,"</td>" )
			}
			document.write("</tr>")
		}
		document.write("</table>")
	</script>

**注:**内层循环控制行数,外层循环控制列数

16、关键字、保留字

关键字

关键字
breakdeleteifthiswhile
casedointhrowwith
catchelseinstanceoftry
continuefinallynewtypeof
debuggerforreturnvar
defaultfunctionswitchvoid

保留字

abstractdebuggerfloatlongshort
booleandoublegotonativestatic
byteenumimplementspackagesuper
charexportimportprivatesynchronized
classextendsintprotectedthrows
constfinalinterfacepublictransient
volatile
17、程序调试

1、alert()

2、console.log()

第二章

1、什么是函数

答:完成特定功能的代码块

2、函数的分类

答:系统函数、自定义函数

系统函数

		//函数完成特定的代码块
		//分类:系统函数;自定义函数

		//将字符串转为整数数字
		var a = parseInt("12,56")
		document.write(a, "<br>")
		//将字符串转为小数
		var b = parseFloat("45.89")
		document.write(b+1,"<br>")
		//检查参数是否非数字,如果不是数字返回true,是数字返回flace
		var c = "45"
		document.write(isNaN(c),"<br>")
		//计算
		var k = eval(12+45-6*9)
		document.write(k)

自定义函数

语法:自定义函数
参数,在函数定义的时候,下载小括号中的叫参数
返回值,return
function 函数名(参数1,参数2…){
功能代码块
return 返回值
}

定义无参数的函数

	   //无参数无返回值的函数
	   function f1(){
		   document.write("打扫卫生!!")
	   }
	   f1()

定义有参数的函数

	   //定义有参数的函数
	   function f2(name){
		   document.write(name,"吃西瓜")
	   }
	   f2("张三")
3、事件
名称说明
onload页面加载
onlick鼠标点击
onmouseover鼠标移入
onmouseout鼠标移出
onkeydown键盘按键按下
onchange内容被改变

点击事件;onclick()

	<body>
		<button onclick="f2('张三')">点击</button>
	</body>
	<script type="text/javascript">
		function f2(a) {
			alert("点我干啥" + a)
		}
	</script>

页面加载;onload()

	<body onload="f1()">
		<div id="box"></div>
	</body>
	<script type="text/javascript">
		function f1(){
			console.log("页面加载了");
		}
	</script>

鼠标移入;onmouseover()

	<body>
		<div id="box" onmouseover="f2()"></div>
	</body>
	<script type="text/javascript">
		function f2(){
			console.log("鼠标来了");
		}
	</script>

鼠标移出;onmouseout()

	<body>
		<div id="box" onmouseout="f1()"></div>
	</body>
	<script type="text/javascript">
		function f1(){
			console.log("鼠标走了");
		}
	</script>
4、获取标签对象的方式

1、通过id获取

<body>
		<input type="text" id="inp">
		<button onclick="f2()">获取值</button>
	</body>
	<script type="text/javascript">
		function f2(){
			//根据id获取标签对象
			//get 获取	element 节点		by 通过
			var oinp = document.getElementById("inp")
			//获取input标签中的值	.value属性
			alert(oinp.value)
		}
	</script>
5、计算器
	<body>
		第一个数:<input type="text" id="o1" /><br />
		第二个数:<input type="text" id="o2" /><br />
		<button onclick="f2('+')">+</button>
		<button onclick="f2('-')">-</button>
		<button onclick="f2('*')">*</button>
		<button onclick="f2('/')">/</button><br />
		计算结果:<input type="text" id="o3" /><br />
	</body>
	<script type="text/javascript">
		function f2(v) {
			//获取input标签
			var op1 = parseFloat(document.getElementById("o1").value)
			var op2 = parseFloat(document.getElementById("o2").value)
			if (v == "+") {
				document.getElementById("o3").value = op1 + op2
			} else if (v == "-") {
				document.getElementById("o3").value = op1 - op2
			} else if (v == "*") {
				document.getElementById("o3").value = op1 * op2
			} else if (v == "/") {
				document.getElementById("o3").value = op1 / op2
			}
		}
	</script>

高级计算器

<body>
		<div id="box">
			<input type="text" value="0" id="inp" />
			<div id="a">
				<div id="l1" onclick="f1('清除')">清除</div>
				<div id="l1" onclick="f1('删除')">删除</div>
				<div onclick="f1('9')">9</div>
				<div onclick="f1('8')">8</div>
				<div onclick="f1('7')">7</div>
				<div onclick="f1('/')">/</div>
				<div onclick="f1('6')">6</div>
				<div onclick="f1('5')">5</div>
				<div onclick="f1('4')">4</div>
				<div onclick="f1('*')">*</div>
				<div onclick="f1('3')">3</div>
				<div onclick="f1('2')">2</div>
				<div onclick="f1('1')">1</div>
				<div onclick="f1('-')">-</div>
				<div onclick="f1('0')">0</div>
				<div onclick="f1('.')">.</div>
				<div onclick="f1('=')">=</div>
				<div onclick="f1('+')">+</div>
			</div>
		</div>
	</body>
	<script type="text/javascript">
		//定义变量接收点击的数
		var str = ""

		function f1(v) {
			if (v == "1") {
				str += "1"
			} else if (v == "2") {
				str += "2"
			} else if (v == "3") {
				str += "3"
			} else if (v == "4") {
				str += "4"
			} else if (v == "5") {
				str += "5"
			} else if (v == "6") {
				str += "6"
			} else if (v == "7") {
				str += "7"
			} else if (v == "8") {
				str += "8"
			} else if (v == "9") {
				str += "9"
			} else if (v == "0") {
				str += "0"
			} else if (v == "+") {
				str += "+"
			} else if (v == "-") {
				str += "-"
			} else if (v == "*") {
				str += "*"
			} else if (v == "/") {
				str += "/"
			} else if (v == "删除") {
				//截取字符串
				str = str.substring(0, str.length - 1)
			}
			//获取输入框标签并设置值
			document.getElementById("inp").value = str
			//清除
			if (v == "清除") {
				str = ""
				document.getElementById("inp").value = 0
			}
			//等号
			if (v == "=") {
				//计算
				document.getElementById("inp").value = eval(str)
				str = ""
			} 
		}
	</script>
6、函数表达式
				//函数表达式
		//语法
		//var 函数名 = function([参数]){
		//代码块
		//}
		//总结:普通函数如果有重名的话会把原来的覆盖掉
		//函数表达式有重名的话不会覆盖掉

		//普通函数
		function f1() {
			console.log("你好")
		}
		f1()

		function f1() {
			console.log("你好,你不好")
		}
		f1()
		
		//函数表达式
		var f2 = function() {
			console.log("你好,javascript")
		}
		f2()
		var f2 = function() {
			console.log("你好,java")
		}
		f2()
7、预解析
	<script type="text/javascript">
		//顾名思义就是提前解析代码
		console.log(b);
		var b = 122
		
		//函数也可以
		f2()
		function f2(){
			console.log("都多余了");
		}
8、函数自调用

自定义函数分类:1、匿名函数;2、命名函数

匿名函数的特点:函数没有名字,在声明的同时便直接调用

匿名函数的好处:同名函数之间不会有冲突

语法:(function(){

//函数体

}) ([实参])

	<script type="text/javascript">
		(function (a){
			console.log("这是匿名函数",a);
		})("这是实参")
	</script>
9、回调函数
	<script type="text/javascript">
	function f1(){
		console.log("f1函数");
	}
		//在函数中调用函数
	function f2(){
		console.log("f2函数")
		f1()
	}
	f2()
	</script>
10、变量的作用域

变量的作用域分为:1、全局变量;2、局部变量

局部变量:在函数内部声明的变量(必须使用var)

​ 可以在不同的函数中使用名称相同的局部变量

全局变量:在函数外声明的变量

​ 网页的所有脚本和函数都能访问它

		<script type="text/javascript">
			//全局变量
			var a = 12
			console.log(a);
			
			function f1(){
				//局部变量
				var b = 34
				console.log(a);
				console.log(b);
			}
			f1()
		</script>
11、隐式全局变量
	<script type="text/javascript">
		var a1 = 12
			a2 = 23//隐式全局变量
			console.log(a1);
			console.log(a2);
			
			function f1(){
				a3 = 77//隐式全局变量
				var a4 = 90//局部变量
			}
			f1()
			console.log(a3);
			console.log(a4);
	</script>
12、函数的返回值

语法:

function 函数名([参数]){

代码块

[return 返回值]

}

	   //无参数无返回值
	   function f1(){
		   console.log("f1函数");
	   }
	   f1()
	   
	   //有参数无返回值
	   function f2(a){
		   console.log("f2函数",a);
	   }
	   f2("zhangsna")
	   
	   //有参数有返回值
	   function f3(){
		   console.log("f3函数");
		   return "李四"
	   }
	   var a = f3()
	   console.log(a);
	   
	   //有参数有返回值
	   function f4(k,v){
		   return k+v
	   }
	   var d = f4(23,23)
	   console.log("d=",d);
13、闭包
	function f1(){
		//定义变量
		var b = 45
		
		function f2(){
			return b
		}
		//将f2函数返回出去
		return f2
	}
	//接受的是个函数
	var f = f1()
	//调用
	var a = f()
	console.log(a+1);

第三章

1、this指向

this代表当前对象

	<body>
		<div id="box">白日依山尽,黄河入海流。<br />欲穷千里目,更上一层楼。 </div>
		<input type="text" id="inp" onblur="f1(this)">
		<br />
			<select onchange="f2(this)" id="slt">
				<option>楷体</option>
				<option>宋体</option>
				<option>黑体</option>
				<option>华文彩云</option>
				<option>华文琥珀</option>
			</select>
		
	</body>
	<script type="text/javascript">
		var obox = document.getElementById("box")
		function f1(oinp){
			obox.style.fontSize = oinp.value+"px"
		}
		function f2(oslt){
		obox.style.fontFamily = oslt.value
		}
	</script>
2、数组

数组是可以保存多个数据的容器

数组的索引(下表)是从零开始的

创建数组的语法:

var 数组名 = [值1,值2,值3…]

			var arr = [12,34,56,"lisi"]
			//查看数组的长度
			console.log(arr.length);
			//取值:数组名[下标]
			console.log(arr[2])
			//遍历数组
			for (var i = 0; i < arr.length; i++) {
				console.log(arr[i]);
			}
3、定时器

定时器:setinterval()

	<body>
		<div id="box">
			<img src="img/3.jpg" id="im"/>
		</div>
	</body>
	<script type="text/javascript">
		//创建数组保存图片路径
		var arr = ["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg",]
		//定义变量作为数组下标
		var i = 0
		function f1(){
			//获取图片标签,更改src属性
			document.getElementById("im").src = arr[i]
			i++
			//判断是否到最后一张
			if(i == arr.length){
				//切换为第一张
				i = 0
			}
		}
		//定时器,一秒钟执行一次
		setInterval(f1,1000)
	</script>
4、Math对象
	<script type="text/javascript">
		//数学工具类
		//向上取整
		document.write(Math.ceil(12.001),'<br>')
		//向下取整
		document.write(Math.floor(12.99),'<br>')
		//四舍五入
		document.write(Math.round(12,4),'<br>')
		//随机数
		document.write(Math.random(0,1),'<br>')
		//0-5之间的随机数
		document.write(Math.floor(Math.random()*5))
	</script>
5、四种遍历数组的方式
	<script type="text/javascript">
		var arr = [12,23,45,67,78,89]
		//第一种		for
		for (var i = 0; i < arr.length; i++) {
			document.write(arr[i],'<br>')
		}
		document.write("----------------<br>")
		//第二种		for in
		for(var a in arr){
			document.write(arr[a],'<br>')
		}
		document.write("----------------<br>")
		//第三种		for of
		for(var b of arr){
			document.write(b,"<br>")
		}
		document.write("----------------<br>")
		//第四种		forEach
		arr.forEach((k,v)=>{
			document.write(k,"下标",v,'<br>')
		})
	</script>
6、Date对象(日期)
	<body>
		<div id="a"></div>
	</body>
	<script type="text/javascript">
		function f1() {
			//创建当前日期
			var s = new Date()
			//获取年份
			var a = s.getFullYear(),
				//获取月份
				b = s.getMonth() + 1,
				//获取日
				c = s.getDate(),
				//获取时间
				d = s.getHours(),
				//获取分钟
				e = s.getMinutes(),
				//获取秒;三目运算符进行补零操作
				f = s.getSeconds() < 10 ? "0" + s.getSeconds() : s.getSeconds()
				//拼接到一起
			var str = a + "年" + b + "月" + c + "号" + d + "时" + e + "分" + f + "秒"
			//获取div框给div框设置内容
			document.getElementById("a").innerText = str
		}
		//调用
		f1()
		//动态显示
		setInterval(f1, 1000)
	</script>
7、innerHTML与innerText

获取时

	<script type="text/javascript">
		/*获取时:innerHTML获取标签中的全部内容
				innerText 只会获取文本信息
				 
				 */
		var od1 = document.getElementById("box").innerHTML
		console.log(od1);
		var od2 = document.getElementById("box").innerText
		console.log(od2);
	</script>

设置时:

<script type="text/javascript">
		/*获取时:innerHTML获取标签中的全部内容
				innerText 只会获取文本信息
		  设置时:innerHTML会解析标签
				innerText会把标签作为文本输出
				
				 */
		
		document.getElementById("box").innerHTML = "<h2>新的一天新的开端是</h2>"
		document.getElementById("box").innerText = "<h2>新的一天新的开端是</h2>"
8、Window对象
方法名称说 明
prompt( )显示可提示用户输入的对话框
alert( )显示带有一个提示信息和一个确定按钮的警示框
confirm( )显示一个带有提示信息、确定和取消按钮的对话框
close( )关闭浏览器窗口
open( )打开一个新的浏览器窗口,加载给定 URL 所指定的文档
setTimeout( )在指定的毫秒数后调用函数或计算表达式
setInterval( )按照指定的周期(以毫秒计)来调用函数或表达式
clearTimeout( )用于停止执行setTimeout( )方法的函数代码
clearInterval( )用于停止 setInterval( ) 方法执行的函数代码

**History对象 **

类别名称说 明
属性length返回历史记录列表中的网址数
方法back()加载 History 对象列表中的前一个URL
forward()加载 History 对象列表中的下一个URL
go()加载 History 对象列表中的某个具体URL

Location对象

名称说 明
host设置或返回主机名和当前URL的端口号
hostname设置或返回当前URL的主机名
href设置或返回完整的URL
9、Document对象的常用方法

Document对象代表整个HTML文档

Document对象的常用方法

名 称说 明
getElementById()返回对拥有指定id的第一个对象的引用
getElementsByName()返回带有指定名称的对象的集合
getElementsByTagName()返回带有指定标签名的对象的集合
write()向文档写文本、HTML表达式或JavaScript代码

1、通过id属性获取

2、通过标签名获取

	<body>
	<div id="a">div1</div>
	<ul>
		<li>电泳</li>
		<li>电商</li>
		</ul>
		<button onclick="f1()">点击</button>
	</body>
	<script type="text/javascript">
		function f1(){
			//通过标签名获取
			var oli = document.getElementsByTagName("li")
			var str = ""
			for (var i = 0; i < oli.length; i++) {
				str+=oli[i].innerHTML+" "
			}
			//通过id属性获取标签对象
			document.getElementById("a").innerHTML = str
		}
	</script>
10、获取标签对象的方式
<body>
	<div id="a">div1</div>
	<div class="a">div2</div>
	<div>div3</div>
</body>
<script type="text/javascript">
	//1、通过id的获取,唯一值
	var a1 = document.getElementById("a")
	console.log(a1);
	//2、通过标签名获取多个值
	var a2 = document.getElementsByTagName("div")
	console.log(a2);
	//3、通过类名获取
	var a3 = document.getElementsByClassName("a")
	console.log(a3);
</script>
11、事件的注册方式
<body>
	<button onclick="f1()">点击1</button>
	<button id="btn">点击2</button>
</body>
<script type="text/javascript">
	//第一种方法:直接写在标签上
	function f1(){
		console.log("点击1");
	}
	//第二种:用id获取
	var obtn = document.getElementById("btn")
	obtn.onclick = ()=>{
		console.log("点击2");
	}
</script>

第四章

1、操作DOM

dom: Document Object Model (文档对象模型)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H6qSfLhJ-1676860331543)(C:\Users\吴振\AppData\Roaming\Typora\typora-user-images\1675171041522.png)]

2、节点信息

节点类型:

Element(元素)

Attr(属性)

Text(文本)

Comment(注释)

Document(文档)

3、访问节点

使用getElement系列方法访问指定节点

1、ugetElementById() 通过id访问节点

2、getElementsByName() 通过name属性访问节点

3、getElementsByTagName() 通过标签名访问节点

**a、**节点属性:

属性名称描述
parentNode返回节点的父节点
childNodes返回子节点集合,childNodes[i]
firstChild返回节点的第一个子节点,最普遍的用法是访问该元素的文本节点
lastChild返回节点的最后一个子节点
nextSibling返回下一个节点
previousSibling返回上一个节点

**b、**element属性

属性名称描述
firstElementChild返回节点的第一个子节点,最普遍的用法是访问该元素的文本节点
lastElementChild返回节点的最后一个子节点
nextElementSibling下一个节点
previousElementSibling上一个节点
4、style属性
HTML元素.style.样式属性 = "值"

示例

document.getElementById("titles").style.color="#ff0000"; 
document.getElementById("titles").style.fontSize="25px";

边框:backgroundColor、backgroundImage…

文本:font、fontSize、color…

边距:padding、paddingTop、paddingLeft…

边框:border、borderTop、borderLeft…

5、className属性

语法:

HTML元素.className = "class样式名"

示例

function over() {
     document.getElementById("cart").className="cartOver";
     document.getElementById("cartList").className="cartListOver";
}
function out() {
     document.getElementById("cart").className="cartOut";
     document.getElementById("cartList").className="cartListOut";
}

6、获取元素的样式

语法

HTML元素.style.样式属性

示例

alert(document.getElementById("cartList").style.display);

!只能获取内联样式的属性值

7、总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3t4aYi6S-1676860331544)(C:\Users\吴振\AppData\Roaming\Typora\typora-user-images\1675173254469.png)]

第五章

1、获取和设置节点

获取节点,getAttribute(“属性名”) ;设置节点,setAttribute(“属性名”,“属性值”)

		var oim = document.getElementById("im")	
		function f1(){
			var a = oim.getAttribute("src")
			console.log(a);
		}
		function f2(){
			oim.setAttribute("src","img/3.jpg")
		}
2、创建和追加节点

创建节点,createElement ;追加节点,appendChild

	<script type="text/javascript">
		function f1(){
			//创建
			var oim = document.createElement("img")
			//设置属性
			oim.setAttribute("src","img/1.jpg")
			//获取div
			var od = document.getElementsByTagName("div")[0]
			//追加
			od.appendChild(oim)
		}
	</script>
3、删除和替换节点
名称描述
node.removeChild(child)删除指定的子节点
node.replaceChild(newChild,oidChild)用其他节点替换指定的子节点
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="box">
			<p id="p">段落标签</p>
			<img src="img/1.jpg" id="im"/>
		</div>
		<button onclick="f2()">点击</button>
	</body>
	<script type="text/javascript">
		function f2(){
			var obox = document.getElementById("box")
			var oim = document.getElementById("im")
			var op = document.getElementById("p")
			//删除图片标签
			obox.removeChild(oim)
			//创建节点
			var oh = document.createElement('h1')
			oh.innerHTML = "标题标签"
			//替换
			obox.replaceChild(oh,op)
		}
	</script>
</html>
4、获取元素的宽高属性
  • offset指偏移,及这个元素在文档中占用的所有显示宽度
属性描述
offsetLeft返回当前元素左边界到它上级元素的左边界的距离,只读属性
offsetTop返回当前元素上边界到它上级元素的上边界的距离,只读属性
offsetParent返回元素的偏移容器,即对最近的动态定位的包含元素的引用
offsetHeight返回元素的高度
offsetWidth返回元素的宽度
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			div{
				height: 200px;
				width: 200px;
				border: 10px solid red;
				background-color: red;
				padding: 10px;
			}
		</style>
	</head>
	<body>
		<div></div>
	</body>
	<script type="text/javascript">
		var od = document.getElementsByTagName('div')[0]
		console.log('高',od.offsetHeight,'宽',od.offsetWidth);
		console.log('可见高',od.clientHeight,'可见宽',od.clientWidth);
		console.log('页面高',window.innerHeight,'页面宽',window.innerWidth);
	</script>
</html>
5、浮动广告
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			* {
				margin: 0px;
				padding: 0px;
			}

			div {
				height: 100px;
				width: 200px;
				background-color: firebrick;
				position: relative;
				/* 相对定位 */

			}
		</style>
	</head>
	<body>
		<div id="box">
			<a href="http://www.jd.com"></a>
		</div>
	</body>
	<script type="text/javascript">
		//获取div标签
		let obox = document.getElementById("box")
		//tp:上下移动	lt:左右移动
		let tp = 0,lt = 0
		    //a:上	b:下
		let a = true,b = true
		function f1() {
			//获取页面及div的宽高
			let h = window.innerHeight - obox.offsetHeight - 5
			let w = window.innerWidth - obox.offsetWidth - 5

			//如果a为真,则y增加1,否则y减1
			tp = a ? tp + 1 : tp - 1
			//如果y大于等于高度,则把a设为false
			if (tp >= h) a = false
			//如果y小于等于0,则把a设为true
			if (tp <= 0) a = true

			lt = b ? lt + 1 : lt - 1
			if (lt >= w) b = false
			if (lt <= 0) b = true

			obox.style.top = tp + "px"
			obox.style.left = lt + "px"
		}
		let t = setInterval(f1, 10)

		//设置鼠标移入事件
		obox.onmouseover = ()=> {
			clearInterval(t)
		}
		//设置鼠标移出事件
		obox.onmouseout = ()=> {
			t = setInterval(f1, 10)
		}
	</script>
</html>

6、随机点名
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			table{
				margin: auto;
				
			}
			tr,td{
				height: 30px;
				width: 60px;
				border: 1px solid red;
				text-align: center;
				font-family: kaiti;
				font-size: 20px;
				
			}
		.e{
			background-color: orange;
		}
		#box{
			height: 50px;
			width: 90px;
			background-color: bisque;
			position: absolute;
			top: 50px;
			left: 210px;
			display: none;
			font-size: 23px;
			font-family: kaiti;
			text-align: center;
			line-height: 50px;
		}
		</style>
	</head>
	<body>
		<div id="box">小宇宙</div>
		<table>
			<tr>
				<td>张三</td>
				<td>李四</td>
				<td>王五</td>
			</tr>
			<tr>
				<td>宇将军</td>
				<td>大懿</td>
				<td>小宇宙</td>
			</tr>
			<tr>
				<td>田七</td>
				<td>马八</td>
				<td>王九</td>
			</tr>
			<tr >
				<td colspan="3">
					<button id="btn">开始</button>
				</td>
			</tr>
		</table>
	</body>
	<script type="text/javascript">
		//获取按钮标签
		var obtn = document.getElementById("btn")
		var obox = document.getElementById("box")
		var t 
		//给按钮设置点击事件
		obtn.onclick = function(){
			if(this.innerHTML == '开始'){
				obox.style.display = 'none'
				 this.innerHTML = '停止'
				t =setInterval(f1,1)
				setTimeout(function(){
					obtn.innerHTML = '开始'
					clearInterval(t)
					obox.style.display = 'block'
				},2000)
			}
		}
		//获取所有的td标签
		var otds = document.getElementsByTagName("td")
		//随机获取名称
		function f1(){
			for(var otd of otds){
				otd.className = ""
			}
			//随机下标
			var i = Math.floor(Math.random()*(otds.length-1))
			otds[i].className = 'e'
			obox.innerHTML = otds[i].innerHTML 
		}
		
	</script>
</html>

第六章

1、什么是对象

对象是相关属性和方法的集合体:属性方法

对象包括:string(字符串)对象、array(数组)对象、date(日期)对象、math(数学工具类)对象、regExp(正则验证)对象

2、创建一个自定义对象

基于Object对象创建自定义对象

var 对象名称 = new Object()

通过点操作符(.)为其添加属性或方法

第一种方法

	<script type="text/javascript">
		//创建自定义对象的语法
		//var 对象名 = new Object()
		var stu = new Object()
		//通过点操作符(.)为其添加属性或方法
		stu.name = '张三丰'
		stu.age = 23
		stu.play = function(){
			console.log("张丹峰在玩");
		}
		//调用
		console.log(stu.name,stu.age);
		stu.play()
	</script>

第二种方法

使用字面常量创建对象

	<script type="text/javascript">
		var stu ={
			name:'张三',
			age:56,
			play:function(){
				console.log("张三在玩香肠派对");
			}
		}
		console.log(stu.name,stu.age);
		stu.play()
	</script>
3、案例,创建猫对象
	<script type="text/javascript">
		var cat = {
			name:'小布丁',
			age:23,
			address:'河南',
			play:function(){
				console.log('都多余了');
			}
		}
		console.log(cat.name,cat.age,cat.address);
		cat.play()
	</script>
4、工厂模式

将对象的创建逻辑封装在一个函数中

	<script type="text/javascript">
	//工厂模式
	function f1(name,age,address){
		var cat = new Object()
		//添加属性
		cat.name = name
		cat.age = age
		cat.address = address
		//添加方法
		cat.play = function(){
			document.write("猫咪名字:",this.name+'<br>')
			document.write("猫咪颜色:",this.age+'<br>')
			document.write("猫咪住址:",this.address+'<br>')
		}
		return cat
	}
	var cat1 = f1("小布丁",23,'河南')
	cat1.play()
	
	var cat2 = f1("小花猫",60,'商丘')
	cat2.play()
	</script>
5、构造函数
  • 定义构造函数用以创建特定类型的对象

    与工厂模式相比

    a、没有显示创建object对象,没有return语句

    b、将属性的方法赋给this对象

	<script type="text/javascript">
		//构造函数
		function cat(name,age,sex){
			this.name = name
			this.age = age
			this.sex = sex
			this.play = function(){
				document.write("猫咪名字:",this.name,'<br>')
				document.write("猫咪年龄:",this.age,'<br>')
				document.write("猫咪性别:",this.sex,'<br>')
			}
		}
		//创建对象
		var cat1 = new cat('小黄',23,'男')
		cat1.play()
		var cat2 = new cat('小黑',67,'<br>')
		cat2.play()
	</script>
6、原型对象
  • 每一个函数都有一个prototype属性,指向其原型对象

  • 使用原型对象方式添加属性和方法。所有实例会共享它所包含的属性和方法

    语法

    构造函数名.rototype.属性或方法
    

    案例

    	<script type="text/javascript">
    		function f1(name){
    			this.name = name
    			this.play = function(){
    				console.log(this.clazz,'的',this.name,'在卖鱼');
    			}
    		}
    		//通过prototype属性,添加属性或方法,所有的对象共享
    		f1.prototype.clazz = "11班"
    		var s1 = new f1('张三')
    		s1.play()
    		var s2 = new f1('李四')
    		s2.play()
    	</script>
    
7、 constructor属性和instanceof操作符
	<script type="text/javascript">
		function f1(name){
			this.name = name
			this.play = function(){
				console.log(this.clazz,'的',this.name,'在卖鱼');
			}
		}
		//通过prototype属性,添加属性或方法,所有的对象共享
		f1.prototype.clazz = "11班"
		
		
		var s1 = new f1('张三')
		s1.play()
		//constructor 构造函数
		console.log(s1.constructor == f1);
		//instanceof 判断对象的类型
		console.log(s1 instanceof f1);
		var s2 = new f1('李四')
		s2.play()
		var s3 = new f1('王五')
		s3.play()
	</script>

第七章(es6)

1、新增命令
  • let命令

    声明变量

    用法类似与var

    但是,所声明的变量,只在let命令所在的代码块有效

  • const命令

    声明一个只读的常量

    一旦声明,常量的值就不能被改变

2、let命令

1、没有作用域提升

2、是一个块级作用域

3、不能重复声明

	<script type="text/javascript">
		{
			var a = 23
			let b = 24
		}
		console.log(a);	//23
		console.log(b);	//b is not defined
	</script>
3、const命令

1、没有作用于提升

2、是一个块级作用域

3、不能重复声明

4、定义变量值不能改变

	<script type="text/javascript">
		const a = 23
		a = 45
		//Assignment to constant variable.
		console.log(a);
	</script>
4、解构赋值

完全结构、不完全结构

a、数组的解构赋值

在ES6中,可以从数组中提取值,按照对应位置,对变量赋值

let [a,b,c]=[1,2,3];
  • 完全解构

    将数组中的值全部拿出来

	<script type="text/javascript">
		//数组的解构赋值
		//声明数组
		var arr = [12,23,454,676,78,99]
		//es5	代码冗絮
		//let a = arr[0]
		//let b = arr[1]
		//let c = arr[2]
		//let d = arr[3]
		//let e = arr[4]
		//let f = arr[5]
		//console.log(a,b,c,d,e,f);
		
		//es6	代码简单好记
		let[a,b,c,d,e,f] = arr
		console.log(a,b,c,d,e,f);
	</script>
  • 不完全解构(,)

    用逗号隔开

    		//不完全解构	用逗号隔开
    		let arr = [12,23,45,56]
    		let[a,,,b] = arr
    		console.log(a,b);
    
  • 剩余运算符(…)

    第一个值给第一个参数,剩下的参数变成数组传给第二个值

		let arr = [12, 23, 45, 56]
		let [k, ...l] = arr
		console.log(k);
		console.log(l);

b、对象的解构与赋值

  • 数组的元素是按次序排列的,变量的取值由它的位置决定
  • 对象的属性没有次序,变量必须与属性同名,才能取到正确的值
	<script type="text/javascript">
		//对象的解构赋值
		let stu = {
			name:'张三',
			age:23,
			sex:'男'	
		}
		//es5
		console.log(stu.name,stu.age,stu.sex);
		
		//es6
		//let{name,age,sex} = stu
		//console.log(name,age,sex);
		//变更名要跟属性名相同,才可以取到正确的值
		let{name} = stu
		console.log(name);
		
		let{a} = stu
		console.log(a);	//undefined
	</script>

c、字符串的解构赋值

跟数组类似

	<script type="text/javascript">
		//字符串的解构赋值
		let str = 'hello'
		//完全解构
		let[a,b,c,d,e] = str
		console.log(a,b,c,d,e);
		//不完全解构
		let[y,,,,u] = str
		console.log(y,u);
		//剩余运算符
		let[j,...k] = str
		console.log(j);
		console.log(k);
	</script>
5、函数默认值

参数变量是默认声明的所有不能用leth或const再次声明

使用参数默认值时函数不能有同名参数

	<script type="text/javascript">
		//函数默认值
		function add(a,b=4){
			return a+b
		}
		let sum = add(4)
		console.log(sum);
	</script>
6、剩余运算符(剩余参数)
	<script type="text/javascript">
		//数组
		let arr = [12, 23, 45]
		let [a, ...b] = arr
		console.log(a, b);

		//函数
		function add(...args) {
			let sum = 0
			for (let i = 0; i < args.length; i++) {
				sum += args[i]
			}
			return sum
		}
		let sum = add(5, 5, 5, 5,5)
		console.log(sum);
	</script>
7、箭头函数

使用"箭头"函数(>=)定义函数

let f = v => v;
// 等同于
let f = function (v) {
  return v;
}; 

特点:简洁、参数、函数体的大括号

普通写法

//箭头函数
let f3 = ()=>{
		console.log('箭头函数');
	}
	f3()

简便写法

省略大括号,函数体只有一条语句

let f4 = ()=>console.log('省略大括号');
f4()

省略小括号,有一个参数的时候

let f5 = a => console.log('省略小括号了', a);
f5(666)

有多个参数时,小括号不可以省略

let f6 = (k,v)=>console.log('多个参数,不可省略小括号',k,v);
f6(66,88)

return

//箭头函数
let f7 = (t, y) => {
	return t + y
}
let s1 = f7(6, 6)
console.log(s1);

//简写
let f8 = (d, h) => d + h
let s2 = f8(8,8)
console.log(s2);

如果返回对象,需要用小括号括起来

let f9 = id=>
	({
	id:100,
	name:'zhangsan',
	age:23
	})
let s3 = f9(100)
console.log(s3);
8、箭头函数的this指向问题

a、箭头函数的this不是调用的时候决定的,而是在定义的时候处在的对象就是它的this

b、扩展理解

b.1、箭头函数的this判断外层是否有函数

b.2、如果有,外层函数的this就是内部箭头函数的this

b.3、如果没有,则this是window

<body>
	<button id="btn">点我呀你个**</button>
</body>
<script type="text/javascript">
	let obtn = document.getElementById("btn")
	obtn.onclick = function(){
		console.log(this);		//普通函数this指向当前对象:button
	}
	obtn.onclick = ()=>console.log(this);		//箭头函数this向:window
</script>

箭头函数使用注意事项

a、函数体内的this对象是定义时所在的对象

b、不可以当作构造函数

c、不可以使用arguments对象

箭头函数不适用场合

a、定义对象的方法,且该方法内部包括this

b、需要动态this的时候,也不应使用箭头函数

第八章(es6进阶)

1、模板字符串

ole.log(j);
console.log(k);


##### 5、函数默认值

参数变量是默认声明的所有不能用leth或const再次声明

使用参数默认值时函数不能有同名参数

```javascript
	<script type="text/javascript">
		//函数默认值
		function add(a,b=4){
			return a+b
		}
		let sum = add(4)
		console.log(sum);
	</script>
6、剩余运算符(剩余参数)
	<script type="text/javascript">
		//数组
		let arr = [12, 23, 45]
		let [a, ...b] = arr
		console.log(a, b);

		//函数
		function add(...args) {
			let sum = 0
			for (let i = 0; i < args.length; i++) {
				sum += args[i]
			}
			return sum
		}
		let sum = add(5, 5, 5, 5,5)
		console.log(sum);
	</script>
7、箭头函数

使用"箭头"函数(>=)定义函数

let f = v => v;
// 等同于
let f = function (v) {
  return v;
}; 

特点:简洁、参数、函数体的大括号

普通写法

//箭头函数
let f3 = ()=>{
		console.log('箭头函数');
	}
	f3()

简便写法

省略大括号,函数体只有一条语句

let f4 = ()=>console.log('省略大括号');
f4()

省略小括号,有一个参数的时候

let f5 = a => console.log('省略小括号了', a);
f5(666)

有多个参数时,小括号不可以省略

let f6 = (k,v)=>console.log('多个参数,不可省略小括号',k,v);
f6(66,88)

return

//箭头函数
let f7 = (t, y) => {
	return t + y
}
let s1 = f7(6, 6)
console.log(s1);

//简写
let f8 = (d, h) => d + h
let s2 = f8(8,8)
console.log(s2);

如果返回对象,需要用小括号括起来

let f9 = id=>
	({
	id:100,
	name:'zhangsan',
	age:23
	})
let s3 = f9(100)
console.log(s3);
8、箭头函数的this指向问题

a、箭头函数的this不是调用的时候决定的,而是在定义的时候处在的对象就是它的this

b、扩展理解

b.1、箭头函数的this判断外层是否有函数

b.2、如果有,外层函数的this就是内部箭头函数的this

b.3、如果没有,则this是window

<body>
	<button id="btn">点我呀你个**</button>
</body>
<script type="text/javascript">
	let obtn = document.getElementById("btn")
	obtn.onclick = function(){
		console.log(this);		//普通函数this指向当前对象:button
	}
	obtn.onclick = ()=>console.log(this);		//箭头函数this向:window
</script>

箭头函数使用注意事项

a、函数体内的this对象是定义时所在的对象

b、不可以当作构造函数

c、不可以使用arguments对象

箭头函数不适用场合

a、定义对象的方法,且该方法内部包括this

b、需要动态this的时候,也不应使用箭头函数

第八章(es6进阶)

1、模板字符串
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值