Javascript - 1 引入方式,变量常量,数据类型,运算符,流程控制,数组,函数,对象,DOM

  • Javascipt:是一门弱类型的脚本语言,需要在网页上执行。
  • html负责框架结构,css负责样式修饰,js负责行为交互,动态效果。
  • 前端三大件:html,css,js。
  • javascript 和 java 之间没有任何关系。

js的三种引入方式

  • 行内脚本
  • 页内脚本
  • 引入外部样式表

示例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			div {
				width: 300px;
				height: 200px;
				background-color: pink;
			}
		</style>
		<!-- 页内样式 -->
		<script type="text/javascript">
			var a = '你好';
			alert(a);
			console.log("你好,世界!");//控制台打印输出:你好,世界!
			console.log(a);//控制台打印输出:你好
		</script>
		
		<!-- 引入外部样式 -->
		<script src="js/index.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<!-- 行内引入 -->
		<div onclick="alert('你好,世界!')"></div>
	</body>
</html>

Javascript

console.log("引入外部脚本文件");

打印输出结果
在这里插入图片描述

变量常量,数据类型,运算符

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//es5,2004版。es6版本
			// 1.变量常量 
			var a = 10;
			var b = 20.5;
			var c = 'aa';
			var d = "你好";
			var e = true;

			//const a1 = 20;//常量
			//a1 = 30;
			//2.数据类型
			//第一种:原始类型,第二种:引用类型
			//原始类型:number,string,boolean,null,undefined
			var f;
			console.log(f);

			//3.运算符
			//算术运算符:+ - * / %
			var c1 = 20;
			var c2 = 3;
			console.log(c1 / c2);
			console.log(c1 % c2);

			var d1 = 0.1;
			var d2 = 0.2;
			var d3 = 0.3;
			console.log(d2 - d1);
			console.log(d3 - d2);

			//比较运算符:> < >= <= == !=   额外的:=== 恒等于 !== 
			var e1 = 1;
			var e2 = "1";
			console.log(e1 == e2); //双等号不判断数据类型
			console.log(e1 === e2); //不仅值要相等,数据类型也要相同

			//逻辑运算符:&& || ! 与java完全相同
			var year = 2004;
			if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
				console.log("闰年");
			}

			//赋值运算符:+= -= *= /= %= ++ --,与java完全相同

			//示例:99乘法表
			for (var i = 1; i <= 9; i++) {
				var out = "";
				for (var j = 1; j <= i; j++) {
					out += j + "*" + i + "=" + j * i + " ";
				}
				console.log(out);
			}
		</script>
	</head>
	<body>
	</body>
</html>

在这里插入图片描述

流程控制:和java完全相同

  • 顺序结构
  • 选择结构:if if…else switch…case
  • 循环结构:while for
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//输出所有三位数的素数
			for (var i = 100; i <= 999; i++) {
				var isSushu = true;
				for (var j = 2; j < i; j++) {
					if (i % j == 0) {
						isSushu = false;
						break;
					}
				}
				if (isSushu) {
					console.log(i + "是素数")
				}
			}
		</script>
	</head>
	<body>
	</body>
</html>

数组

以下内容参考自W3school在线教程

  • 数组是一种特殊类型的对象。在 JavaScript 中对数组使用 typeof 运算符会返回 “object”。
var person = ["Bill", "Gates", 62];
var person = {firstName:"John", lastName:"Doe", age:46};
  • JavaScript 变量可以是对象。数组是特殊类型的对象。可以在相同数组中存放不同类型的变量。
myArray[0] = Date.now;
myArray[1] = myFunction;
myArray[2] = myCars;
  • 关联数组:很多编程元素支持命名索引的数组。具有命名索引的数组被称为关联数组(或散列)。JavaScript 不支持命名索引的数组。在 JavaScript 中,数组只能使用数字索引。
