BOM+定时器+严格检查模式+JS补充语法

一.BOM浏览器对象模型

1.BOM思想

BOM:Browser Object Model 浏览器对象模型
把浏览器的各个组成部分看做一个对象。

BOM:Browser Object Model 浏览器对象模型
			 		* 概念:
			 			* 将浏览器的各个组成部分封装为对象
			 		* 特点:
			 			* BOM对象不能自己创建,当HTML文档加载进内存,浏览器自动创建。
			 		* 组成:
			 			* Window(*****):窗口对象
			 			* Location(**):地址栏对象
			 			* History(*):历史记录(当前窗口)对象
			 			* Navigator :浏览器对象   基本不用仅作了解
			 			* Screen:显示器屏幕        基本不用仅作了解	
			 				availHeight	获取系统屏幕的工作区域高度,排除 Microsoft Windows 任务栏。 	
			 				availWidth	获取系统屏幕的工作区域宽度,排除 Windows 任务栏。 	
			 				height		获取屏幕的垂直分辨率。 
			 				width		获取屏幕的水平分辨率。

在这里插入图片描述

2.window中有关弹框的方法

注:window对象可以省略不写

alert()弹出一个警告框
confirm()弹出一个确认取消框。点击确定返回true 点击取消返回false;
prompt()弹出一个输入框
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			//alert()弹出一个警告框
			window.alert("芜湖");
			//confirm()弹出一个确认取消框。点击确定返回true 点击取消返回false;
			var v=window.confirm("外币外币");
			document.write(v);
			//prompt()弹出一个输入框
			var v2=window.prompt("请输入你的姓名");
			document.write(v2);
		</script>
	</body>
</html>

3.window对象中的属性

所有浏览器都支持 window 对象。它表示浏览器窗口。

location获取url信息
screen获取屏幕信息
document获取HTML文档对象
history获取到历史记录对象
navigator获取到浏览器对象
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		//获取url信息
		var location = window.location;
		//获取屏幕信息对象
		var screen = window.screen;
		//console.log(screen);
		//获取HTML文档对象。
		var doc = window.document;
		//获取到历史记录对象
		var history=window.history;
		//console.log(history);
		//获取到浏览器对象
		var nav = window.navigator;
	</script>
</html>

4.window对象

所有浏览器都支持 window 对象。它表示浏览器窗口。

所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
全局变量是 window 对象的属性。
全局函数是 window 对象的方法。
甚至 HTML DOM 的 document 也是 window 对象的属性之一:

1.尺寸:
innerHeight浏览器的高度
innerWidth浏览器的宽度
document浏览器的文档对象
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		//window的尺寸
		var height=window.innerHeight;
		document.write(height);//657
		document.write(window.innerWidth);//1366
		document.write(window.document);//[object HTMLDocument]
	</script>
</html>

5.navigator对象

window.navigator 对象在编写时可不使用 window 这个前缀。
浏览器对象,封装了浏览器的信息,了解即可.

appCodeName 浏览器代号
appName 浏览器名称
appVersion 浏览器版本
cookieEnabled 浏览器是否启用了cookie
platform浏览器硬件平台
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		document.write(window.navigator.appCodeName); //Mozilla
		document.write("<br>");
		document.write(window.navigator.appName);//Netscape
		document.write("<br>");
		document.write(window.navigator.appVersion);//5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
		document.write("<br>");
		document.write(window.navigator.cookieEnabled);//true
		document.write("<br>");
		document.write(window.navigator.platform);//Win32
	</script>
</html>

6.screen对象

屏幕对象,封装了浏览器屏幕的信息

availHeight	返回屏幕的高度(不包括Windows任务栏)
availWidth	返回屏幕的宽度(不包括Windows任务栏)
colorDepth	返回目标设备或缓冲器上的调色板的比特深度
height	返回屏幕的总高度
pixelDepth	返回屏幕的颜色分辨率(每象素的位数)
width	返回屏幕的总宽度
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		/* 
		availHeight	返回屏幕的高度(不包括Windows任务栏)
		availWidth	返回屏幕的宽度(不包括Windows任务栏)
		colorDepth	返回目标设备或缓冲器上的调色板的比特深度
		height	返回屏幕的总高度
		pixelDepth	返回屏幕的颜色分辨率(每象素的位数)
		width	返回屏幕的总宽度 */
		document.write(screen.width); //1366
		document.write("<br>");
		document.write(screen.availHeight);//728
		document.write("<br>");
		document.write(screen.availWidth);//1366
		document.write("<br>");
		document.write(screen.colorDepth);//24
		document.write(screen.pixelDepth);//24
	</script>
