JavaScript基础
概念:客户端脚本语言
运行在客户端浏览器中的 。每一个浏览器都有JavaScript的解析引擎
脚本语言:不需要编译,直接就可以被浏览器解析执行
功能:
可以用来增强用户和HTML页面的交互过程,可以来控制HTML元素,让页面有一些动态的效果,增强用户的体验。
##JavaScript发展史:
1、1992年,Nobase公司,开发出第一门客户端脚本语言,专门用于表单的校验。命名为:C–,后来更名为:ScriptEase
2、1995年,Netscape(网景)公司,开发了一门客户端脚本语言:LiveScript。后来请来SUN公司的专家,修改LiveScript,命名为JavaScript。
3、1996年,微软抄袭JavaScript开发出JScript语言。
4、1997年,ECMA(欧洲计算机制造商协会),ECMAScript,就是所有客户端脚本语言的标准。
JavaScript = ECMAScript + JavaScript自己特有的东西(BOM + DOM)
ECMAScript:客户端脚本语言标准
1、基本语法:
1、与HTML结合方式
1、内部JS:
定义<script>
,标签体内容就是js代码
2、外部JS:
定义<script>
,通过src属性引入外部的js文件
<!--
内部JS
外部JS
-->
/*内部*/
<script>
alert("Hello World");
</script>
/*外部*/
<script src="js/a.js"></script>
注意:
1、<script>
可以定义在HTML页面的任何地方。但是定义的位置会影响执行顺序。
2、<script>
可以定义多个。
2、注释
1、单行注释://注释内容
2、多行注释:/*注释内容*/
3、数据类型:
1、原始数据类型(基本数据类型):
1、number:数字。整数/小数/NaN(not a number 一个不是数字的数字类型)
2、string:字符串。字符串,没有字符的概念
3、boolean:true或false
4、null:一个对象为空的占位符
5、undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined
<script>
//定义变量
var a = 3;
alert(a);
a = "abc";
alert(a);
//定义number类型
var num = 1;
var num2 = 1.2;
var num3 = NaN;
//输出到页面上
document.write(num+"<br>");
document.write(num2+"<br>");
document.write(num3+"<br>");
document.write(num+"------"+typeof(num)+"<br>");//1------number
document.write(num2+"------"+typeof(num2)+"<br>");
document.write(num3+"------"+typeof(num3)+"<br>");
//定义string类型
var str = "abc";
var str2 = 'def';
document.write(str+"<br>");
document.write(str2+"<br>");
document.write(str+"------"+typeof(str)+"<br>");//abc------string
document.write(str2+"------"+typeof(str2)+"<br>");//def------string
//定义boolean类型
var flag = true;
document.write(flag+"------"+typeof(flag)+"<br>");//true------boolean
//定义null和undefined类型
var obj = null;
var obj2 = undefined;
var obj3 ;
document.write(obj+"<br>");
document.write(obj2+"<br>");
document.write(obj3+"<br>");
document.write(obj+"------"+typeof(obj)+"<br>");//null------object
document.write(obj2+"------"+typeof(obj2)+"<br>");//undefined------undefined
document.write(obj3+"------"+typeof(obj3)+"<br>");//undefined------undefined
</script>
2、引用数据类型:对象
4、变量
变量:一小块存储数据的内存空间
Java语言是强类型语言,而JavaScript语言是若类型语言
强类型语言:在开辟变量存储空间时,定义了空间将来存储的数据类型。只能存储固定类型的数据。
弱类型语言:在开辟变量存储空间时,不定义空间将来存储的数据类型。可以存储任意类型的数据。
语法:var 变量名 = 初始化值;
5、运算符
1、一元运算符:++、–、+(正号)、-(负号)
注意:在JS中,如果运算数不是运算符所要求的的类型,那么js引擎会自动将运算数进行类型转换。
<script>
var a = +3;
alert(a);//3
var b = +"123";
alert(typeof(b));//number
alert(b);//123
var c = +"abc";
alert(typeof(c));//number
alert(c);//NaN
var d = +"123abc";
alert(typeof(d));//number
alert(d);//NaN
var flag = +true;
var flag2 = +false;
alert(typeof(flag));//number
alert(flag);//1
alert(flag2);//0
</script>
2、算数运算符:+、-、*、/、%
3、赋值运算符:=、+=、-=、…
4、比较运算符:>、<、>=、<=、==
、===
(全等于)
比较方式:
1、类型相同:直接比较
字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止
2、类型不同:先进行类型转换,再比较
===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false
5、逻辑运算符:&&、||、!
其他类型转boolean:
1、number:0或NaN为假,其他为真
2、string:除了空字符串(“”),其他都是true
3、null&undefined:都是false
4、对象:都是true
if(obj != null && obj.length > 0){//防止空指针异常
alert(123);
}
//js中可以这样定义,简化书写
if(obj){//与上面代码等价
alert(123);
}
6、三元运算符:? :
6、流程控制语句
1、if…else…
2、switc
在Java中,switch语句可以接受数据类型:byte、int、short、char、枚举(jdk1.5之后)、String(jdk1.7之后)。
在JS中,switch语句可以接受任意的原始数据类型
3、while
4、do…while
5、for
7、特殊语法:
1、语句以;结尾,如果一行只有一条语句,则;可以省略不写(不建议)
2、变量的定义使用var关键字,也可以不使用:
用:局部变量;
不用:全局变量。(不建议)
2、基本对象:
Function:函数对象
1、创建
1、var fun = new Function(形式参数列表,方法体);
2、function 方法名称(形式参数列表){
方法体;
}
3、var 方法名称 = function(形式参数列表){
方法体;
}
2、方法
3、属性
length:代表形式参数的个数
4、特点
1、方法定义时,形式参数的类型不用写,返回值类型也不写
2、方法是一个对象,如果定义名称相同的方法,会覆盖,JS中不存在方法重载,只会被覆盖
3、在JS中,方法的调用只与方法的名称有关,和参数列表无关
4、在方法声明中有一个隐藏的内置对象(数组),argument封装所有的实际参数
5、调用
方法名称(实际参数列表);
//创建方式1
var fun1 = new Function("a","b","alert(a);");
//调用方法
fun1(1,2);//1
//创建方式2
function fun2(a,b) {
alert(a+b);
}
fun2(1,2);//3
//创建方式3
var fun3 = function(a,b){
alter(a/b);
};
alert(fun3.length);//2
//fun3(8,2);
//求任意个数的和
function add() {
var sum = 0;
for(let i = 0 ; i < arguments.length ; i++){
sum += arguments[i];
}
return sum;
}
alert(add(1,2,3,4,5,6,7,8,9,10));//55
Array:数组对象
1、创建
1、var arr = new Array(元素列表);
2、var arr = new Array(默认长度);
3、var arr = [元素列表];
2、方法
join(参数):将数组中的元素按照指定的分隔符拼接为字符串
push() 向数组的末尾添加一个或更多元素,并返回新的长度
3、属性
length:数组的长度
4、特点
1、JS中,数组元素的类型是可变的
2、JS中,数组长度是可变的
Boolean
Date:日期对象
1、创建
var date = new Date();
2、方法:
tolocaleString():返回当前的date对象对应的时间本地字符串格式
getTime():获取毫秒值。返回当前日期对象描述的时间到1970年1月1日零点的毫秒值差
var date = new Date();
document.write(date+"<br/>");//Wed Mar 31 2021 09:14:35 GMT+0800 (中国标准时间)
document.write(date.toLocaleString()+"<br/>");//2021/3/31上午9:14:35
document.write(date.getTime()+"<br/>");//1617153275426
Math:数学对象
1、创建:
特点:Math对象不用创建,直接使用。 Math.方法名();
2、方法
random():返回0~1之间的随机数。含0不含1
ceil(x):对数进行上舍入
floor(x):对数进行下舍入
round(x):把数四舍五入为最接近的整数
3、属性
PI
document.write(Math.PI+"<br/>");//3.141592653589793
document.write(Math.random()+"<br/>");//0.8554210787920384
document.write(Math.round(3.14)+"<br/>");//3
document.write(Math.floor(3.14)+"<br/>");//3
document.write(Math.ceil(3.14)+"<br/>");//4
/*
取1~100之间的随机整数
1、Math.random()产生随机数:范围[0,1)小数
2、乘以100 --> [0,100)小数
3、舍弃小数部分:floor --> [0,99]
4、+1 --> [1,100]
*/
var number = Math.floor(Math.random()*100)+1;
document.write(number);//45
Number
String
RegExp:正则表达式对象
1、正则表达式:定义字符串的组成规则
1、单个字符:[ ]
如:[a]、[ab](a或b)、[a-zA-Z0-9_](a-z或A-Z或0-9或__)
特殊符号代表特殊含义的单个字符:
\d:单个数字字符[0-9]
\w:单个字符[a-zA-Z0-9_](a-z或A-Z或0-9或__)
2、量词符号:
?:表示出现0次或1次
*:表示出现0次或多次
+:表示出现1次或多次
{m,n}:表示m<= 数量 <=n
m如果缺省:{,n}:最多n次
n如果缺省:{m,}:最少m次
3、开始结束符号:
^:开始
$:结束
2、正则对象:
1、创建
1、var reg = new RegExp(“正则表达式”);(\要写\\
)
2、var reg2 = /正则表达式/;
2、方法
1、text(参数):验证指定的字符串是否符合正则定义的规范
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4qUUTNWr-1617688662435)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210401090659297.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cs9JjeV9-1617688662438)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210401090731939.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SCTBaFcB-1617688662439)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210401090749520.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iq6RPuJf-1617688662440)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210401090813122.png)]
Global
1、特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用
2、方法:
encodeURI() 把字符串编码为 URI。(URL编码)
decodeURI() 解码某个编码的 URI。(URL解码)
encodeURIComponent() 把字符串编码为 URI 组件。(URL编码)编码的字符更多
decodeURIComponent() 解码一个编码的 URI 组件。(URL解码)
parseInt() 解析一个字符串并返回一个整数。将字符串转为数字
逐一判断每一个字符是否是数字,知道不是数字为止,将前边数字部分转为number
isNaN() 判断一个值是否是NaN
NaN六亲不认,连自己都不认。NaN参与的==比较全部为false
eval() 将 JavaScript 字符串,转成脚本代码来执行。
3、URL编码
GBK:一个汉字两个字节,一个字节八个二进制位
UTF-8:一个汉字三个字节,一个字节八个二进制位
高思语 = %E9%AB%98%E6%80%9D%E8%AF%AD
BOM
概念:Browser Object Model 浏览器对象模型
将浏览器的各个组成部分封装成对象。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3MIqVplQ-1617688662442)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210405095459033.png)]
组成:
Window:窗口对象
1、创建
2、方法
1、弹出框有关的方法
alert():显示带有一段消息和一个确认按钮的警告框
confirm():显示带有一段消息以及确认按钮和取消按钮的对话框
如果用户点击确定按钮,则方法返回true
如果用户点击取消按钮,则方法返回false
prompt():显示课提示用户输入的对话框
返回值:获取用户输入的值
alert("hello window");
window.alert("hell a");
var flag = confirm("您确定要退出?");
if(flag){
//退出操作
alert("欢迎下次光临");
}else {
//提示
alert("别手滑");
}
//输入框
var result = prompt("请输入用户名");
alert(result);
2、与打开和关闭有关的方法:
close():关闭浏览器窗口
谁调用我,我关谁
open():打开一个新的浏览器窗口
返回新的Window对象
//打开新的窗口
var openBtn = document.getElementById("openBtn");
var newWindow ;
openBtn.onclick = function () {
//打开新窗口
newWindow = open("https://www.baidu.com");
};
//关闭新窗口
var closeBtn = document.getElementById("closeBtn");
closeBtn.onclick = function () {
//关闭新窗口
newWindow.close();
};
3、与定时器有关的方式:
setTimeout() :在指定的毫秒后调用函数或计算表达式。一次性定时器
两个参数:
1、js代码或者方法对象
2、毫秒值
返回值:唯一标识,用于取消定时器
clearTimeout() :取消由setTimeout()方法设置的timeout。
setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。
clearInterval() :取消由setInterval()方法设置的timeout。
//一次性定时器
//setTimeout("fun();",2000);
var id = setTimeout(fun,2000);
clearTimeout(id);
function fun() {
alert("lll");
}
//循环定时器
setInterval(fun,2000);
3、属性
1、获取其他BOM对象
history
location
navigator
screen
2、获取DOM对象
document
4、特点
window对象不需要创建可以直接使用, window使用:window.方法名();
window引用可以省略:方法名();
Navigator:浏览器对象
Screen:显示器屏幕
History:历史记录对象
1、创建(获取)
1、window.history
2、history
2、方法
back() 加载 history 列表中的前一个 URL
forward() 加载 history 列表中的下一个 URL
go(参数) 加载 history 列表中的某个具体页面
参数:
正数:前进几个历史记录
负数:后退几个历史记录
3、属性
length :返回当前窗口历史列表中的URL数量。
<body>
<input type="button" id="btn" value="获取历史记录个数">
<a href="05_轮播图.html">05页面</a>
<input type="button" id="forward" value="前进">
<input type="button" id="back" value="后退">//写在页面05
<script>
//1、获取按钮
var btn = document.getElementById("btn");
//2、绑定单击事件
btn.onclick = function () {
//3、获取当前窗口历史记录个数
var length = history.length;
alert(length);
};
//1、获取按钮
var forward = document.getElementById("forward");
//2、绑定单击事件
forward.onclick = function () {
//前进
//history.forward();
history.go(1);
};
//写在页面05
//1、获取按钮
var back = document.getElementById("back");
//2、绑定单击事件
back.onclick = function () {
//后退
//history.back();
history.go(-1);
};
</script>
Location:地址栏对象
1、创建(获取)
1、window.location
2、location
2、方法
reload():重新加载当前文档。刷新
3、属性
href 设置或返回完整的URL。
<input type="button" id="btn" value="刷新">
<input type="button" id="go" value="去百度">
<script>
//reload方法:定义一个按钮,点击按钮,刷新当前页面
//1、获取按钮
var btn = document.getElementById("btn");
//2、绑定单击事件
btn.onclick = function () {
location.reload();
}
//获取href
var href = location.href;
//点击按钮访问百度官网
//1、获取按钮
var go = document.getElementById("go");
//2、绑定单击事件
go.onclick = function () {
//去访问百度官网
location.href = "https://www.baidu.com";
}
</script>
DOM
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VhmAnQaW-1617688662444)(C:\Users\高思语\AppData\Roaming\Typora\typora-user-images\image-20210405102743697.png)]
功能:控制HTML文档的内容
代码:获取页面标签(元素)对象 Element
document.getElementById(“id值”):通过元素的 id来获取元素的对象
操作Element对象:
1、修改属性值
1、明确获取的对象是哪一个?
2、查看API文档,找其中有哪些属性可以设置
2、修改标签体内容
属性:innerHTML
1、获取元素对象
2、使用innerHTML属性修改标签体内容
概念:Document Object Model 文档对象模型
将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作
W3C DOM表准被分为3个不同的部分:
核心DOM:针对任何结构化文档的标准模型
Document:文档对象
1、创建(获取):在HTML DOM模型中可以使用window对象来获取
1、window.document
2、document
2、方法:
1、获取Element对象:
1、getElementById():根据id属性值获取元素对象,id属性值一般唯一
2、getElementByTagName():根据元素名称获取元素对象们。返回值是一个数组
3、getElementByClassName():根据Class属性值获取元素对象们。返回值是一个数组
4、getElementByName():根据name属性值获取元素对象们。返回值是一个数组
2、创建其他DOM对象:
createAttribute(name)
createComment()
createElement()
createTextNode()
3、属性:
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
<div class="cls1">div4</div>
<div class="cls2">div5</div>
<input type="text" name="username">
<script>
//2、getElementByTagName():根据元素名称获取元素对象们。返回值是一个数组
var divs = document.getElementsByTagName("div");
alert(divs.length);//5
//3、getElementByClassName():根据Class属性值获取元素对象们。返回值是一个数组
var div_cls = document.getElementsByClassName("cls1");
alert(div_cls.length);//1
//4、getElementByName():根据name属性值获取元素对象们。返回值是一个数组
var ele_username = document.getElementsByName("username");
alert(ele_username.length);//1
var table = document.createElement("table");
alert(table);//[object HTMLTableElement]
</script>
Element:元素对象
1、获取/创建:通过document来获取和创建
2、方法:
1、removeAttribute():删除属性
2、setAttribute():设置属性
Attribute:属性对象
Text:文本对象
Comment:注释对象
Node:节点对象,其他五个的父对象
特点:所有dom对象都可以被认为是一个节点
方法:
CRUD DOM树:
appendChild():向节点的子节点列表的结尾添加新的子节点。
removeChild():删除(并返回)当前节点的指定子节点。
replaceChild():用新节点替换一个子节点。
<div id="div1">
<div id="div2">
div
</div>
</div>
<!--
超链接功能:
1、可以被点击:样式
2、点击后跳转到href指定的url
保留1功能,去掉2功能
实现:href="javaScript:void(0);"
-->
<a href="javaScript:void(0);" id="del">删除子节点</a>
<!--<input type="button" id="del" value="删除子节点">-->
<a href="javascript:void(0);" id="add">添加子节点</a>
<script>
//1、获取超链接a
var element_a = document.getElementById("del");
//2、绑定单击事件
element_a.onclick = function () {
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
div1.removeChild(div2);
};
//1、获取超链接a
var element_add = document.getElementById("add");
//2、绑定单击事件
element_add.onclick = function () {
var div1 = document.getElementById("div1");
//创建一个div节点
var div3 = document.createElement("div");
div3.setAttribute("id","div3");
//给div1添加子节点
div1.appendChild(div3);
}
</script>
属性:
parentNode :返回节点的父节点。
var div2 = document.getElementById("div2");
var div1 = div2.parentNode;
alert(div1);
XML DOM:针对XML文档的标准模型
HTML DOM:针对HTML文档的标准模型
1、标签体的设置和获取:innerHTML
2、使用HTML元素对象的属性
3、控制元素样式
1、使用元素的style属性来设置
div1.style.border = "1px solid red";
div1.style.width = "200px";
//font-size -->fontSize
div1.style.fontSize = "20px";
2、提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。
div2.className = "dl";
事件监听机制
功能:某些组件被执行了某些操作后,触发某些代码的执行。
如何绑定事件:
1、直接在HTML标签上,指定事件的属性(操作),属性值就是js代码
1、事件:onclick ----- 单击事件
<img id="light" width="960" height="540" src="image/1.jpeg" onclick="fun();">
<script>
function fun() {
alert('我被点了');
}
</script>
2、通过js获取元素对象,指定事件属性,设置一个函数
<img id="light2" width="960" height="540" src="image/1.jpeg">
<script>
function fun2() {
alert('干哈');
}
//1、获取light2对象
var light2 = document.getElementById("light2");
//2、绑定事件
light2.onclick = fun2;
</script>
分析:
1、获取图片对象
2、绑定单机事件
3、每次点击切换图片:使用flag来标记完成
<img id="light" src="image/1.jpeg">
<script>
var light = document.getElementById("light");
var flag = false;
light.onclick = function () {
if(flag){
light.src = "image/2.jpeg";
flag = false;
}else {
light.src = "image/1.jpeg";
flag = true;
}
}
</script>
概念:某些组件被执行了某些操作后,触发某些代码的执行。
事件:某些操作,如:单击,双击,键盘按下了,鼠标移动了
事件源:组件,如:按钮,文本输入框,…
监听器:代码。
注册监听:将事件、事件源、监听器结合在一起。当事件源上发生了某个事件,则触发执行某个监听器代码。
常见的事件:
1、点击事件:
onclick:单击事件
ondblclick:双击事件
2、焦点事件:
onblur:失去焦点事件
一般用于表单校验
onfocus:元素获得焦点
3、加载事件:
onload:一张页面或一幅图像完成加载
4、鼠标事件:
onmousedown:鼠标按钮被按下
定义方法时,定义一个形参,接受event对象
even对象的button属性可以获取鼠标按钮键被点击了
0 指定鼠标左键、1 指定鼠标中键、2 指定鼠标右键。
onmouseup:鼠标按键被松开
onmousemove:鼠标被移动
onmouseover:鼠标移到某元素之上
onmouseout:鼠标从某元素移开
onmouseenter 当鼠标指针移动到元素上时触发
onmouseleave 当鼠标指针移出元素时触发
5、键盘事件:
onkeydown:某个键盘按键被按下
if(event.keyCode == 13){
alert("提交表单");
}
onkeyup:某个键盘按键被松开
onkeypress:某个键盘按键被按下并松开
6、选中和改变:
onchange:域的内容被改变
onselect:文本被选中
7、表单事件:
onsubmit:确认按钮被点击
onreset:重置按钮被点击