var person = [];
person[0] = "Bill";
person[1] = "Gates";
person[2] = 62;
var x = person.length;          // person.length 返回 3
var y = person[0];              // person[0] 返回 "Bill"
  • 假如使用命名索引,JavaScript 会把数组重定义为标准对象。之后,所有数组的方法和属性将产生非正确结果。
var person = [];
person["firstName"] = "Bill";
person["lastName"] = "Gates";
person["age"] = 62;
var x = person.length;         // person.length 将返回 0
var y = person[0];              // person[0] 将返回 undefined
  • 数组和对象的区别
  • 在 JavaScript 中,数组使用数字索引。在 JavaScript 中,对象使用命名索引。数组是特殊类型的对象,具有数字索引。

示例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
		// 数组可以理解为对象
			var a = [];//定义空数组,语法糖
			a[0] = 10;
			a[1] = "hello";
			a[3] = 4.5;
			a[20] = "你好";
			// 从尾部添加一个数据,pop即从尾部取出并移除
			a.push("push一个数据")
			//从头部压入一个数据,shift即从头部取出并移除
			a.unshift("unshift一个数据");
			console.log(a.length);
			console.log(a);
			//冒泡排序
			var b = [10,2,3,48,33,20,1,49,30];			
			console.log("b数组排序前的结果为:"+b);
			for(var i = 0;i<b.length;i++){
				for(var j = 0;j<b.length;j++){
					if(b[j]>b[j+1]){
						var t = b[j];
						b[j] = b[j+1];
						b[j+1] = t;
					}
				}
			}
			console.log("b数组排序后的结果为:"+b);
			//裁切数组,从2~4,被裁切的原数组不变
			console.log(b.slice(2,4));
			console.log(b);
			//裁切后原数组改变
			console.log(b.splice(2,4));
			console.log(b);
	        var c = new Array();//定义空数组
		</script>
	</head>
	<body>
	</body>
</html>

函数

示例 1

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//定义函数参数无需写类型,都是var
			function jieCheng(n) {
				var result = 1;
				for (var i = 1; i <= n; i++) {
					result *= i;
				}
				return result;
			}
			console.log(jieCheng(5));
		</script>
	</head>
	<body>
	</body>
</html>

在这里插入图片描述

对象

示例一

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//js的面向对象
			//js中的对象,就是键值对的集合
			var a = {}; //对象,空对象,语法糖
			//var a = new Object();//等同的

			//自由对象
			var a1 = {
				name: "张三",
				sex: "男"
			};
			console.log(a1);
			//添加一个新的键值对
			a1.age = 30;
			a1["birthday"] = "2002-1-1";
			a1[2] = 100;
			console.log(a1);
		</script>
	</head>
	<body>
	</body>
</html>

示例 2

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//在js中,函数就是一个对象

			function Student(name, sex, age) {
				this.name = name;
				this.sex = sex;
				this.age = age;

				this.sayHello = function() {
					console.log(this.name + " says hello");
				};
			}
			var stu1 = new Student("张三", "男", 20);
			console.log(stu1.name);//张三
			console.log(stu1["sex"]);//男
			stu1.sayHello();//张三 says hello

			stu1.birthday = "2000-1-1";
			console.log(stu1);//添加birthday属性

			//移除一个属性
			delete stu1.birthday;

			console.log(stu1);

			//js继承机制
			MidSchoolStudent.prototype = new Student();
			
			function MidSchoolStudent(name, sex, age) {
				this.name = name;
				this.sex = sex;
				this.age = age;
			}
			//js的面向对象(封装、继承、多态)是通过原型机制来实现的,和java完全不同

			var stu2 = new MidSchoolStudent("李四", "女", 35);
			stu2.sayHello();//李四 says hello
		</script>
	</head>
	<body>
	</body>
</html>

DOM

  • 文档对象模型。Doucment Object Model。
    在 js 中,将每一个元素理解成一个对象。
  • document是内置的一个对象,表示整个html文档
  • 常用dom对象的属性和方法:
  • tagName:
  • innerText:返回元素的内容文本,不包括html。
  • innerHTML:返回元素的html内容。
  • style:就是获取元素的行内样式。
  • className:类名称
  • classList:类名称集合

