第四周JS学习

272 阅读17分钟

------------------------------------day19-2022.4.24---------

1、用户确认框:var bool=confirm("提示文字"); true->点击了确认 false->点击了取消

2、百度地图:简单 1、打开百度,搜索百度地图开放平台,打开这个网站 2、右上角注册/登录:百度账号 3、拉到最下面:认证成为开发者 4、来控制台->应用管理->我的应用->创建应用:名称随意->应用类型:浏览器端->白名单写一个* 5、恭喜你获取到了密钥 6、鼠标放到导航条的开发文档上->点击JavaScriptAPI->点击示例DEMO->选择你喜欢的地图,梭他的代码。记得把该改的地方修改一下,千万别忘了密钥 7、老版地图可以混合,新版地图也可以混合 百度地图其实对于别的公司来说基本没啥用:主要用于展示自己所在的位置

----------------------------------------------------------day20-2022.4.25------------------------------------------------------- 1、BOM:Browser Object Model:浏览器对象模型,专门用于操作浏览器的:常用对象:history、location、navigator、screen、event 个人觉得重要的只有2个:window(定时器)、event 1、window对象:扮演着两个角色: 1、代替了全局对象global 2、window->当前窗口

2、*打开新链接的方式:提升用户的体验感:nga论坛就是全用的_self所以导致我们的体验感极差 1、在当前窗口打开,可以后退 HTML:内容 JS:open("url","_self");

2、在当前窗口打开,禁止后退:以电商网站来说,付款过后,禁止后退
	history:保存当前窗口的打开过的url(历史记录),有了历史浏览器才可以前进和后退
	location:保存当前窗口正在打开的url
	     JS:location.replace("新url"); - 替换掉当前网址,网址变化了,网页一定也会变化,但是替换不是跳转,不会产生历史记录

3、新窗口打开,可以打开多个
	HTML:<a href="url" target="_blank">内容</a>
	  JS:open("url","_blank");
	
4、新窗口打开,只能打开一个:以电商网站来说,结账页面理论来说只能打开一个
	HTML:<a href="url" target="自定义/随便">内容</a>
	  JS:open("url","自定义/随便");

	每个窗口的底层都有一个name名称,如果_self找到当前窗口的名称,如果_blank随机出不重复的新名称
	自定义:判断有没有这个窗口已经打开了,如果已经打开了,则替换此窗口

*a标签的用途:
   1、跳转:<a href="网址">内容</a>
   2、锚点:<a name="name名">内容</a>
   3、下载:<a href="xx.zip/rar/exe">内容</a>
   4、打开图片/文本:<a href="xx.图片后缀/txt">内容</a>
   5、直接书写js:<a href="javascript:js语句;">内容</a>

window别的属性和方法:
	打开小窗口:var newW=open("url","target/自定义","width=,height=,left=,top=");
	关闭窗口:window.close(); newW.close();
	改变小窗口的位置:newW.moveTo(x,y);
	改变小窗口的大小:newW.resizeTo(newWidth,newHeight);

	问题:每个人的电脑的分辨率是不一样的,固定写1920和1080不合适
	获取浏览器大小:outerWidth/outerHeight
       *获取浏览器文档显示区域大小:innerWidth/innerHeight
	获取屏幕大小:screen.width/height

扩展:获取鼠标的x/y坐标:
	事件函数的第一个形参会自动接住事件对象e->event

	获取鼠标的坐标:
		1、鼠标相当于屏幕的位置:e.screenX/Y
		2、鼠标相当于body的位置:e.clientX/Y
	       *3、鼠标相当于网页的位置:e.pageX/Y




2、*****定时器:网页变得好玩了
   1、周期性:每过一段时间就会执行一次
	开启:timer=setInterval(callback,间隔毫秒数);
	停止:clearInterval(timer);

   2、一次性:等待一段时间,只会执行一次就结束了
	开启:timer=setTimeout(callback,间隔毫秒数);
	停止:clearTimeout(timer);

   两者没有任何区别,甚至可以互换,你喜欢哪个就用哪个