</html>

7.location对象

地址栏信息对象,用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。

注:浏览器会对地址栏中的URL中的中文字符,进行URL编码。

location.href当前载入页面的完整URL
decodeURIComponent解码
encodeURIComponent()编码

location.hostname 返回 web 主机的域名
location.pathname 返回当前页面的路径和文件名
location.port 返回 web 主机的端口 (80 或 443)
location.protocol 返回所使用的 web 协议(http: 或 https:)

属性:search 属性是一个可读可写的字符串,可设置或返回当前 URL 的查询部分(问号 ? 之后的部分)。

浏览器为什么要对地址中的URL中的中文进行编码?
答:
		有规范,在参数值中出现&字符会截断参数
		url中文的问题,编码客转换为英文
		也是第一种情况,url中有个参数值是url,传输的时候会出现错误
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>location对象</title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		/* 
		地址栏:127.0.0.1:8848/20200713-下午-博客/location对象
		 解析过的:http://127.0.0.1:8848/20200713-%E4%B8%8B%E5%8D%88-%E5%8D%9A%E5%AE%A2/location%E5%AF%B9%E8%B1%A1.html
		 */
		document.write(window.location.href); //获取解析过的地址栏对象

		document.write("<br>");
		var text = location.href;
		document.write(text);
		//url解码  decodeURIComponent
		var url = decodeURIComponent(text);
		document.write(url);
		document.write("<br>");
		//url编码 encodeURIComponent()编码
		var text2 = encodeURIComponent(url);
		document.write(text2);
		document.write("<br>");
		/* location.hostname 返回 web 主机的域名
			location.pathname 返回当前页面的路径和文件名
			location.port 返回 web 主机的端口 (80 或 443)
			location.protocol 返回所使用的 web 协议(http: 或 https:)
		*/
	   document.write(location.host)//127.0.0.1:8848
	   document.write("<br>");
	   document.write(location.pathname)
	   document.write("<br>");
	   document.write(location.hostname)
	   document.write("<br>");
	   document.write(location.protocol)

		//设置地址栏中的内容,可以跳转页面
			function toPage(){
				//window.open();
				location.href="http://www.baidu.com" //DNS
				//http://www.godsince.com:8080/news/index.asp?boardID=5&ID=24618&page=1#r_70732412
			}
	</script>
	<a href="javascript:void(toPage())">进入百度</a>
</html>

8.history对象

为了保护用户隐私,对 JavaScript 访问该对象的方法做出了限制。
方法:
history.back() - 与在浏览器点击后退按钮相同,相当于go(-1);
history.forward() - 与在浏览器中点击向前按钮相同

二.定时器

1.window中关于定时器的方法

setTimeout()设置延时执行一次的定时器
setInterval()设置循环定时器
<!DOCTYPE html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			/* setTimeout()定时器 */
			function show() {
				alert("定时器");
			}
			//设置延时执行一次的定时器,单位是毫秒,延迟2s,返回的是定时器的id
			//间隔2s执行定时器
			var id = window.setTimeout(show, 2000);
			//根据定时器的id取消定时器
			window.clearTimeout(id);

			/* setInterval()设置循环定时器 */
			var i = 1;

			function show2() {
				document.write("芜湖");
				i++;
			}
			var timeId = window.setInterval(show2, 1000);
			//匿名函数也可以作参数
			var timeid2 = window.setInterval(function() {
				//在控制台输出
				console.log(i);
			}, 1000);
			//根据id关掉定时器
			/* 	window.clearInterval(timeId);
				window.clearInterval(timeId2); */

			function clear() {
				window.clearInterval(timeId);
				window.clearInterval(timeId2);
			}
		</script>
		<!-- <a href="javascript:void(clear())">停止定时器</a> -->
		<button  onclick="clearInterval(timeId)">关闭定时器</button>
	</body>
</html>

2.页面时钟

获取当前页面的时间:

js中innerHTML和innerText的区别
innerHTML
	innerHTML  会将标签和标签中的内容否获取回来
	innerHTML  .innerHTML = ‘<p></p>’; 只会将文本内容解析出来,不会显示标签
innerText
	innerText  只会将标签中的内容获取回来,不会获取标签
	innerText  有参数, .innerText  = ‘<p></p>’, 会将标签和内容都解析到网页中

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/moment.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<h1 id="time">2020-07-13 23:04:30</h1>
	</body>
	<script type="text/javascript">
		function showTime(){
					var myh = document.getElementById("time");
					//alert(myh);
					//var timeStr = new Date().toLocaleString();
					
					myh.innerText =moment().format('YYYY-MM-DD HH:mm:ss');
				}
				showTime();
				//隔1s展示一次
				window.setInterval(showTime,1000);
	</script>