示例 1

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>

	</head>
	<body>
		<div id="mydiv" class="outer" style="color: blue;"><span>初始值</span></div>


		<script type="text/javascript">
			// DOM:Document Object Model,被译为文档对象模型。
			// DOM被设计用于解析HTML页面文档,方便JavaScript语言通过DOM访问和操作HTML页面中的内容。
			// 浏览器加载并运行HTML页面后,会创建DOM结构。由于DOM中的内容被封装成了JavaScript语言中的对象,所以我们可以使用JavaScript语言通过DOM结构来访问和操作HTML页面中的内容。

			// Document对象提供实现定位页面元素的方法具有如下几种:

			// getElementById()方法:通过页面元素的id属性值定位元素。
			// getElementsByName()方法:通过页面元素的name属性值定位元素。
			// getElementsByTagName()方法:通过页面元素的元素名定位元素。
			// getElementsByClassName()方法:通过页面元素的class属性值定位元素。
			// querySelector()方法:通过CSS选择器定位第一个匹配的元素。
			// querySelectocAll()方法:通过CSS选择器定位所有匹配的元素。

			var mydiv = document.getElementById("mydiv");
			console.log(mydiv.tagName.toLowerCase());//div
			console.log(mydiv.innerText);//初始值
			console.log(mydiv.innerHTML);//<span>初始值</span>
			console.log(mydiv.id);//mydiv

			mydiv.innerText = "修改初始值";
			mydiv.style.color = "red";
			console.log(mydiv.style);//输出所有的style样式:CSSStyleDeclaration
			mydiv.style.backgroundColor = "pink";
			mydiv.style["background-color"] = "skyblue";
			mydiv.style.width = "100px"

			console.log(mydiv.className);//outer
			mydiv.className = "inner";

			mydiv.classList.add("a");
			mydiv.classList.add("b");
			mydiv.classList.add("c");
			mydiv.classList.remove("b");
		</script>
	</body>
</html>

在这里插入图片描述

  • dom的增删改查
  • dom对象.querySelector: 查询第一个满足指定选择器的元素。
  • dom对象|querySelectorAll: 查询所有满足指定选择器的元素,返回类数组。

示例 1

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div class="outer"></div>
		<div class="inner">
			<span>
				<div class="inner" id="aaa"></div>
			</span>
		</div>
		
		<script type="text/javascript">
			//推荐使用
			//
			var md = document.querySelector(".inner");
			
			var mds = md.querySelectorAll("div");
			console.log(mds);
		</script>
	</body>
</html>

示例 2

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.outer {
				width: 300px;
				height: 200px;
				background-color: pink;
			}
		</style>
	</head>
	<body>
		<div class="outer"></div>
		
		<div class="wrapper"></div>
		
		<script type="text/javascript">
			var d = document.querySelector(".outer");
			
			//创建一个span元素对象
			var dom = document.createElement("span");
			dom.innerText = "新增元素";
			dom.style.color = "green";
			dom.style.padding = "5px 10px";
			dom.style.backgroundColor = "rgba(255,255,255,0.5)";
			
			//表示添加一个子元素
			d.appendChild(dom);
			
			var wrapper = document.querySelector(".wrapper");
			wrapper.appendChild(d);
		</script>
	</body>
</html>

示例 3

  • 父dom.appendChild(子dom): 添加一个子元素。
  • document.createElement() :可以创建一个全新的dom对象。
  • 父dom.insertBefore(新增元素, 子dom):父dom元素插入一个子元素到"子dom"的前面。
  • dom元素。remove():移除自身
  • 父daom元素.removeChild(子dom):父元素移除一个子元素

