1 JavaScript介绍
JavaScript,这门语言会让我们的页面能够和用户进行交互。
2 引入方式
第一种方式:内部脚本,将JS代码定义在HTML页面中(初学一天了用这个,后续使用这一种)
第二种方式:外部脚本将, JS代码定义在外部 JS文件中,然后引入到 HTML页面中
- 外部JS文件中,只包含
JS代码,不包含script标签 - 引入外部
js的script标签,必须是双标签
例子:
<script src="js/demo.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>介绍</title>
<!-- 内部脚本 -->
<!-- <script>
alert('Hello JS');
</script> -->
<!-- 外部脚本 -->
<script src="js/demo.js"></script>
</head>
<body>
</body>
</html>
3 基础语法
3.1 书写语法
- 区分大小写:与 Java 一样,变量名、函数名以及其他一切东西都是区分大小写的
- 每行结尾的分号可有可无
- 大括号表示代码块
js的三种输出语句
| api | 描述 |
|---|---|
| window.alert() | 警告框 |
| document.write() | 在HTML 输出内容 |
| console.log() | 写入浏览器控制台 |
3.2 变量
| 关键字 | 解释 |
|---|---|
| var | 早期ECMAScript5中用于变量声明的关键字,var关键字声明的变量可以重复定义 |
| let | ECMAScript6中新增的用于变量声明的关键字,相比较var,let只在代码块内生效,let : 局部变量 ; 不能重复定义 |
| const | 声明常量的,常量一旦声明,不能修改 |
const pi=3.14;
pi=3.141;
alert(x);
3.3 数据类型和运算符
| 数据类型 | 描述 |
|---|---|
| number | 数字(整数、小数、NaN(Not a Number)) |
| string | 字符串,单双引皆可 |
| boolean | 布尔。true,false |
| null | 对象为空 |
| undefined | 当声明的变量未初始化时,该变量的默认值是 undefined |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//原始数据类型
alert(typeof 3); //number
alert(typeof 3.14); //number
alert(typeof "A"); //string
alert(typeof 'Hello');//string
alert(typeof true); //boolean
alert(typeof false);//boolean
alert(typeof null); //object
var a;
alert(typeof a); //undefined
</script>
</body>
</html>
| 运算规则 | 运算符 | ||
|---|---|---|---|
| 算术运算符 | + , - , * , / , % , ++ , – | ||
| 赋值运算符 | = , += , -= , *= , /= , %= | ||
| 比较运算符 | > , < , >= , <= , != , == , =。 注意:== 会进行类型转换,= 不会进行类型转换 | ||
| 逻辑运算符 | && , | , ! | |
| 三元运算符 | 条件表达式 ? true_value: false_value |
- ==:只比较值是否相等,不区分数据类型,哪怕类型不一致,==也会自动转换类型进行值得比较
- ===:不光比较值,还要比较类型,如果类型不一致,直接返回false
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var age = 20;
var _age = "20";
var $age = 20;
alert(age == _age);//true ,只比较值
alert(age === _age);//false ,类型不一样
alert(age === $age);//true ,类型一样,值一样
</script>
</body>
</html>
在js中,虽然不区分数据类型,但是有时候涉及到数值计算,还是需要进行类型转换的,js中可以通过parseInt()函数来进行将其他类型转换成数值类型。注释之前的代码,添加代码如下:
// 类型转换 - 其他类型转为数字
alert(parseInt("12")); //12
alert(parseInt("12A45")); //12
alert(parseInt("A45"));//NaN (not a number)
在js中,0,null,undefined,"",NaN理解成false,反之理解成true。
注释掉之前的代码,添加如下代码:
if(0){ //false
alert("0 转换为false");
}
浏览器刷新页面,发现没有任何弹框,因为0理解成false,所以条件不成立。注释掉上述代码,添加如下代码:
if(1){ //true
alert("除0和NaN其他数字都转为 true");
}
4 JS的函数
4.1函数的第一种定义
function 函数名(参数1,参数2..){
要执行的代码
}
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JS-函数</title>
</head>
<body>
<script>
function add(a,b){
return a+b;
}
var result = add(10, 20);
alert(result);
</script>
</body>
</html>
4.2 函数的第二中定义
var functionName = function (参数1,参数2..){
//要执行的代码
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JS-函数</title>
</head>
<body>
<script>
// 第一种定义
// function add(a,b){
// return a+b;
// }
//第二种定义
var add = function (a, b) {
return a + b;
}
var result = add(10, 20);
alert(result);
</script>
</body>
</html>
5 JavaScript对象
W3school -> JavaScript -> 参考书
点击进入:
www.w3school.com.cn/jsref/index…
5.1 基本对象
5.1.1 Array对象
方式一:
var 变量名 = new Array(元素列表);
var arr = new Array(1,2,3,4); //1,2,3,4 是存储在数组中的数据(元素)
方式二:
var 变量名 = [ 元素列表 ];
var arr = [1,2,3,4]; //1,2,3,4 是存储在数组中的数据(元素)
<script>
//定义数组
var arr = new Array(1, 2, 3, 4);
var arr = [1, 2, 3, 4];
//获取数组中的值,索引从0开始计数
console.log(arr[0]);
console.log(arr[1]);
</script>
与java中不一样的是,JavaScript中数组相当于java中的集合,数组的长度是可以变化的。
//特点: 长度可变 类型可变
var arr = [1, 2, 3, 4];
arr[10] = 50;
console.log(arr[10]);
console.log(arr[9]);
console.log(arr[8]);
var arr = [1, 2, 3, 4];
arr[10] = 50;
arr[9] = "A";
arr[8] = true;
console.log(arr);
官方文档中提供了Array的很多属性和方法,但是我们只学习常用的属性和方法,如下图所示:
属性:
| 属性 | 描述 |
|---|---|
| length | 设置或返回数组中元素的数量。 |
方法:
| 方法方法 | 描述 |
|---|---|
| forEach() | 遍历数组中的每个有值得元素,并调用一次传入的函数 |
| push() | 将新元素添加到数组的末尾,并返回新的长度 |
| splice() | 从数组中删除元素 |
- length属性:
length属性可以用来获取数组的长度,所以我们可以借助这个属性,来遍历数组中的元素,添加如下代码:
var arr = [1,2,3,4];
arr[10] = 50;
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
var arr = [1, 2, 3, 4]; arr[10] = 50; for (let i = 0; i < arr.length; i++) { console.log(arr[i]); }
- forEach()函数
这个方法的参数,需要传递一个函数,而且这个函数接受一个参数,就是遍历时数组的值。
//e是形参,接受的是数组遍历时的值
arr.forEach(function(e){
console.log(e);
})
在ES6中,引入箭头函数的写法,语法类似java中lambda表达式:
arr.forEach((e) => {
console.log(e);
})
没有元素的内容是不会输出的,因为forEach只会遍历有值的元素
- push()函数
push()函数是用于向数组的末尾添加元素的,其中函数的参数就是需要添加的元素,编写如下代码:向数组的末尾添加3个元素
//push: 添加元素到数组末尾
arr.push(7,8,9);
console.log(arr);
123
- splice()函数
splice()函数用来数组中的元素,函数中填入2个参数。
参数1:表示从哪个索引位置删除
参数2:表示删除元素的个数
如下代码表示:从索引2的位置开始删,删除2个元素
arr.splice(2,2);
console.log(arr);
完整代码块
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Array</title>
</head>
<body>
</body>
<script>
// //定义数组
// var arr = new Array(1, 2, 3, 4);
// var arr = [1, 2, 3, 4];
// //获取数组中的值,索引从0开始计数
// console.log(arr[0]);
// console.log(arr[1]);
//特点: 长度可变 类型可变
// var arr = [1, 2, 3, 4];
// arr[10] = 50;
// console.log(arr[10]);
// console.log(arr[9]);
// console.log(arr[8]);
// arr[9] = "A";
// arr[8] = true;
// console.log(arr);
var arr = [1, 2, 3, 4];
// arr[10] = 50;
// arr.push(7,8,9);
// console.log(arr);
// for (let i = 0; i < arr.length; i++) {
// console.log(arr[i]);
// }
// arr.forEach((e) => {
// console.log(e);
// })
arr.splice(2, 2);
console.log(arr);
</script>
</html>
5.1.2 String对象
创建方式一:
var 变量名 = new String("…") ; //方式一
var str = new String("Hello String");
方式二:
var 变量名 = "…" ; //方式二
var str = 'Hello String';
//创建字符串对象
//var str = new String("Hello String");
var str = " Hello String ";
console.log(str);
String对象也提供了一些常用的属性和方法,如下表格所示:
属性:
| 属性 | 描述 |
|---|---|
| length | 字符串的长度。 |
方法:
| 方法 | 描述 |
|---|---|
| charAt() | 返回在指定位置的字符。 |
| indexOf() | 检索字符串。 |
| trim() | 去除字符串两边的空格 |
| substring() | 提取字符串中两个指定的索引号之间的字符。 |
- length属性:
- length属性可以用于返回字符串的长度,添加如下代码:
//length
console.log(str.length);
- charAt()函数:
- charAt()函数用于返回在指定索引位置的字符,函数的参数就是索引。添加如下代码:
console.log(str.charAt(4));
- indexOf()函数
- indexOf()函数用于检索指定内容在字符串中的索引位置的,返回值是索引,参数是指定的内容。添加如下代码:
console.log(str.indexOf("lo"));
- trim()函数
- trim()函数用于去除字符串两边的空格的。添加如下代码:
var s = str.trim();
console.log(s.length);
- substring()函数
- substring()函数用于截取字符串的,函数有2个参数。
- 参数1:表示从那个索引位置开始截取。包含
- 参数2:表示到那个索引位置结束。不包含
console.log(s.substring(0,5));
测试代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>String</title>
</head>
<body>
</body>
<script>
//创建字符串对象
//var str = new String("Hello String");
var str = " Hello String ";
console.log(str);
//length
console.log(str.length);
//charAt
console.log(str.charAt(4));
//indexOf
console.log(str.indexOf("lo"));
//trim
var s = str.trim();
console.log(s.length);
//substring(start,end) --- 开始索引, 结束索引 (含头不含尾)
console.log(s.substring(0,5));
</script>
</html>
5.1.3 Json对象
语法格式:
<script>
//自定义对象
var user = {
name: "Tom",
age: 10,
gender: "male",
//eat: function(){
// console.log("用膳~");
//}
}
eat(){
console.log("用膳~");
}
console.log(user.name);
user.eat();
<script>
JSON对象:JavaScript Object Notation,JavaScript对象标记法。是通过JavaScript标记法书写的文本。其格式如下:
检验JSON格式的网站:
www.bejson.com/
6 JS事件
6.1事件绑定
JavaScript对于事件的绑定提供了2种方式:
- 方式1:通过html标签中的事件属性进行绑定 例如一个按钮,我们对于按钮可以绑定单机事件,可以借助标签的onclick属性,属性值指向一个函数。
<input type="button" id="btn1" value="事件绑定1" onclick="on()">
x
创建一个on()函数
<script>
function on(){
alert("按钮1被点击了...");
}
</script>
- 方式2:通过DOM中Element元素的事件属性进行绑定 依据我们学习过得DOM的知识点,我们知道html中的标签被加载成element对象,所以我们也可以通过element对象的属性来操作标签的属性。此时我们再次添加一个按钮,代码如下:
<input type="button" id="btn2" value="事件绑定2">
我们可以先通过id属性获取按钮对象,然后操作对象的onclick属性来绑定事件,代码如下:
document.getElementById("btn2").onclick=function(){
alert("按钮2被点击了");
}
6.3 常见事件
| 事件属性名 | 说明 |
|---|---|
| onclick | 鼠标单击事件 |
| onblur | 元素失去焦点 |
| onfocus | 元素获得焦点 |
| onload | 某个页面或图像被完成加载 |
| onsubmit | 当表单提交时触发该事件 |
| onmouseover | 鼠标被移到某元素之上 |
| onmouseout | 鼠标从某元素移开 |