面试题:循环、函数、定时器,都可以反复执行,他们的区别在哪里呀?
	循环:一旦开页面,几乎瞬间就结束了
	函数:调用几次就执行几次,或 用户触发几次就执行几次
	定时器:每过一段事件就会执行一次

----------------------------------------------------------day21-2022.4.26------------------------------------------------------ BOM常用对象:window、screen(我们不做桌面应用)、history、location、navigator、event...

1、history:保存当前窗口的打开【过】的url历史记录 - 和浏览器的历史记录不是同一个东西 作用:浏览器自带 前进:history.go(1); 后退:history.go(-1); 刷新:history.go(0);

2、location:保存当前窗口【正在】打开的url

***常识:一个网址由哪几部分组成? - 原因我们马上快接触后端了,了解了url对前后端开发有帮助
	协议://域名:端口号/文件相对路径?查询字符串
	http://127.0.0.1:8020/bom02/new/01-3.html
	https://www.baidu.com/s?wd=abc&rsv_spt=1&rsv_iqid=0xd83b315200019706&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=3&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=862&rsv_sug4=862

	协议:http/https/ftp...
	域名:域名:www.baidu.com,域名是要花钱买的,底层就是一个主机号
	端口号:默认端口:http-> 80 https->443	默认端口可以省略不写
	文件相对路径:百度加密了
	查询字符串:?后面的东西,前端传到后端的东西,以我们现在的了解(表单提交的东西、以后ajax也可以)。

属性:
  1、location的属性可以获取到当前url的各个部分,不需要记忆,只需要console.log(location); - 卢老师三阶段:location.search

方法:
  跳转:
	*location="新url"
	location.href="新url"
	location.assign("新url")

  刷新:location.reload();

  跳转后,禁止后退:location.replace("新url"); - 不会产生历史记录

3、navigator:保存了浏览器的相关信息 - 以前他很棒,js可以判断出浏览器的版本号和名称: 为什么现在不行了: 1、随着JS的发展,很多的兼容的地方,前辈们提供了兼容API 2、现在流行趋势:是移动端(IOS+Andriod),根本没有老IE,不必考虑兼容问题。

navigator.userAgent:会得到一个字符串,作用:理解为是js版本的css hack(专门为老IE准备的写兼容的地方)

4、event:事件:用户来触发的或浏览器自动触发的:

1、绑定事件:3种
   1、在HTML上面用HTML属性绑定事件:
		<elem on事件名="js语句"></elem>
		缺点:
		  1、无法动态绑定事件
		  2、不符合内容与行为分离的原则
		  3、无法使用多个函数对象

  *2、在js中使用事件处理属性:
	elem.onclick=function(){
		操作
	}

	优点:
	  1、动态绑定事件
	  2、符合内容与行为分离的原则

	缺点:无法使用多个函数对象 - 为什么不把多个函数合成一个呢,我个人觉得不算缺点

   3、绑定事件的API:
	主流:elem.addEventListener("事件名",callback);
	老IE:elem.attachEvent("on事件名",callback);
	兼容:
		if(elem.addEventListener){
			elem.addEventListener("事件名",callback);			
		}else{
			elem.attachEvent("on事件名",callback);
		}

	优点:
	  1、动态绑定事件
	  2、符合内容与行为分离的原则
	  3、可以使用多个函数对象

	缺点:
	  1、老IE不支持,有兼容性问题

2、事件周期:从事件开始触发,一直到事件结束的全过程
	主流:3个
	  1、捕获阶段 - 从外向内的,记录着哪些事件要执行
	  2、目标触发 - 你真正触发的元素,会优先执行
	  3、冒泡阶段 - 由内向外,冒泡执行

	老IE:2个
	  没有捕获阶段

	面试题:事件的触发的顺序,可不可以修改:可以!
		但是只有主流可以,elem.addEventListener("事件名",callback,true);//一旦第三个参数为true,在捕获阶段之前提前执行
		老IE不可以,因为老IE没有第三个参数,也没有捕获阶段