示例 1

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#tbl {
				margin: 0 auto;
				border-collapse: collapse;
			}

			#tbl tr>td {
				border: 1px solid #ccc;
				padding: 30px 30px;
				text-align: center;
			}
		</style>
	</head>
	<body>
		<table id="tbl">
			<tr>
				<td>1</td>
				<td>2</td>
				<td>3</td>
			</tr>
		</table>
		<script type="text/javascript">
			var tr = document.createElement("tr");
			for (var i = 0; i < 3; i++) {
				var td = document.createElement("td");
				td.innerText = i + 4;
				tr.appendChild(td);
			}
			
			var tr1 = document.querySelector("#tbl tr");
			//获取tr1的父元素
			var tbl = tr1.parentElement;
			tbl.appendChild(tr);
			
			var td1 = document.querySelector("#tbl td");
			var a = document.createElement("a");
			a.innerText = "去百度";
			td1.appendChild(a);
			
		</script>
	</body>
</html>

  • DOM的四向遍历(父,子,兄,第)
  • 获取父元索: parentElement, 可以获取父元素。
  • children:返回所有的子元素,返回值是类数组
  • previonsElementSibling:返回前一个兄元素,如果没,则返回null
  • nextElementSibling:后一个弟元素,如果没有,则返回null

示例 1

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<ul>
			<li>1</li>
			<li>2</li>
			<li>3</li>
			<li>4</li>
			<li>5</li>
		</ul>

		<script type="text/javascript">
			var lis = document.querySelectorAll("ul>li");
			var li3;
			for (var i = 0; i < lis.length; i++) {
				if (lis[i].innerText === "3") {
					li3 = lis[i];
					break;
				}
			}

			var li25 = document.createElement("li");
			li25.innerText = "2.5";

			var ul = li3.parentElement;
			//插入一个子元素到某个子元素的前面
			ul.insertBefore(li25, li3);
			
			var li5 = document.querySelector("ul>li:last-child");
			//移除自身
			//li5.remove();
			
			//父元素移除一个子元素
			ul.removeChild(li5);
			
			console.log(ul.childElementCount);
			
			//返回一个类数组,返回其所有子元素
			var lis = ul.children;
			console.log(lis);
			
			//返回前一个兄元素
			var li2 = li3.previousElementSibling;
			console.log(li2.innerText);
			
			//返回后一个弟元素
			var li4 = li3.nextElementSibling;
			console.log(li4.innerText);
			
		</script>
	</body>
</html>

  • dom事件处理
  • js和人进行行为交互
  • 添加事件有三种方式
  • 直接在标记内,定义onXXX事件
  • 给dom元素添加onXXX属性,与第一种指定方式效果完全相同
  • 推荐:dom元素.addEvenListener(“事件名称”,事件处理函数),可以给一个事件添加多个属性。dom元素.removeEvenListner(“事件名称”,事件处理函数名)。
  • 事件类型
  • click事件,单击事件,频率最高的事件,可以占到90%以上。

示例 1

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			html,
			body {
				height: 100%;
			}

			body {
				margin: 0;
				overflow: hidden;
			}

			div {
				width: 300px;
				height: 200px;
				background-color: pink;
				/* 过渡 */
				transition: all .5s;
				position: absolute;
				top: 0;
				left: 0;
			}
		</style>
	</head>
	<body>
		<button id="btn" type="button" onclick="changeColor()">点我</button>

		<div></div>

		<script type="text/javascript">
			var div = document.querySelector("div");
			/* div.onclick = function(){
				div.style.width = "400px";
				div.style.height = "300px";
				div.style.backgroundColor = "green";
			}; */

			//把事件取消
			// div.onclick = null;

			var timer;
			//添加事件监听器
			div.addEventListener("click", function() {
				var sw = document.body.offsetWidth;
				var sh = document.body.offsetHeight;
				//每隔一定的时间执行一个操作
				timer = setInterval(function() {
					//左偏移
					var offsetLeft = parseInt((Math.random() * sw));
					var offsetTop = parseInt(Math.random() * sh);

					div.style.top = offsetTop + "px";
					div.style.left = offsetLeft + "px";
				}, 1000);
			});

			div.addEventListener("click", function(){
				console.log("移动开始");
			});
			
			//移除事件
			div.removeEventListener("click",func1);


			function func1() {
				console.log("移动开始");
			}


			function changeColor() {
				var btn = document.querySelector("#btn");
				btn.style.backgroundColor = "red";

				//停止定时器
				clearInterval(timer);
			}
		</script>
	</body>