</html>

三.JS总结

1.数据类型

(1)number

JS中不区分大小写

123 整数
3.41 小数 
1.133e3科学计数法
-99负数
NaN  not a number 
infinity 无穷大

(2)比较运算符

=赋值
==等于,类型不同值一样,结果仍为true
===绝对等于,类型一样,结果才为true

注意:

NaN==NaN,false,这个与所有的数值都不相等,包括自己
只能通过isNaN(NaN)来判断这个数是否是NaN
进来避免使用浮点数

2.严格检查模式

局部变量建议都使用let关键字

严格检查模式:'use strict';预防JavaScript的随意性导致产生的一些问题,它必须写在script的第一行
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		
	</head>
	<body>
		<script type="text/javascript">
			//没有var时,默认是全局变量
			//var i=1;
			//在ES6中,局部变量建议都使用let关键字
			'use strict';
			 i=1;
			console.log(i);
		</script>
	</body>
	
</html>

3.ES6支持多行字符串编写

使用`来支持多行字符串的编写功能
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		
	</head>
	<body>
		<script type="text/javascript">
			//没有var时,默认是全局变量
			//var i=1;
			//在ES6中,局部变量建议都使用let关键字
			'use strict';
			//使用`来支持多行字符串的编写功能
			var msg=`nihao
			芜湖
			aaa
			111
			`;
			console.log(msg);
		</script>
	</body>
</html>

4.模板字符串

let name="libai";
let age=19;

let msg=`你好,${name}`;

5.JS中的对象

JS中所有的键都是字符串,值是任意对象

若干个键值对
var 对象名={
	属性名1:属性值1,
	属性名2:属性值2,
	属性名3:属性值3
}

注意:
1.键值对中间以:分隔
2.多个键值对以,分隔
3.最后一个键值对没有,
4.方法也是一个属性

//定义了person对象,他有四个属性
			var person={
				name:"张三",
				age:3,
				emial:"2402636221@qq.com",
				score:0
			}

总结:js中的对象以{}包起来,键值对描述属性,多个属性间使用逗号隔开,最后一个属性之间不加逗号

1.对象的赋值
person.name="lisi";
2.使用一个不存在的对象属性,不会报错,undefined
	person.data
	undefined
3.动态的删减属性
	JS通过delete删除对象的属性
	delete person.name
	true
	person
	{age: 3, emial: "2402636221@qq.com", score: 0}
4.动态的增加属性,直接给新添加的属性赋值即可
	person.haha="haha";
	person
5.判断属性值是否在这个对象中  xxx in xxxx
	注意:JS中所有的键都是字符串,值是任意对象
	'name' in person
	true
	//相当于继承
	'toString' in person
	true
6.判断一个属性是否是这个对象自身拥有的
	person.hasOwnProperty('toString')
	false
	person.hasOwnProperty('age')
	true

6.流程控制

if()else...语句
while()循环,避免死循环
for()循环 

JS中的foreach()循环:5.1引入
	var arr=[11,222,33,5,888,900];
			//函数,e代表每一个元素
			arr.forEach(function(e){
				console.log(e);
			})


JS中的for()...in语句:
语法:
	for (变量 in 对象)
	{
	    在此执行代码
	}
	for(var index in arr){
				console.log(index);
			}

JS中的for...of语句
语法:打印每一个元素
	var arr=[1,2,3,4];
			for(var x of arr){
				console.log(x);
			}

建议使用for ... of ,for ...in存在bug

四.JS语法

1.Map和Set

ES6增加的特性,使用idea需要配置符合ES6标准
Set 无序不重复集合
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			//里面是一个二维数组
			var map=new Map([['zs',22],['ls',33],['ww',44]]);
			//通过键来获得值
			var score=map.get('zs');
			//设置值
			map.set('wuhu',55);
			document.write(score);//22
			map.delete('ls');
			
			var set=new Set([1,3,3,3,3]);//[1,3] set集合会去重
			set.add(2);
			set.delete(2);
			//是否包含某个元素
			document.write(set.has(3));
		</script>
	</body>
</html>

2.函数中的rest()和arguements

获取除了已经定义的参数之外的所有参数,rest()必须写在最后且以...标识
arguements是一个数组,存放了函数的所有形参
function test(a,b,...rest){
				console.log(a);
				console.log(b);
				console.log(rest);
			}
			test(1,2,3,4,54634,45543,342)
			 1
			 2
			 (5) [3, 4, 54634, 45543, 342]

3.变量的作用域

