JavaWeb--前端--02JavaScript

60 阅读8分钟

1 JavaScript介绍

JavaScript,这门语言会让我们的页面能够和用户进行交互。

2 引入方式

第一种方式:内部脚本,将JS代码定义在HTML页面中(初学一天了用这个,后续使用这一种)

第二种方式:外部脚本将, JS代码定义在外部 JS文件中,然后引入到 HTML页面中

  • 外部JS文件中,只包含JS代码,不包含 script 标签
  • 引入外部jsscript标签,必须是双标签

例子:

<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>

image.png

3 基础语法

3.1 书写语法

  • 区分大小写:与 Java 一样,变量名、函数名以及其他一切东西都是区分大小写的
  • 每行结尾的分号可有可无
  • 大括号表示代码块

js的三种输出语句

api描述
window.alert()警告框
document.write()在HTML 输出内容
console.log()写入浏览器控制台

3.2 变量

关键字解释
var早期ECMAScript5中用于变量声明的关键字,var关键字声明的变量可以重复定义
letECMAScript6中新增的用于变量声明的关键字,相比较var,let只在代码块内生效,let : 局部变量 ; 不能重复定义
const声明常量的,常量一旦声明,不能修改
    const pi=3.14;
    pi=3.141;
    alert(x);

image.png

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");
}

image.png

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>

image.png

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>

image.png

与java中不一样的是,JavaScript中数组相当于java中的集合,数组的长度是可以变化的。

    //特点: 长度可变 类型可变
    var arr = [1, 2, 3, 4];
    arr[10] = 50;

    console.log(arr[10]);
    console.log(arr[9]);
    console.log(arr[8]);

image.png

var arr = [1, 2, 3, 4]; 
arr[10] = 50; 
arr[9] = "A"; 
arr[8] = true; 
console.log(arr);

image.png

官方文档中提供了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]); }

image.png

  • 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>

image.png

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鼠标从某元素移开