JavaScript_基础
网页中个技术的作用
技术 | 作用 |
---|---|
HTML | 创建网页的结构 |
CSS | 页面的美化 |
JavaScript | 用于网页的交互,让网页变得更加生动,提高用户的体验 |
JavaScript的两种引入方式
语言组成
组成部分 | 作用 |
---|---|
ECMA Script | 所有脚本语言规范,构成了JavaScript语法基础 |
BOM | Browser Object Model 浏览器对象模型,用来操作浏览器中各种对象 |
DOM | Document Object Model 文档对象模型,用来操作网页中各种元素 |
script标签的说明
-
标签个数:在同一个网页中可以出现多个script标签
-
位置:script标签可以放在网页中任意位置,甚至html之外
-
语句后分号:如果一行代码一条语句,分号可以省略,不建议省略
-
js脚本通常放在HTML外面,导入来使用,使用script标签来导入。
属性:src 执行要导入的外部js文件
必须是有一个主体都的标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JavaScript的初体验</title> </head> <body> <!--JavaScript脚本必须放在script标签中,MIME类型:大类型/小类型 --> <script type="text/javascript"> for (var i = 0; i < 5; i++) { //在文档上写东西,整个网页就是一个文档document document.write("<h1>Hello World!</h1>"); } </script> <!-- 1. 标签个数:在同一个网页中可以出现多个script标签1 2. 位置:script标签可以放在网页中任意位置,甚至是html之外 3. 语句后分号:如果一行代码一条语句,分号可以省略,不建议省略 4. 以后js脚本通常放在HTML外面,导入来使用,使用script标签来导入。 属性:src 指定要导入的外部js文件 必须是一个有主体的标签 --> <script src="js/out.js" type="text/javascript"></script> </body> </html>
定义变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>变量定义</title>
</head>
<body>
<!--输入sc以后,按ctrl+j-->
<script type="text/javascript">
var i = 5; //定义整数
let m = 6; //默认idea不支持,要修改EC为6
const PI = 3.14; //常量
document.write(i + "<br/>");
document.write(m + "<br/>");
//PI = 5; 不能重新赋值
document.write(PI + "<br/>");
</script>
</body>
</html>
数据类型
数据类型 | Java中定义变量 | JS中定义变量 |
---|---|---|
整数 | int i = 5; | var i=5; |
浮点数 | float f = 3.14f; 或 double d=3.14; | var f=3.14; |
布尔 | boolean b = true; | var b=true; |
字符 | char c = ‘a’; | var c = ‘a’; //没有字符类型,只有字符串 |
字符串 | String str = “abc”; | var str = “abc”; |
var和let区别
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>var和let的区别</title>
</head>
<body>
<script type="text/javascript">
//1.作用域不同:var定义的变量在代码块中不受{}限制,let定义的变量是受限制
{
var x = 5;
}
document.write(x + "<br/>"); //可以输出,不受{}限制
{
let y = 6;
}
//document.write(y + "<br/>"); //找不到y的值,出错
//2.重新定义变量区别:var可以修改变量的值
var a = 10;
{
var a = 2;
}
document.write(a + "<br/>"); //2
let b = 5;
{
let b = 3; //不可见
}
document.write(b + "<br/>"); //5
//3.const关键字,如果是对象,它的属性可以修改
const person = {"name": "NewBoy", "age": 18};
document.write(person.name + "<br/>");
document.write(person.age + "<br/>");
//person = {}; //不行的
person.age = 19;
document.write(person.age + "<br/>");
</script>
</body>
</html>
小结
-
在JS中定义变量使用哪个关键字?
- var
- let
-
JS是弱类型还是强类型?
弱类型语言
-
有没有字符和字符串的区别?
没有字符类型,只有字符串,字符串使用:"" ,’’ ,``
typeof操作符
分别输出整数、浮点数、字符串(单引号和双引号)、布尔、未定义、对象、null的数据类型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>五种数据类型</title>
</head>
<body>
<script type="text/javascript">
//分别输出整数、浮点数、字符串(单引号和双引号)、布尔、未定义、对象、null的数据类型
let i = 5;
document.write(typeof(i)+ "<br/>"); //number
let f = 3.4;
document.write(typeof(f) + "<br/>"); //number
let c = 'a';
document.write(typeof(c) + "<br/>"); //string
let s = "abc";
document.write(typeof(s) + "<br/>"); //string
let b = true;
document.write(typeof(b) + "<br/>"); //boolean
let u;
document.write(typeof(u) + "<br/>"); //undefined
let n = {name: "jack", age: 18};
document.write(typeof(n) + "<br/>"); //object
/**
* 注:null和undefined的区别
* 1. null本质上是一个对象类型,只是这个对象没有值
* 2. undefined 未知的类型
*/
let x = null;
document.write(typeof(x) + "<br/>"); //object
</script>
</body>
</html>
比较运算符
比较运算符用于逻辑语句的判断,从而确定给定的两个值或变量是否相等。
数字可以与字符串进行比较,字符串可以与字符串进行比较。字符串与数字进行比较的时候会先把字符串转换成数字然后再进行比较
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>运算符</title>
</head>
<body>
<script type="text/javascript">
let s1 = 5;
let s2 = "5";
document.write((s1 == s2) + "<br/>"); //true 比较值是否相等
document.write((s1 === s2) + "<br/>"); //恒等于,既比较值,又比较类型
document.write((s1!=s2) + "<br/>"); //false
document.write((s1!==s2) + "<br/>"); //恒不等于 true
</script>
</body>
</html>
逻辑运算符
逻辑运算符用来确定变量或值之间的逻辑关系,支持短路运算
逻辑运算符不存在单与&、单或|
三元运算符
流程控制
if 语句:
在一个指定的条件成立时执行代码。
if(条件表达式) {
//代码块;
}
if…else 语句
在指定的条件成立时执行代码,当条件不成立时执行另外的代码。
if(条件表达式) {
//代码块;
}
else {
//代码块;
}
if…else if…else 语句
使用这个语句可以选择执行若干块代码中的一个。
if (条件表达式) {
//代码块;
}
else if(条件表达式) {
//代码块;
}
else {
//代码块;
}
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>if语句</title>
</head>
<body>
<script type="text/javascript">
/*
1. Java中判断条件必须是布尔类型的值
2. 在JS中可以使用非布尔类型的表达式
真 假
number 非0 0
string 非空串 空串 ""
object 非空 null
undefined 永远为假
NaN (Not a Number) 永远为假
3. 建议判断条件还是使用boolean类型比较好
*/
/*
if(0) {
document.write("真" + "<br/>");
}
else {
document.write("假" + "<br/>");
}
*/
/*
if("") {
document.write("真" + "<br/>");
}
else {
document.write("假" + "<br/>");
}
*/
/*
var person = {}; //创建一个对象
if(null) {
document.write("真" + "<br/>");
}
else {
document.write("假" + "<br/>");
}
*/
let u; //undefined
if(u) {
document.write("真" + "<br/>");
}
else {
document.write("假" + "<br/>");
}
</script>
</body>
</html>
总结
Java中判断条件必须是布尔类型的值
在JS中可以使用非布尔类型的表达式
真 假
number 非0 0
string 非空串 空串 ""
object 非空 null
undefined 永远为假
NaN (Not a Number) 永远为假
建议判断条件还是使用boolean类型比较好
switch语句
switch(true) { //这里的变量名写成true
case 表达式: //如:n > 5
break;
case 表达式:
break;
default:
break;
}
与java的switch区别
在java中case 后面只能是常量,但是在javaScript中case 后面可以用表达式,java中不行的。
window对象
window对象的方法名 | 作用 |
---|---|
string prompt(“提示信息”,"默认值”) | 输入框,参数: 1. 输入的提示信息 2. 一开始出现在输入框中值 返回值:就是用户输入的信息,字符串类型 |
setInterval(“函数名()”,隔多久调用一次) | 每隔一段时间就调用指定的函数 参数1:方法名 参数2:隔多久调用一次,单位毫秒值 |
alert(“提示信息”) | 输出信息框 |
confirm(“提示内容”) | 浏览器弹出一个提示框,如果点击是就是true,如果点击否就是false |
- window.confirm(“提示内容”)->浏览器弹出一个提示框,如果点击是就是true,如果点击否就是false
例如:let flag=confirm(“是否”);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script type="text/javascript">
let b = window.confirm("YES OR NO");//如果选择是,b的值就是true 否则就是false
document.write(b);
</script>
</html>
-
window.propmt(“提示信息”)->浏览器弹出一个提示框和一个输入框,输入的内容可以用一个变量来接受
例如:let srt=propmt(“请输入内容”)<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> <script type="text/javascript"> let gender = window.prompt("你是男是女");//提示信息 document.write(gender);//接收用户输入的内容 </script> </html>
-
alert(“提示信息”)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> <script type="text/javascript"> alert("JavaScript"); </script> </html>
效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LFFoL7V1-1592209088349)(C:\Users\wucn\AppData\Roaming\Typora\typora-user-images\1592193129395.png)]
命名函数和匿名函数
函数的概念
-
什么是函数:
一个代码块,给一个代码块起一个名字,以后通过名字来进行调用,实现重用的功能,类似于java中的方法
-
两种函数
- 命名函数:有名字的函数,可以通过名字来进行多次调用
- 匿名函数:没有名字的函数,不可重用,只能使用一次。但可以通过一个变量来指向它,实现重用
命名函数的格式:
function 函数名(参数列表){
//代码块
return 返回值 ;//可选:如果这个函数有返回值,就是用return,没有就不使用
}
定义一个函数实现加法功能
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script type="text/javascript">
//调用加法函数
let addition1 = addition(10,10);
document.write(addition1);
//加法函数
function addition(a,b) {
return a+b;
}
</script>
</html>
注意事项
- 在JS中没有函数的重载,后面出现的同名函数会覆盖前面的同名函数
- 实参个数与形参的个数无关,只会按函数名字去调用
- 在每个函数的内部都有一个隐藏的数组,名字叫arguments
- 隐藏数组的执行过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tFLucRsf-1592209088354)(C:\Users\wucn\AppData\Roaming\Typora\typora-user-images\1592198165805.png)]
设置事件的两种方式
什么是事件
用户在操作网页的过程中,会有各种操作,每种操作都会产生事件。我们可以通过JS来监听这些事件,对这些事件编写函数进行处理,来实现交互
设置事件的两种方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件的处理方式</title>
</head>
<body>
<!--onclick表示点击事件-->
<input type="button" value="命名函数" id="b1" onclick="clickMe()">
<input type="button" value="匿名函数" id="b2">
<script type="text/javascript">
/*
有两个按钮,点第1个弹出一个信息框,点第2个弹出另一个信息框。分别使用两种不同的方式激活事件
1. 使用命名函数的处理方式:
在标签上直接使用 on事件名="处理函数()"
2. 使用匿名函数的处理方式:
元素对象.on事件名 = function() {
}
*/
function clickMe() {
alert("命名函数");
}
//得到按钮2这个对象
document.getElementById("b2").onclick = function () {
alert("匿名函数");
}
</script>
</body>
</html>
-
事件处理中命名函数的写法
onclick = "函数名()" function 函数名() { }
-
事件处理中匿名函数的写法
元素对象.onclick = function() { }
各个事件
事件名 作用 onclick 单击 ondblclick 双击 onload 加载完毕 onfocus 得到焦点 onblur 失去焦点 onchange 改变事件 onmouseover 鼠标移上 onmouseout 鼠标移出
内置对象
字符串对象
方法名 | 作用 |
---|---|
substring(startIndex,endIndex) | 取子字符串,包头不包尾,索引从0开始。参数是起始位置 |
substr(startIndex, length) | 取子字符串,起始位置,长度 |
split(delimiter) | 把一个字符串使用指定的分隔符,切割成一个数组 |
toLowerCase() | 变成小写 |
toUpperCase() | 变成大写 |
trim() | 去掉前后的空格 |
数学对象
方法名 | 作用 |
---|---|
round(x) | 四舍五入保留到整数 |
floor(x) | 向下取整 |
ceil(x) | 向上取整 |
random() | 随机生成0~1之间的小数,不等于1 |
全局函数
字符串转为数字 | 说明 |
---|---|
parseInt(字符串) | 转成整数,如果转换失败,返回NaN |
parseFloat(字符串) | 转成小数 |
isNaN(字符串) | 在转换前判断是否为非数字,非数字返回true,数字为false |
编码和解码 | 说明 |
---|---|
encodeURI(字符串) | 对汉字进行URI编码 编码后是(%…%)这种信息 |
decodeURI(字符串) | 对URI编码后的 将上上面的开始格式转成一个汉字字符串 |
数组对象
方法名 | 功能 |
---|---|
concat() | 拼接数组 |
reverse() | 反转 |
join(separator) | 将数组接拼接成一个字符串 |
sort() | 排序 |
pop() | 删除最后一个元素 |
push() | 添加元素 |
日期对象
-
创建日期
let date = new Date();
日期对象的方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sf84DLj6-1592209088355)(C:\Users\wucn\AppData\Roaming\Typora\typora-user-images\1592201383615.png)]
JavaScript_高级
JSON
什么是JSON
- JSON(JavaScript Object Notaion,JavaScript对象标记),是一种轻量级的数据交换格式,用于服务器与浏览器之间传输数据。以前都是XML 传递数据。在AJAX中传递的数据格式也是使用的JSON
- XML不足
- 描述信息的数据比需要的真是数据多
- 占用了更多的传输宽带
- 解析XML比较麻烦
- XML不足
<contact>
<name>貂蝉</name>
<gender>false</gender>
<age>20</age>
</contact>
-
JSON
{ name: "貂蝉", gender: false, age: 20 }
json的语法格式
类型 | 语法 | 解释 |
---|---|---|
对象类型 | {键:值, 键:值} | 代表一个对象,可以有多个属性 属性与值之间使用冒号,属性与属性之间使用逗号 |
数组/集合类型 | [元素,元素,元素] | 数组中每个元素类型是可以不同 |
混合类型 | [{键:值},{键:值},{键:值}] | 数组中每个元素是一个对象 |
{键:[元素,元素,元素]} | 是一个对象,但某个属性是一个数组或集合 |
JS中操作JSON的方法
语法 | 功能 |
---|---|
JSON.parse(“字符串”) | 将一个字符串转成JSON格式 注:JSON字符串中的属性名一定要用双引号引起来 |
JSON.stringify(JSON) | 将一个JSON对象转成一个字符串 |
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script type="text/javascript">
//将字符串转成一个JSON格式
let str='{"username":"张三","password":123}';
let user=JSON.parse(str);
alert("用户名:"+user.username+" 密码:"+user.password);
//
let s = JSON.stringify(user);
alert(s);
</script>
</html>
BOM:location对象
什么是BOM
浏览器对象模型,用来操作浏览器中各种对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K7p23cDa-1592209088357)(C:\Users\wucn\AppData\Roaming\Typora\typora-user-images\1592205462866.png)]
-
winds对象(JavaScript中已介绍window对象)
-
history(历史)
作用:访问历史记录中的页面
三个方法:
-
forward()
相当于浏览器上的前进按钮,如果浏览器上前进按钮不可用,这个方法也不起作用
-
back()
相当于浏览器上后退按钮
-
go(整数或负数)
正数是前进,负数是后退
-
-
location(地址栏)
作用:代表浏览器上地址栏对象,主要用于页面跳转
2个属性
-
href
- 获取属性值,得到当前访问地址 location.href->得到当前的页面的地址。
- 设置属性值,跳转到指定页面 location.href=“http://www.baidu.com”->跳转到指定的地址。
-
search:
let seach=location.seach;->获取?后面的参数
GET方法提交表单的时候,参数会显示在地址栏上面
-
方法:
reload ():相当于刷新整个页面
DOM查找元素的方法
查找节点的方法
获取元素的方法 | 作用 |
---|---|
document.getElementById(“id”) | 通过id得到一个元素 |
document.getElementsByTagName (“标签名”) | 通过标签名得到一组元素 |
document.getElementsByName(“name”) | 通过name属性得到一组元素 |
document.getElementsByClassName(“类名”) | 通过类名得到一组元素 |
根据CSS选择器获取元素 | 作用 |
---|---|
document.querySelector(CSS选择器) | 通过css选择器获取一个元素,如:"#id" “.类名” “标签名” |
document.querySelectorAll(CSS选择器) | 通过css选择器获取一组元素 |
正则表达式
正则表达式:
作用:判断正则表达式是否匹配字符串的方法:
boolean 正则表达式对象.test(字符串) 如果匹配返回true,否则返回false
例如:let str='^ $'; 这是一个正则表达式
str.test("字符串") ->判断这个字符串是否符合这个正则表达式