JavaScript基础
概念:一门客户端脚本语言
运行在客户端浏览器中的,每一个浏览器都有JavaScript的解析引擎。
脚本语言:不需要编译,直接就可以被浏览器解析执行了
功能:可以用来增强用户和html页面的交互过程,可以用来控制html元素,让页面有一些动态的效果,增强用户的体验。
JavaScript发展史
1、1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验,命名为:C- -,企图蹭C++热点。后来觉得不行,又改成了ScriptEase,蹭下面两家的热点。
2、1995年,NetScape(网景)公司受到C- -的启发,开发了一门客户端脚本语言:livescript,那几年Java语言异常火爆,后来这家公司请来SUN公司的专家,两家一起开发修改livescript,最后命名为JavaScript。(蹭热点)
3、1996年,微软抄袭了JavaScript开发出了JScript语言
4、1997年,使用一个新的浏览器就要学习相对应的脚本语言实在是太繁琐了,于是ECMA(欧洲计算机制造商协会)统一了标准,即ECMAScript,就是所有客户端语言的标准。
所以JavaScript = ECMAScript + JavaScript自己特有的东西(BOM+DOM)
ECMAScript:客户端脚本语言的标准
1、基本语法
1)与HTML结合方式
第一种:内部JS
定义<script>,标签体内容就是js代码
第二种:外部JS
定义<script>,通过src属性引入外部的JS文件
注意:<script>可以定义在html页面的任何地方,但是定义的位置会影响执行顺序,且<script>可以定义多个。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--JS文件写在哪里都行,但是要注意有执行的先后顺序之分-->
<!--内部JS文件-->
<script>
// 会弹出一个框框显示Hello World
alert("Hello world");
</script>
<!--外部JS文件,也就是引用外部JS文件
在另外一个文件a.js中写上了:alert("我是外部JS文件");
-->
<script src="a.js"></script>
</head>
<body>
</body>
</html>
2)注释
1、单行注释://注释内容
2、多行注释:/*注释内容*/
3)数据类型
原始数据类型(基本数据类型):
1、number:数字。整数/小数/NaN(一个不是数字的数字类型)
2、string:字符串。字符/字符串 “abc” ‘a’ ‘abc’等都是字符串
3、boolean:true和false
4、null:一个对象为空的占位符
5、undefined :未定义。如果一个变量没有给初始值,则会被默认赋值为undefined
引用数据类型:对象
4)变量
变量:一小块存储数据的内存空间
Java语言是强类型语言,而JavaScript是弱类型语言。
强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据。
弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据。
语法:
var 变量名 = 初始化值;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//定义变量
var a = 3;
alert(a);
a="abc";
alert(a);
//定义number
var num = 1;
var num1 = 1.2;
var num3 = NaN;
//输出到页面上(先记住怎么写,不用指导书 啥,比如system.out.println)
//想要换行加个<br>即可
document.write(num+"<br>");
document.write(num1+"<br>");
document.write(num3+"<br>");
//想知道这个值具体是什么类型的,可以使用typeof关键字
document.write(typeof (num));
//定义string类型
var str = "abc";
var str1 = 'edf';
document.write(str);
document.write(str1);
//定义boolean
var flag = true;
document.write(flag);
//定义null
var obj = null;
var obj1 = undefined;
var obj2 ;
document.write(obj);
document.write(obj1);
document.write(obj2);
//这里有一个值得注意的点是null的typeof值是object
//这是JavaScript的一个bug,但一直沿用至今
</script>
</head>
<body>
</body>
</html>
5)运算符
1、一员运算符:只有一个运算数的运算符
++,- -,+(正号):如+3。
2、算数运算符:+,-,*,/,%等等
3、赋值运算符:=,+=,-+等等
4、比较运算符:>,<,>=,<=,== ,====(全等于)
5、逻辑运算符:&& , || , !
6、三元运算符:? :
6)流程控制语句
1、if…else…
2、switch
在Java中,switch语句可以接收的数据类型:byte,int,short,char等等
switch(变量):
case 值;
在JavaScript中,switch语句可以接收任意的原始数据类型
3、while
4、do…while
5、for
7) JavaScript特殊语法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//JavaScript的特殊语法
//1、语句以;结尾,如果一行只有一条语句则;可以省略(但不建议这样做)
var a = 3
alert(3)
/*
2、变量的定义可以使用var关键字,也可以不使用
用:则定义的是局部变量
不用:则定义的是全局变量(不建议使用)
*/
a;
var b;
function f() {
b = 4;
}
f();
alert(b); //输出4
</script>
</head>
<body>
</body>
</html>
2、基本对象
Function:函数对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*
Function对象:函数(方法)对象
1、创建
1)var fun = new Function(形式参数列表,方法体);(忘掉叭,我们不用这个)
2)function 方法名(形式参数列表){
方法体
}
3)var 方法名 = function(形式参数列表){
方法体
}
2、方法
3、属性
length:代表形参的个数
4、特点
1)方法定义时,形参的类型不用写,因为都是var
2)方法是一个对象,如果定义名称相同的方法,会被覆盖
3)在JavaScript中,方法的调用只与方法的名称有关,和实际的参数列表无关
4)在方法声明中有一个隐藏的内置对象(数组),arguments,封装所有的实际参数
5、调用
方法名称(实际参数列表);
*/
//创建方式一:忘掉吧,不需要,知道就行
var fun = new Function("a","b","alert(a);");
//调用方法
fun(3,4);
//创建方式二:
function fun2(a,b) {
alert(a+b);
}
fun2(3,4);
var fun3 = function (a,b) {
alert(a+b);
}
alert(fun3);
alert(fun3.length); //输出2
</script>
</head>
<body>
</body>
</html>
Array:数组对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*
Array:数组对象
1、创建
1)var arr = new Array(元素列表);
2)var arr = new Array(默认长度); //只放一个数时默认是数组长度
3)var arr = [元素列表];
2、方法
join(参数):将数组中的元素按照指定的分隔符拼接为字符串
push():向数组的尾部添加一个或更多的元素,并返回新的长度
3、属性
length:数组的长度
4、特点
1)JavaScript中,数组元素的类型是可变的。
2)JavaScript中,数组的长度是可变的
*/
//创建方式1
var arr1 = new Array(1,2,3);
var arr2 = new Array(5);
var arr3 = [1,2,3,4];
var arr4 = new Array(); //不放参数默认为空
document.write(arr1+"<br>");
document.write(arr2+"<br>");
document.write(arr3+"<br>");
//演示join方法:
alert(arr1.join("--")+"<br>"); //此时输出的就是1--2--3
//演示push方法:
arr1.push(4); //添加4在arr1的尾部
</script>
</head>
<body>
</body>
</html>
Boolean:就是类似于Java中的包装类,就不说了
Date:日期对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*
Date:日期对象
1、创建:
var date = new Date();
2、方法:
toLocaleString():返回当前date对象对应的时间本地字符串格式
getTime():获取毫秒值,返回当前如期对象描述的时间到1970年1月1日零点的毫秒值差
*/
var date = new Date();
document.write(date+"<br>");
document.write(date.toLocaleString()+"<br>");
document.write(date.getTime()+"<br>");
</script>
</head>
<body>
</body>
</html>
Math:数学对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*
Math:数学对象
1、创建:
特点:Math对象不用创建,直接使用。 Math.方法名();
2、方法:
random():返回0~1之间的随机数 (含0不含1)
ceil(x): 对数进行上舍入
floor(x): 对数进行下舍入
round(x):把数四舍五入为最接近的整数
3、属性:
PI
*/
document.write(Math.PI+"<br>");
document.write(Math.random()+"<br>");
document.write(Math.round(3.14)+"<br>");//输出3
document.write(Math.ceil(3.14)+"<br>");//输出4
document.write(Math.floor(3.14)+"<br>");//输出3
</script>
</head>
<body>
</body>
</html>
Number:
基本数据类型的包装对象,就不说了
String:
基本数据类型的包装对象,就不说了
RegExp:
正则表达式对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*
RegExp:正则表达式对象
1、正则表达式对象:定义字符串的组成规则
1)单个字符:[]
如[a] 、 [ab] 、[a-z A-Z 0-9]
\d:单个数字字符[0-9]
\w:单个单词字符[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 reg = /正则表达式/; 常用
2)方法
1、test(参数):验证指定的字符串是否符合正则表达式定义的规范
*/
//创建方式1
var reg = new RegExp("^\\w{6,12}$");
//创建方式2
var reg2 = /^\w{6,12}$/;
alert(reg);
alert(reg2);
var username = "zhangsan";
//验证
var flag = reg2.test(username);
alert(flag);
</script>
</head>
<body>
</body>
</html>
Global:
Global全局对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*
Global:全局对象
1、特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用。 方法名();
2、方法:
encodeURI():url编码
decodeURI():url解码
encodeURIComponent():url编码(与上面的区别就是:这个能编码的字符更多)
decodeURIComponent():url解码
parseInt():将字符串转为数字
逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number
isNaN():判断一个值是否是NaN
NaN六亲不认,连自己都不认,NaN参与的==比较全部为false,
因此需要这个方法来判断是否为一个非数
eval():将 JavaScript 的字符串把它作为脚本代码来执行
*/
var str = "哈哈哈";
var encode = encodeURI(str);
document.write(encode+"<br>");//%E5%93%88%E5%93%88%E5%93%88
var s = decodeURI(encode);
document.write(s+"<br>"); //哈哈哈
var str1 = "哈哈哈";
var encode1 = encodeURI(str1);
document.write(encode1+"<br>");//%E5%93%88%E5%93%88%E5%93%88
var s1 = decodeURI(encode1);
document.write(s1+"<br>"); //哈哈哈
var str2 = "123abc";
var number = parseInt(str2);
alert(number);//输出123
var a = NaN;
document.write(a == NaN); //返回false
document.write(isNaN(a)); //返回true
var jscode = "alert(123)";
eval(jscode);//字符串解析为JavaScript代码,即alert()方法
</script>
</head>
<body>
</body>
</html>
DOM简单学习
功能:控制HTML文档的内容
代码:获取页面标签(元素)对象 Element
document.getElementById(“id值”);
操作Element对象:
1、修改属性值:
明确获取的对象是哪一个
查看API文档,找其中有哪些属性可以设置
2、修改标签体内容:
属性:innerHTML
获取元素对象,使用innerHTML属性修改标签体内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 id="haha">asdasasd</h1>
<script>
//通过id获取元素对象
var str = document.getElementById("haha");
alert(str);
//修改内容
str.innerHTML = "不知妻美刘强东";
</script>
</body>
</html>
事件简单学习
功能:某些组件被执行了某些操作后,触发某些代码的执行
如何绑定事件?
1、直接在html标签上,指定事件的属性(操作),属性值就是js代码
事件:onclick — 单击事件
原始方式:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 id="haha" onclick="alert('我被点了');"> asdasdasd</h1>
</body>
</html>
改用函数方式:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function f() {
alert("我被点了");
alert("我又被点了");
}
</script>
</head>
<body>
<h1 id="haha" onclick="f();"> asdasdasd</h1>
</body>
</html>
由上面代码不难看出,HTML代码和JS代码耦合在一起了不方便维护,所以我们还有另一种方式。
2、通过js获取元素对象,指定事件属性,设置一个函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--现在我们的HTML代码中就不需要写js的代码了-->
<h1 id="haha">asdasdasd</h1>
<script>
function f() {
alert("我咋又被点了");
}
//1、获取haha对象
var haha = document.getElementById("haha");
//2、绑定事件(注意这里只要方法名就行了!)
haha.onclick = f;
</script>
</body>
</html>
BOM
概念:Browser Object Model 浏览器对象模型
就是将浏览器的各个组成部分封装成对象。
那么浏览器中有哪些对象呢?
组成:
Window:窗口对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input id="hun" type="btn" value="打开窗口">
<script>
/*
Window:窗口对象
1、创建
2、方法
1)与弹出窗口有关的方法:
alert() 显示带有一段消息和一个确认按钮的警告框
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框
如果用户点击确定按钮,则方法返回true
如果用户点击取消按钮,则方法返回false
prompt() 显示可提示用户输入的对话框
返回值:获取用户输入的值
2)与开发关闭有关的方法:
close():关闭浏览器窗口(谁调用它,它就关谁)
open():打开一个新的浏览器窗口(返回新的window对象)
3)与定时器有关的方法
setTimeOut():在指定的毫秒数后调用函数或计算表达式
参数:
1、js代码或者方法对象
2、毫秒值
返回值:唯一标识,用于取消定时器
clearTimeOut():取消由setTimeOut()方法设置的timeout
setInterval():按照指定的周期(以毫秒计算)来调用函数或计算表达式
clearInterval():取消由setInterval()设置的timeout
3、属性
1、获取其他BOM对象
history
location
Navigator
Screen
2、获取DOM对象
document
4、特点
Window对象不需要创建可以直接使用window调用,如window.方法名();
Window引用可以省略。 方法名();
*/
alert("hahah");
window.alert("hello a ");
var flag = confirm("您确定要退出吗");
//通过flag返回值来进行逻辑操作
if(flag == true){
//退出操作
}else{
//继续操作
}
//输入框
var h = prompt("请输入用户名");
alert(h);//输出用户输入的值
//打开新窗口
var btn = document.getElementById("hun");
btn.onclick = function () {
//打开新窗口
open();
}
//一次性定时器
var i = setTimeout(f(),3000); //3000是毫秒值
//取消定时器
clearTimeout(i);
function f() {
alert('boom');
}
//循环定时器
var o = setInterval(f(),2000);
clearInterval(o);
//获取history
var h1 = window.history;
var h2 = history;
alert(h1);
alert(h2);
</script>
</body>
</html>
Navigator:浏览器对象(不重要)
Screen:显示器屏幕对象(不重要)
History:历史记录对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="button" id="btn" value="获取历史记录个数">
<script>
/*
History:历史记录对象
1、创建(获取):
window.History
history
2、方法
back():加载history列表中的前一个URL
forward():加载history列表中的下一个URL
go(参数):加载history列表中的某个具体页面
参数:
如果是一个正数,前进几个历史记录
如果是一个负数,后退几个历史记录
3、属性
length:返回当前窗口历史列表中的URL数量
*/
//获取按钮
var a = document.getElementById("btn");
//绑定单击事件
a.onclick=function (ev) {
//获取当前窗口历史记录个数
var length = history.length;
alert(length);
}
</script>
</body>
</html>
Location:地址栏对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="button" id="btn" value="刷新">
<input type="button" id="goBaidu" value="去百度">
<script>
/*
location:地址栏对象
1、创建(获取)
window.location
location
2、方法
reload方法:定义一个按钮,点击按钮,刷新当前页面
3、属性
href方法: 设置或者返回完整的URL
*/
//获取按钮
var btn = document.getElementById("btn");
//绑定单击事件
btn.onclick=function () {
//刷新页面
location.reload();
}
var a = location.href;
alert(a);
var i = document.getElementById("goBaidu");
i.onclick=function () {
//去访问百度的地址
location.href="https://www.baidu.com";
}
</script>
</body>
</html>
DOM
概念:Document Object Model文档对象模型
将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作。
W3C DOM标准被分为3个不同的部分:
核心 DOM - 针对任何结构化文档的标准模型
Document:文档对象(重要)
Element:元素对象(重要)
Attribute:属性对象
Text:文本对象
Comment:注释对象
Node:节点对象,其他五个的父对象(重要)
核心DOM模型
Document:文档对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="button" id="btn" value="获取历史记录个数">
<script>
/*
Document:文档对象
1、创建(获取):在html dom模型中可以使用window对象来获取
window.document
document
2、方法
1、获取Element对象
getElementById():根据id属性值获取元素对象,id属性值一般唯一
getElementsByTagName():根据元素名称获取元素对象们,返回值是一个数组
getElementsByClassName():根据Class属性值获取元素对象们,返回值是一个数组
getElementsByName():根据name属性值获取元素对象们
2、创建其他DOM对象
createAttribute(name)
createComment()
createElement()
createTextNode()
*/
</script>
</body>
</html>
Element:元素对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a>点我试一下</a>
<input type="button" id="btn_set" value="设置属性">
<input type="button" id="btn_remove" value="删除属性">
<script>
/*
Element:元素对象
1、创建(获取):通过document来获取和创建
2、方法:
1、removeAttribute():删除属性
2、setAttribute():设置属性
*/
var a = document.getElementById("btn_set");
a.onclick=function (ev) {
//获取a标签
var element_a = document.getElementsByTagName("a")[0];
element_a.setAttribute("href","https://www.baidu.com");
}
var b = document.getElementById("btn_remove");
b.onclick=function (ev) {
//获取a标签
var element_b = document.getElementsByTagName("a")[0];
element_b.removeAttribute("href");
}
</script>
</body>
</html>
Node:节点对象,其他五个的父对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
border:1px solid red;
}
#div1{
width: 200px;
height: 200px;
}
#div2{
width: 100px;
height: 100px;
}
</style>
</head>
<body>
<div id="div1">
<div id="div2">
div2
</div>
div1
</div>
<a href="javascript:void(0);" id="del">删除子节点</a>
<!--<input type="button" id="del" value="删除子节点">-->
<script>
/*
Node:节点对象,其他五个的父对象
特点:所有dom对象都可以被认为是一个节点
方法:
CRUD DOM树:
appendChild():向节点的子节点列表的结尾添加新的子节点
removeChild():删除并返回当前节点的指定子节点
replaceChild():用新节点替换一个子节点
属性:
parentNode:返回该节点的父节点
*/
//获取超链接
var element = document.getElementsById("del");
//绑定单击事件
element.onclick=function () {
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
div1.removeChild(div2);
}
/*
超链接功能:
1、可以被点击:样式
2、点击后跳转到href指定的url
需求:保留1功能,去掉2功能
实现:href="javascript:void(0);"
*/
var div2 = document.getElementById("div2");
var div1 = div2.parentNode;
alert(div1);
</script>
</body>
</html>
HTML DOM - 针对HTML文档的标准模型
1、标签题的设置和获取:innerHTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="div1">
div
</div>
<script>
var div = document.getElementById("div1");
var innerHTML = div.innerHTML;
// alert(innerHTML);
//利用这个innerHTML来进行标签的更改
div.innerHTML = "<input type='text'>";
</script>
</body>
</html>
2、使用HTML元素对象的属性
3、控制样式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.d1{
border: 1px solid red;
width: 100px;
height: 100px;
}
.d2{
border: 1px solid blue;
width: 100px;
height: 100px;
}
</style>
</head>
<body>
<div id="div1">
div1
</div>
<div id="div2">
div2
</div>
<script>
var div = document.getElementById("div1");
div.onclick=function (ev) {
//修改样式方式1
div.style.border = "1px solid red";
div.style.width="200px";
div.style.fontSize = "20px";
}
//修改样式方式2
var div2 = document.getElementById("div2");
div2.onclick=function (ev) {
div2.ClassName="d1";
}
</script>
</body>
</html>
就此差不多就结束了,对于后端程序员来说掌握这些差不多了。