3、*****如何获取事件对象event:
	主流:事件处理函数的第一个形参会自动得到event对象
	老IE:event;
	兼容:event;//第二次小三上位,主流也能支持

	有了event对象我们可以干什么?
		1、*获取鼠标的坐标: - 实用
			e.screen/client/pageX|Y

		2、*阻止冒泡:- 笔试面试
			主流:e.stopPropagation();
			老IE:e.cancelBubble=true;
			兼容:
				if(e.stopPropagation){
					e.stopPropagation();
				}else{
					e.cancelBubble=true;
				}
		
		3、事件委托(利用冒泡) - 超级实用
			什么是:多个子对象都用了同一个事件,把事件绑定在父元素身上
			为什么:代码优化!创建的事件监听对象越多,性能越差,希望绑定的事件越少越好
			获取目标元素:实际触发事件的元素
			    当前元素:this - 水性杨花:不同场景,指向不同的角色
				主流:e.target;
				老IE:e.srcElement;
				兼容:e.srcElement;//第三次小三上位


		4、阻止浏览器的默认行为:实用
			F5能刷新
			F12能查看控制台、源代码
			右键会有一个弹出框
			每个键盘按键都可以阻止默认行为
			a标签默认会跳转
			submit按钮默认会提交 - 都可以阻止
			主流:e.preventDefult();
			老IE:e.returnValue=false;
			兼容:if(e.preventDefult){
					e.preventDefult();
			      }else{
					e.returnValue=false;
			      }

			新事件:
			  右键:window.oncontextmenu
			  键盘:window.onkeydown/keypress/keyup

		5、*获取键盘的键码:- 并不重要,我们不做游戏开发,我们是应用程序
			e.keyCode; - 不需要记忆,百度或console输出看

JS一共分三部分:ES+BOM(event面试必备)+DOM

-------------------------------------------------------day22-4.27------------------------------------------------------------ 1、学习原因: 1、前端招聘要求 - 熟悉 或 了解一门服务器端语言者优先 2、对于我们前端来说。了解服务器的机制,更好更快的进行前端开发

扩展: 全栈工程师 - 客户端(PC+移动端+小程序+app) + 服务器端(php+node.js) + 数据库(MySQL+mongoDB) 技术类发展: 全栈 - 涉及多个领域,但是每个领域都会用,不必精通 -> 架构师 -> 项目经理 -> 技术总监 专家 - 精通单个领域 -> 能创造全球能火的东西,vue 销售类发展: 产品 -> 产品经理 -> 产品总监 教育类: 创业类:最不推荐

可能直接成为全栈的语言:
	1、java语法 - 不包含移动端(安卓)
	2、javascript语言
		客户端 - 开发根本
		服务器端 - node.js 历史上第一次一门语言就可以通吃前后端
		数据库 - MySQL+mongoDB
		移动端 - 网页/app(跨所有平台)/小程序/公众号 - 只需要一个前端,学习一点点ios和andriod的语法就可以混合开发 - 市场上还有很多的混合开发框架

server:2天
MySQL一天 + PHP一天
对服务器的掌握 - 入门(以后你自学也能学懂)
最终目的:登录 + 注册 + 搭配上3天ajax完成【全栈】一条龙开发:增删改查
小项目:图书/金夫人/咖啡管理系统

2、基本内容: 服务器概念: 简单来说就是一个电脑 生活中:微机 商业/国家中:小型机(大概造价几十万,好的上百万)、中型机、大型机、超级计算机

	拥有服务器的方式:
		1、买 - 对小公司遭不住
		2、买一套配置较好的微机 - 别的行业的公司还不错
		3、租云服务器端 - 腾讯云/阿里云/新浪云/百度云... - 配置自选,价格高,配置好

对于开发人员来说:
	硬件服务器 - 电脑
	软件服务器 - 中间件(软件可以将你的电脑变成一台服务器,其他人都可以来访问)