1.
JS中只有块级作用域和全局作业域,全局对象window,默认所有的全局变量,都会绑定在window下,
假设在函数体中申明,则只能在函数体内使用,在函数体外不可以使用

由于我们的所有全局变量都绑定在了我们的window上,如果不同的js文件,使用了相同的全局变量,将产生冲突? 如何解决?
	把自己的代码全部放入自己定义的唯一空间名字中,降低冲突
	
	注意:
		方法也是变量,因为:
		var	test3=function(){
			...
		}
		
			//唯一全局变量
			var onlyOne={};
			//定义全局变量
			onlyOne.name='颤三';
			onlyOne.age='18';
			onlyOne add=function(a,b){
				return a+b;
			}
			//把自己的代码全部放入自己定义的唯一空间名字中,降低冲突
	

2.局部作用域let关键字  es6
	下面一段代码:
		function test(){
				for(var i=1;i<100;i++){
					console.log(i);
				}
				console.log(i+1);//101
			}
出现一个问题:
	i出了作用域还可以使用,为了解决这个问题,es6引入let关键字,解决后就是i is not defined

3.常量const   es6
	在es6之前,怎么定义常量?大家约定一个格式,全部大写字母命名的变量就是常量,建议不做修改
	但是这样不想遵守规范的人直接就修改了,安全性太低,在es6引入了常量关键字const
	var PI='3.1415';
	PI='200';
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			//里面是一个二维数组
			var map=new Map([['zs',22],['ls',33],['ww',44]]);
			//通过键来获得值
			var score=map.get('zs');
			//设置值
			map.set('wuhu',55);
			document.write(score);//22
			map.delete('ls');
			
			var set=new Set([1,3,3,3,3]);//[1,3] set集合会去重
			set.add(2);
			set.delete(2);
			//是否包含某个元素
			document.write(set.has(3));
			
			var arr=[1,2,3,4];
			for(var x of arr){
				console.log(x);
			}
			
			function test(){
				var x=1;
				
				///内部函数可以访问外部函数的成员,外部函数不能访问内部函数的成员
				function test2(){
					var y=x+1;
				}
				//报错
				var z=y+1;
			}
		</script>
	</body>
</html>

4.变量作用域提升

function tets(){
				var x='x'+y;
				console.log(x);
				var y='y';
			}
结果:
xundefined  证明y是存在的,只是没有赋值等价于:
function tets2(){
				var y;
				var x='x'+y;
				console.log(x);
				y='y';
			}
说明:js执行引擎,自动提升了y的声明,但是不会提升y的赋值

这是在JavaScript存在之初就有的特性,习惯将所有变量定义放在函数的头部,如:
	function aaa(){
					var x=1;
					y=x+1;
					a,b,c//undefined
					
					//要使用时直接赋值
					a=1;
				}

5.方法的定义和调用

方式1:

注意,方法也是一个变量
方法就是把函数放在对象里面,对象只有属性和方法
			//定义一个对象
			var student={
				name:"zhangsna",
				birth:1998,
				//方法也是一个变量
				age:function(){
					var now=new Date().getFullYear();
					return now-this.birth;
				}
			}
			//属性
			student.name;
			//方法,要带()标识方法
			student.age()

方式2:

function getAge(){
				var now=new Date().getFullYear();
				return now-this.birth;
			}
			var student={
				name:'lsio',
				birth:1998,
				age:getAge
			}
			
			document.write(student.age());//22
			document.write(getAge());//NaN,使用了window对象,window对象里没有birth

六.面向对象编程

1.原型

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			//定义一个对象
			var student={
				name:"zs",
				age:18,
				run:function(){
					console.log(this.name+"is Running");
				}
			}
			//创建具体的学生:ls
			var ls={
				name:'lisi'
			}
			//ls的原型是studnet,相当于从他里面继承方法来使用
			ls.__proto__=student;
			
			var Bird={
				fly:function(){
					console.log(this.name+"is Flyfly");
				}
			}
			ls.__proto__=Bird;
		</script>
	</body>
</html>

2.class继承

class关键字是在es6引入的
原型链:原型是无界限的,等同于Java的继承
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			class Student {
				//构造方法
				constructor(name) {
					this.name = name
				}
				hello() {
					alert('hello');
				}
			}
			var student1=new Student('张三');
			var student2=new Student('李四');
			
			/* 本质是	ls.__proto__=student; */	
			
			class MyStudent extends Student{
				constructor(name,grade) {
				    super(name),
					this.grade=grade;
				}
				mygr(){
					alert("111");
				}
			}
			var s1=new MyStudent("梁丽丽",1);
		</script>
	</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值