</html>

  • dblclick:双击事件
  • onload:window对象和img对象,可以触发
  • keypress:按下一个键。字符

示例 1

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//页面载入结束之后 
			window.onload = function() {
				var mydiv = document.querySelector("#mydiv");
				console.log(mydiv);
				var ipt = document.querySelector("#username");

				ipt.addEventListener("keypress", function(e) {
					console.log(e.key + ":" + e.keyCode);
				});
			}
		</script>
	</head>
	<body>
		<div id="mydiv"></div>

		<input type="text" id="username">
	</body>
</html>

  • keydown/键按下事件,可以持续触发,谈起事件只触发一次

示例 1

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#chrome {
				width: 60px;
				height: 60px;
				background: url(img/091.png) no-repeat center center/cover;
				position: absolute;
				bottom: 0;
				left: calc(50% - 30px);
			}
		</style>
		<script type="text/javascript">
			window.onload = function() {
				var chrome = document.querySelector("#chrome");
				//键按下
				document.addEventListener("keydown", function(e) {
					//当前元素的上偏移
					var currentTop = chrome.offsetTop;
					//当前元素的左偏移
					var currentLeft = chrome.offsetLeft;
					switch (e.key) {
						case 'w':
							chrome.style.top = currentTop - 5 + "px";
							break;
						case 'a':
							chrome.style.left = currentLeft - 5 + "px";
							break;
						case 's':
							chrome.style.top = currentTop + 5 + "px";
							break;
						case 'd':
							chrome.style.left = currentLeft + 5 + "px";
							break;
					}
				});
			}
		</script>
	</head>
	<body>
		<div id="chrome"></div>
	</body>
</html>

  • 定时任务
  • setTimeout:在指定的时间后,执行一个操作。 只执行一次。
  • setInterval: 每隔指定的时间后,执行一个操作。
  • 键盘相关事件:onPress,onKeyDown,onKeyUp

示例一

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.mydiv {
				width: 300px;
				height: 200px;
				background-color: pink;
				/* margin-left: 100px;
				margin-top: 100px; */
				position: absolute;
			}
		</style>
		<script type="text/javascript">
			window.onload = function() {
				var mydiv = document.querySelector(".mydiv");
				mydiv.addEventListener("mousedown", function(e) {
					console.log("鼠标按下");
					console.log(event.button);
				});

				mydiv.addEventListener("mouseup", function(e) {
					console.log("鼠标弹起");
				});

				mydiv.addEventListener("mousemove", function(e) {
					console.log("鼠标移动");
					console.log(e.pageX + ":" + e.pageY);
				});

				mydiv.addEventListener("mouseenter", function(e) {
					console.log("鼠标进入");
					//console.log(e.pageX + ":" + e.pageY);
					mydiv.style.backgroundColor = "green";
					var currentLft = mydiv.offsetLeft;
					var currentTop = mydiv.offsetTop;
					
					mydiv.style.left = currentLft + 5 + "px";
					mydiv.style.top = currentTop + 5 + "px";
				});

				mydiv.addEventListener("mouseleave", function(e) {
					console.log("鼠标离开");
					//console.log(e.pageX + ":" + e.pageY);
					mydiv.style.backgroundColor = "pink";
					
					var currentLft = mydiv.offsetLeft;
					var currentTop = mydiv.offsetTop;
					
					mydiv.style.left = currentLft - 5 + "px";
					mydiv.style.top = currentTop - 5 + "px";
					
				});
			}
		</script>
	</head>
	<body>
		<!-- 鼠标相关事件 -->
		<div class="mydiv" onm></div>
	</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值