软件架构:服务器很重要
	C/S - Client(客户端)/Server(服务器端)
		举例:
		  大型网络游戏
		优点:
		  用户体验感较好
		  运行稳定
		  对带宽的要求低
		缺点:
		  占硬盘空间,吃配置
		  更新过于麻烦 - 服务器端/客户端都要更新

	B/S - Browser(浏览器端)/Server(服务器端)
		举例:
		  网页游戏
		  云平台
		优点:
		  几乎不占硬盘,不吃配置,云服务器运算
		  更新简单 - 服务器端更新,不需要客户端更新
		缺点:
		  带宽要求高
		  体验感相对较差 - 越来越好

	但是以前的单机游戏还真的没有服务器 - 卖DLC

XAMPP软件 - 中间件 安装步骤:双击->一路往下冲 APACHE -> 用于运行PHP的服务,保证apache能够成功运行 出现错误: 1、直接弹出了一个警告框:你的电脑里缺少api-ms-win-crt-conio-l1-1-0.dll文件 解决:粘贴到C:\Windows\SysWOW64 2、错误日志:error:apache shutdown unxxxx - 端口号被占用了 解决:点击config按钮,选择第一项可以修改http的默认端口号,选择第二项可以修改https的默认端口号

TOMCAT -> 用于运行java的服务

如果你的apache成功开启了,恭喜你,你的服务器已经开启了(私网/局域网)

如何访问apache服务器,其实apache服务控制着一个文件:D:\xampp\htdocs
	打开浏览器:
		127.0.0.1:端口号
		localhost:端口号 - 这两种方式只有自己可以用
		主机号:只有自己可以用

	其他人也可以来访问:
		打开cmd输入ipconfig,查看ipv4发给对方
		192.168.20.xx:端口号

	在服务器上搭建一个自己的项目:
		把你做过任意一个项目:复制d:/xampp/htdocs

	添加网页小图标:随便一张图:名字必须改为:favicon.ico
		放到d:/xampp/htdocs

MySQL - 数据库产品 关系型数据库 - 以表格为主 Oracle - Oracle(甲骨文) 主要应用于【企业级】开发市场,企业级:大公司、国企(银行、警察局)、事业单位,不差钱的公司,安全性非常高 - 收费 MySQL - Oracle(甲骨文) 主要应用于【互联网】开发市场 - 中小型公司的首选 - 免费的 sql server - 大学讲课:微软

非关系型数据库 - 没有固定的格式
	是一种运动 - 反关系型数据库
	mongoDB - 主流产品:以JSON格式为主

MySQL:
最初是由MySQL AB推出
瞬间爆火 - 免费、简单、开源
	开源的好处:
		公司:免费聘请民间大佬为你测试、开发、优化
		个人:查看、修改、添加源代码 - 开挂
爆火的网站架构:LAMP - Linux系统 + Apache + MySQL + PHP - 这四个都是免费的,让中小型公司的老板非常的舒服
企业级网站架构:Linux系统(AIX) + javaEE + Oracle + weblogic - 一套架构起码上百万 - 安全性极高
MySQL AB后期被sun公司收购
sun公司后期被Oracle收购
	三个明星产品:
		Oracle
		MySQL - 社区版(免费)和商业版(收费)
		java

为什么叫mariaDB?
	1、MySQL的作者受到了排挤、并不关注、不重视
	2、MySQL的作者就自己出来重新做了原滋原味的MySQL,但是名字不能再叫mysql,版权问题
	3、MySQL的作者就用了自己女儿的名字来命名了MariaDB

MySQL基本内容:

 访问:21、图形化界面 - 傻瓜式
	要求:同时打开apache和mysql
	访问:127.0.0.1:端口号/phpmyadmin
	      localhost:端口号/phpmyadmin
	
	有的同学可能打不开

2、命令行方式:复杂,多,但是这样才能学到真正的SQL语句
	如何进入数据库:
		1、打开cmd
		2、输出cmd的命令:进入到d:/xampp/mysql/bin
		3、登录:mysql -uroot -p   直接回车,别加分号
		4、退出:exit
		5、学习SQL语句:关系型数据库的SQL语句是公用的
			1、数据库:
			   创建:CREATE DATABASE IF NOT EXISTS 数据库名称 CHARACTER SET utf8;
			
			   查看:SHOW DATABASES;

			   切换:USE 数据库名称;

			2、数据表:
			   数据库的数据类型
				数值:Int - 整型
				      Float/Double - 浮点型
				      Decimal - 精确值

				字符串:
				      CHAR - 长度固定的 
				      VARCHAR - 长度可变的

				日期:
				      DATE - YYYY/MM/DD
				      DATETIME - YYYY/MM/DD HH:mm:ss
				      TIMESTAMP - 时间戳(标识:唯一不重复 - id也可以)

			   创建数据表:
				CREATE TABLE 表名(
					字段名 数据类型,
					...
				);

			   举例:
				CREATE TABLE stu(
					id INT PRIMARY KEY AUTO_INCREMENT,
					name VARCHAR(30),
					pwd VARCHAR(6),
					email VARCHAR(30),
					vip VARCHAR(1)
				);

				主键约束:PRIMARY KEY - id不会重复
				主键自增:AUTO_INCREMENT - 每次会自动+1

			3*****数据:
				增:INSERT INTO 表名 VALUES(字段值,...);
				    举例:INSERT INTO stu VALUES(0,"周鸿奥","321321","zha@qq.com","0");

				删:DELETE FROM 表名 WHERE id=几; - 一旦删除就回不来了
				    举例:DELETE FROM stu WHERE id=5;

				改:UPDATE 表名 SET 字段名=字段值,...WHERE id=几;
				    举例:UPDATE stu SET name="周鸟奥",pwd="123123",vip="1" WHERE id=6;

				查:3种语法:
					1SELECT * FROM 表名; - 得到这个表里面所有的数据
					2SELECT name,pwd FROM 表名; - 得到这个表里面的用户名和密码
					3SELECT name,pwd FROM 表名 WHERE id=几; - 只会得到这个id的用户名和密码

				疑惑:
					1、为什么要大写:MySQL的约定,SQL语句要大写 - 这些语句以后都会放到后端脚本语言(php/node/c#/jsp)中运行
					2、以后是不会用cmd来录入数据的:不可能,以后必然是全栈操作,必须记住4个语句

-------------------------------------------------------day23-4.28----------------

1、PHP:最简单的一门语言

火爆架构:LAMP php文件后缀名.php 1、如何运行php文件: 打开apache,将你的项目/文件放到htdocs文件中,打开浏览器输入:127.0.0.1,打开你需要的文件 建议把整个htdocs文件夹直接拖到你的编辑器里 特殊:其实php文件也支持编写前端代码(HTML/CSS/JS)和PHP代码,以后我们上网的时候,看到网页的后缀是.php也不要奇怪 PHP和JS语法非常相似,但是做的事儿一定不一样: js - 客户端脚本语言(特效) php- 服务器端脚本语言(和数据库打交道,沟通) - 比JS更严格

2、PHP语句基础: 1、输出方式: 1、*echo(想要输出的内容) 或 echo 想要输出的内容; - 类似document.write输出在页面上支持标签的 只能四种标准类型,不能输出别的类型

	2var_dump(想要输出的内容) - 类似document.write输出在页面,但是输出的非常的详细,查看到数据类型和值
		能输出一切类型,但是太详细,以后直接放在PHP页面上输出的内容都会被前端拿走


2、变量和常量:
       *1、变量:值可以改变
	   语法:$变量名=值;
	   注意:使用$也不能省略

	2、常量:一旦创建不允许修改
	   语法:const 常量名=值;

3、*数据类型:
	四种标准/原始/基本/值类型:
		Int - 整型
		Float/Double - 浮点型
		布尔 - Bool
		字符串 - String - 有区别
			单引号 - 只能放入纯文本
			双引号 - 支持变量,类似于js模板字符串
				echo "我的名字叫{$name},今年{$age}岁,喜欢{$hobby}";

	两种复合类型:
		1、Array - 数组
			创建:
			  1、直接量:$arr=[值1,...] - 索引数组
			  2、内置函数:$arr=array(  - hash数组
						key=>value,
						...
					) 

		2、Object - 面向对象,不需要面向对象

	两种特殊类型:
		1、Resource - 资源类型,连接上数据库才能看到
		2null - 空,释放内存
			"" - 有,值为空
			null - 不存在

4、运算符:几乎和js一直,唯独字符串拼接.,意味着php想要调用方法绝对不可能用.

5、分支:完全一样

6、循环:完全一样

7、函数:完全一样

8、API:理论上完全一样的,JS有的,PHP也有,但是写法却不相同,我们不需要做任何记忆,面向百度开发

9、全栈开发:
	1、前端->后端:
	   1、前端暂时只有一种方式可以将消息发送请求到服务器端:表单 - 明天ajax也可以
		<form action="xx.后端路径" method="get/post">
			<input name="" value="" /> - 如果是用户来输入则不需要写value,用户来选择需要把value提前写好
			<提交按钮>
		</form>

	   2、后端要接收住前端传来的数据
		$变量=$_GET/POST/REQUEST["前端传来的input的name的值"]; - 到底是GET/POST需要沟通|看开发文档
		REQUEST - 请求:前端发送到后端,不管是GET还是POST都能接住

		GET - 大小有限2kb,不安全 - 搜索框
		POST - 没有大小限制,安全的 - 注册/登录

	2、后端<->数据库
		1、创建和数据库的连接对象:
			$conn=mysqli_connect("hostname","username","userpwd","dbname");
			hostname - 主机号
			username - 数据库用户名
			userpwd  - 数据库密码
			dbname   - 数据库名称

			举例:
			$conn=mysqli_connect("127.0.0.1","root","","h52201");

		1.5、设置中文编码
			mysqli_query($conn,"SET NAMES utf8");

		2、创建SQL语句
			$sql="INSERT/DELETE/UPDATE/SELECT";

		3、哪个数据库要执行啥子sql语句,会得到一个结果
			$result=mysqli_query($conn,$sql);
			//增删改:结果都是布尔值:成功为true,失败为false
			//查:返回的是一个我们都不认识的结果集:
			  解决:
				while(($row=mysqli_fetch_*row|*assoc|array($result))!=null){
					var_dump($row);//每一行要做什么操作看你自己
					echo "<br>";
				}

		4、断开和数据库的连接
			mysqli_close($conn);

form表单: - 隐藏作用域:给后端判断我们条件表单不同做不同的操作

-------------------------------------------------------day24-4.30---------------------------------------------------------------

面试:同步交互与异步交互 同步:前端在向后端发起请求,直到服务器端进行响应的全过程,我们用户是不能做其他事情的(等) 比如:网址请求,表单请求 - 同步交互 异步:前端在向后端发起请求,直到服务器端进行响应的全过程,我们用户是可以做其他事情的(不等) 比如:Ajax

不严格的定义:网页不是完整的刷新,只是局部发生了变化,异步交互
以前的异步代码:定时器
Ajax:asynchronous javascript and xml - 直译:异步的javascript和xml
作用:和服务器端进行交互,向服务器端发起异步请求 - 把服务器端的数据拿回前端

语法:固定步骤:4步 1、创建出ajax核心对象XMLHttpRequest->简称XHR核心对象(属性和方法) var xhr=new XMLHttpRequest();

2、建立和服务器端的连接 xhr.open("GET/POST","xx.php");

3、向服务器发送请求 xhr.send(null);

特殊:
	1、如果你是GET请求,那么你的send方法会失效,但是还不能省略,必须写为:
		xhr.open("GET","xx.php?key=value&...");
		xhr.send(null);

	2、如果你是POST请求,那么你的send方法可用,但是必须加上设置请求头部:必须写为:
		xhr.open("POST","xx.php");
		xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoed")
		xhr.send("key=value&...");

4、创建监听事件: xhr.onreadystatechange=()=>{ if(xhr.readyState==4&&xhr.status==200){ xhr.responseText;//把PHP输出在页面上的东西就会拿回前端 - 难在拿到数据后你要干什么 } }