速通前端篇——JavaScript

找往期文章包括但不限于本期文章中不懂的知识点:

个人主页:我要学编程程(ಥ_ಥ)-CSDN博客

所属专栏:速通前端

目录

介绍

基础语法

创建变量

数据类型

运算符

[JavaScript 对象](#JavaScript 对象)

数组

数组的相关操作

函数

函数表达式

对象

基本语法规范

JQuery

介绍

[JQuery 语法](#JQuery 语法)

JQuery选择器

JQuery事件

操作元素

获取/设置元素内容

获取/设置元素的属性

获取/设置CSS属性

添加元素

删除元素


介绍

JavaScript(简称JS),与Python一样,是一个脚本语言,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中。

用一张图来描述 HTML、CSS、JavaScript 三者之间的关系:

HTML是页面的基本框架,CSS是让页面变得更加好看,而JavaScript是让页面动起来。

例如,下面的操作,就会使页面动起来。

基础语法

JavaScript 与 HTML、CSS不同,它不是标签语言,而是使用我们平常写的代码。

创建变量

创建变量有三种方式:

|-------|--------------------------------|-------------------|
| 关键字 | 说明 | 示例 |
| var | 早期JS中声明变量的关键字,作用域在该语句的函数内 | var name = '张三'; |
| let | ES6中新增的声明变量的关键字,作用域为该语句所在的代码块内 | let name = '张三'; |
| const | 声明常量,即声明后不能修改 | const name = '张三' |

代码演示:

html 复制代码
<body>
    <!-- JS代码只有处于script标签中才生效 -->
    <script>
        // 定义变量
        // 1、使用 var
        var name1 = '张三';

        // 2、使用 let
        var name2 = '张三';

        // 3、使用 const
        const name3 = '张三';

        // 打印变量
        console.log(name1);
        console.log(name2);
        console.log(name3);
    </script>
</body>

上述代码我们直接去运行的话,是不会有任何结果的。如下所示:

如果想要看到结果,得去调试,摁住 F12 或者 Fn + F12。

这里的打印可以理解为是打印在日志上面的。

注意:

1、JavaScript 是一门动态弱类型的语言,不像Python那样完全无类型,这里的类型是使用 var 或者 let,但你也可以不指定类型,因此被称为弱类型,动态则是某个变量在该时刻是整型,在下一时刻就可能是字符串,是属于动态变化的。

当我们使用 var 或者 let 去声明某个变量时,这个变量只会在这个函数中生效,但是如果我们不使用 var 或者 let 声明的话,这个变量的声明周期就是全局的了。

2、变量命名规则:1)组成字符可以是任何字母、数字、下划线(_)或美元符号 ($);2)数字不能作为开头;3)建议使用Java中的驼峰命名法。

3、+ 表示字符串拼接,和Java中是一样的。

4、\n 表示换行。

数据类型

JavaScript中的数据类型与Java 类似,也是分为两种。一种是原始数据类型,另一种是引用数据类型。

|-----------|-----------------------------|
| 数据类型 | 说明 |
| number | 数字(不分整数与小数) |
| string | 字符串(与Python一样,可以使用单引号或者双引号) |
| boolean | 布尔类型,true 为真,false 为假 |
| undefined | 表示变量未初始化,该变量的值为 undefined |

代码演示:

上面的是原始数据类型,还有另外一种引用数据类型,与Java是一样的,null 属于引用类型。

运算符

JavaScript 的运算符 与 Java 的运算符是基本相同的。

|---------|---------------------------------|------------------|
| 运算符类型 | 运算符 | 说明 |
| 算术运算符 | +、-、*、/、% | / 不一样,其余与Java一样 |
| 自增自减运算符 | ++、-- | 与Java一样 |
| 赋值运算符 | =、+=、-=、*=、/=、%- | /= 不一样,其余与Java一样 |
| 比较运算符 | >、<、>=、<=、!=、!==、==、=== | 详情见代码演示 |
| 逻辑运算符 | &&、||、! | 详细见下 |
| 位运算 | &、|、^、~ | 详细见下 |
| 移位运算符 | <<、>>、>>> | 与Java一致 |
| 三目运算符 | 条件表达式 ?true_value : false_value | 与Java一致 |

代码演示:

1、算术运算符:

2、比较运算符:

简单记忆:

第一种,使用与Java中一样的 != 或者 == 时,只会比较字面值;当在此基础上,再加了个 = 时,就是严格比较类型与字面值了。

第二种,少个等号,只是比较字面值,多个等号,就会比较类型与字面值了。

3、Java 与 JavaScript 的移位运算符、三目运算符的效果都是一样的,逻辑运算符、 位运算符 稍有些差别,但是不大,我们不去做前端无需了解这么细。但下面给出差别之处,感兴趣的小伙伴可以用代码来感受一下。

在JavaScript中,逻辑运算的结果可以是布尔值或最后一个操作数,而Java中逻辑运算的结果总是布尔值。

Java的位运算是作用于整型,而JavaScript可以对任意数值进行位运算(会转换为32位整数),这是因为 JavaScript 的number类型中包含小数,但最终的结果是整数。

JavaScript 对象

JavaScript 中的对象 与 Java 中的对象,概念是一样的,但实现的方式却天差地别。JavaScript 也是一切皆对象。

数组

创建数组的方式有两种:

1、使用 new 关键字创建;2、使用 字面量的方式创建。

注意:数组中的类型不要求是同一个类型。即可以有字符串、数字、 布尔等类型同时存在。

既然数组是一个对象,那么我们肯定是可以对这个对象进行一些增删改查的操作的。只不过这里和Java 的增删改查有些不一样,JavaScript 中的数组,类似Java中的顺序表。

数组的相关操作

1、增加:

往数组中增加元素有两种方法:1)使用push方法在数组的最后增加元素;2)使用 "[ ]" 在数组的最后增加元素。

代码演示:

上述是正常增加的情况,我们还可以"恶意"增加元素。

代码演示:

javascript 复制代码
    <Script>
      let arr = ['hhh', true, 123];
      console.log(arr);
      // "恶意"增加的
      arr[100] = '恶意';
      // 注意:push方法并不支持"恶意"增加的操作
      // 下面这种方式,只是在101下标与102下标插入了两个元素
      arr.push(1000, '恶意');

      arr[1000] = '123';
      console.log(arr);
    </Script>

运行结果:

2、删除:使用 splice 方法来删除元素

代码演示:

javascript 复制代码
    <Script>
      let arr = ['hhh', true, 123];
      console.log(arr);
      // "恶意"增加的
      arr[100] = '恶意';
      // 注意:push方法并不支持"恶意"增加的操作
      // 下面这种方式,只是在101下标与102下标插入了两个元素
      arr.push(1000, '恶意');

      arr[1000] = '123';
      console.log(arr);

      // 删除元素
      // splice方法的参数分别为:删除的起始下标与删除的个数
      arr.splice(1000, 1);
      console.log(arr);
    </Script>

运行结果:

从这里我们也可以看出,JavaScript 中的数组可以实现自动扩容。

注意:即使要删除的位置不存在,也是不会报错的。例如,删除的位置是10000,但实际数组并没有这么大,这时并不会报数组越界之类的错误。

3、修改:这个与Java中是一样的,通过 "[ ]" 的下标索引来进行访问修改

代码演示:

javascript 复制代码
    <Script>
      let arr = [1,'a',true];
      arr[2] = false;
      console.log(arr);
    </Script>

运行结果:

4、查询:查询就是访问,这个也是与Java一样,使用 "[ ]" 的下标索引进行访问。

代码演示:

javascript 复制代码
    <Script>
      let arr = [1,'a',true];
      console.log("数组下标为2的位置,修改之前的值:"+arr[2]);
      arr[2] = false;
      console.log("数组下标为2的位置,修改之后的值:"+arr[2]);
    </Script>

运行结果:

注意:如果读取范围超过数组的下标,那么读取到的值就是 undefined。

函数

语法格式:

javascript 复制代码
// 函数的定义
function 函数名(参数列表) {
    ... // 函数体
    [return 返回值;] // 可有可无
}

// 函数的调用:
函数名(参数列表)

代码演示:

javascript 复制代码
    <Script>
        function add1(a, b) {
            console.log(a+b);
        }

        function add2(a, b) {
          return a+b;
        }

        add1(1,2);
        console.log(add2(1,2));
    </Script>

运行结果:

注意:

1、函数的调用位置 与 函数的定义位置 并不冲突,即谁先谁后无所谓。

2、函数的形参 与 实参 的个数可以不一致,但实际开发中都是一致的。那就会出现两种情况,一种是 实参的个数 多于 形参,另一种是形参的个数 少于 形参。

代码演示:

javascript 复制代码
    <Script>
        function add1(a, b) {
            console.log(a+b);
        }

        // 实参的个数多于形参
        add1(1,2,3);
        // 实参的个数少于形参
        add1(1);
    </Script>

运行结果:

在 JavaScript 中,NaN(Not-a-Number)是一个特殊的值,用来表示一个未定义或不可表示的值。上述代码的 add1(1) 由于缺少了一个参数,另外一个参数就默认是 undefined,因此最终相加的结果就是 NaN。

函数表达式

函数表达式类似于Java中的lambda表达式,这里是匿名函数。

代码演示:

javascript 复制代码
    <Script>
        // 函数表达式(匿名函数)
        let sum = function(nums) {
          let ret = 0;
          for (let i = 0; i < nums.length; i++) {
            ret += nums[i];
          }
          return ret;
        }

        let nums = [1,2,3,4,5];
        console.log(sum(nums));
    </Script>

运行结果:

注意:这里的sum此时可以理解为函数的名称,后续也可以多次调用sum函数。其实就是将函数用一个变量来表示了。

对象

在 JavaScript 中,字符串,数值,数组,函数这些都是属于对象,对象包含两大部分:一个是属性,一个是方法。

创建对象有三种方式:

一、使用 "{ }" 的方式直接创建对象:

语法格式:

javascript 复制代码
let 对象名 = {
    key: value
    ...
};

代码演示:

javascript 复制代码
     <script>
        let a = {}; // 创建一个空对象

        let student = {
            // 属性
            name: "张三",
            age: 20,
            gender: "男",
            // 方法
            sayHello: function () {
                console.log("Hello, My name is " + this.name + "!");
            }
        };

        console.log(student.name);
        console.log(student.age);
        console.log(student.gender);
        student.sayHello();
    </script>

注意:

1、在 JavaScript中,对象中的属性与方法都是以键值对的方式存在的。方法就是以匿名函数赋值给了对应的键。

2、键值对之间使用逗号进行分隔,键与值之间使用 ": (:+空格)"进行分隔。

3、对象属性的访问还可以使用 "["属性"]" 去进行访问:

javascript 复制代码
console.log(student[name]); // error
console.log(student["name"]);

4、对象在创建出来以后,也是可以去修改的。

javascript 复制代码
        // 修改对象的属性
        student.name = "李四";
        console.log(student.name);
        // 增加对象的属性
        student.job = "学生";
        console.log(student.job);
        // 删除对象的属性
        delete student.job;
        console.log(student.job);
        console.log(student);

运行结果:

二、使用 new Object 来创建对象:

语法格式:

javascript 复制代码
let 对象名 = new Object();
对象名.属性 = 属性值;

代码演示:

javascript 复制代码
    <script>
      let student = new Object();
      student.name = "张三";
      student.age = 20;
      student.gender = "男";
      console.log(student);
    </script>

运行结果:

方式二与方式一本质上是一样的,方式二的做法是 new Object,而方式一的做法是 {},但两者本质上都是空对象,后续的添加操作也是一致的。

三、使用 构造函数 创建对象:

语法格式:

javascript 复制代码
function 构造函数名(形参列表) {
    this.属性 = 值,
    ...
}

let 对象名 = new 构造函数名(实参列表);

代码演示:

javascript 复制代码
    <script>
      // 使用构造函数的方式创建对象
      function Student(name, age, gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
      }
  
      let student = new Student('张三', 20, '男');
      console.log(student);
    </script>

运行结果:

基本语法规范

JS 与 CSS一样是来辅助HTML的,也是需要引入的。同样JS的引入方式与CSS也是一致的。

|------|--------------------------------|
| 引入方式 | 说明 |
| 行内样式 | 直接嵌入到 html 标签内部 |
| 内部样式 | 定义<script>标签,写到 script 标签中 |
| 外部样式 | 定义<script>标签,通过src属性引入外部js文件 |

注意:如果引入的方式不对,那么浏览器无法将这些 JavaScript 的代码正确转换。

代码演示:

1、行内样式:

行内样式在日常开发的过程中,基本上不用,因此我们简单了解一下即可。

2、内部样式:

前面我们写的代码都是属于内部样式的,这里也就不再演示了。

3、外部样式:

外部样式的导入有很多种,但主要是分为两类:一种,是导入本地的;另一种是导入别的主机上的。

代码演示:

javascript 复制代码
<head>
    <meta charset="UTF-8">
    <title>这是页面标题</title>
    <!-- 导入当前目录下的 script.js 文件 -->
    <script src="script.js"></script>
</head>

从别的主机上导入,就是通过网络传输的,也就是导入依赖。

JQuery

介绍

JQuery是使用JavaScript代码来编写的一个.js 文件,简称为库。

由于我们在编写不同项目的代码时,经常会出现重复实现一个函数的事情,大佬们为了节省重复造轮子的时间,就会将常用的函数、对象等全部写到一个文件中,这个文件就是JQuery,我们也称为"库",因此后续在使用JQuery时,需要导入这些文件,也就是导入库。

由于JQuery的原生库是别的主机上,我们去导入时,需要通过网络传输,网络传输的速度是慢于本地访问(硬盘读取)的速度,因此我们最好是将JQuery下载到本地,这样去导入时,所需的时间也会比较短。而导入的方式也是输入外部样式:

javascript 复制代码
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

当然,我们也可以将这个文件下载到本地,这样后面再去导入就很简单了:

javascript 复制代码
<script src="C:\Users\jiume\Desktop\jquery-3.7.1.min.js"></script>

通过JQuery,可以快速、简洁的来操作页面对象。

JQuery 语法

JQuery 语法是通过选取HTML元素,并对选取的元素执行某些操作。

语法格式:

javascript 复制代码
$(selector).action()

// $() 是由JQuery提供的全局函数,可以选择和操作HTML元素
// selector选择器,用于"查询"HTML元素
// action,对选择的元素进行操作

简单来说,就是选择对应的HTML元素,执行相应的操作。

JQuery的代码通常都写在 document ready 函数中,这是为了防止文档在完全加载(就绪)之前运行JQuery 代码,即在文档加载完成后才可以对页面进行操作。如果在文档没有完全加载之前就运行函数,操作可能失败。document 是指整个文档对象,一个页面就是一个文档对象,使用document 来表示。

JQuery选择器

通过前面的学习,我们也知道JQuery是通过选择器来选取一些HTML元素,然后对这些元素进行相关操作,JQuery选择器是基于已经存在的CSS选择器,除此之外,还有一些自定义的选择器,JQuery 中所有选择器都以开头:()。

|----------------------|--------------------------------------------|
| 语法 | 描述 |
| ("\*")** | 选取所有元素(**\***可以理解为通配符) | | **(this) | 选取当前 HTML 元素(代指某个具体的对象) |
| ("p")** | 选取所有 \ 的元素 | | **("p:first") | 选取第一个<p>元素 |
| ("p:last")** | 选取最后一个\元素 | | **(".box") | 选择所有 class="box"的元素 |
| ("#box")** | 选择所有 id="box"的元素 | | **("intro.demo") | 选取所有 class="intro"且 class="demo"的元素(中间无空格) |
| ("intro .demo")** | 选取所有 class="intro"下class="demo"的元素(中间带有空格) | | **("p .intro") | 选取 <p>下class 为 intro 的元素 |
| ("ul li:first")** | 选取\下的第一个\元素 | | **(":input") | 选取所有<input>元素 |
| (":text")** | 选取所有 type="text"的\元素 | | **(":checkbox") | 选取所有 type="checkbox"的<input>元素 |
[常用的JQuery选择器]

由于选择器非常的多,并且需求只是速通,因此这里就不再演示代码了。

JQuery事件

JavaScript 要想构建动态页面,就需要感知到用户的行为。

用户对于页面的一些操作(点击,选择,修改等)都会在浏览器中产生一个个事件,被JavaScript获取到,从而进行更复杂的交互操作。

事件是由三部分组成:事件源(发起者)、事件类型(干了啥)、事件处理程序(如何处理的)。

|--------------|---------------------------------|
| 事件 | 对应的代码 |
| 文档加载完成(就绪)事件 | (document).ready(function) | | 点击事件 | (selector).click(function) |
| 双击事件 | (selector).dblclick(function) | | 元素值发生改变事件 | (selector).change(function) |
| 鼠标悬停事件 | $(selector).mouseover(function) |
[常见的事件]

在操作元素的章节,再去具体演示。

操作元素

获取/设置元素内容

|---------------|------------------------|
| 方法 | 说明 |
| text([val]) | 设置或者返回所选元素的文本内容 |
| html([val]) | 设置或返回所选元素的内容(整个HTML标签) |
| val([val]) | 设置或返回表单字段的值 |
[常用的方法]

注意:[val] 代表标签内需要修改的值

代码演示:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这是页面标题</title>
    <!-- 导入当前目录下的 script.js 文件 -->
<!--    <script src="script.js"></script>-->
    <script src="C:\Users\jiume\Desktop\jquery-3.7.1.min.js"></script>
</head>
<body>
<!--    <button onclick="alert('Hello, World!');">点击我</button>-->
    <div id="div">
        <span class="mySpan">这是一个span</span>
        <span class="mySpan">这是一个span</span>
        <span class="mySpan">这是一个span</span>
    </div>

<script>
    $(document).ready(function(){
        // 获取 class 为 mySpan 的元素的初始文本
        let initialText = $("#div .mySpan").text();
        console.log("初始文本: " + initialText);
    });

    // 设置文本内容并获取HTML内容
    $("#div .mySpan").click(function(){
        $(this).text("Hello World");
        let updatedText = $(this).text();
        console.log("更新后的文本: " + updatedText);
    });
</script>
</body>
</html>

运行结果:

这里的场景,我们也是经常会遇到:在我们登录某个平台时,就会弹出对应的验证码,而这个验证码在每点击一次之后,就会被修改的,只不过这里是一个固定的值。

注意:当 修改的内容 包括标签在内时,html方法会识别出来,但是text方法并不会(有些也可以,例如 <b>)。

获取/设置元素的属性

attr()方法用于获取或者设置属性值。

代码演示:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这是页面标题</title>
    <script src="C:\Users\jiume\Desktop\jquery-3.7.1.min.js"></script>
</head>
<body>
    <a href="https://www.csdn.net/">csdn</a>
<script>
    // 获取或者设置属性的值
    console.log($("a").attr("href")); // 指定拿 href属性
    // 点击a标签,就设置为 另一个URL
    $("a").click(function(){
        $(this).attr("href", "https://blog.csdn.net/2301_80854132?type=blog");
    });
</script>
</body>
</html>

运行结果:

这是一个非常令人反感的操作,正常来说在点击时,会跳转到CSDN的官网界面,但是如果设置了点击跳转的话,在点击a标签时,实际上会跳转到修改后的标签。这里我是修改成了自己的个人主页,但在生活中遇到的可就不一样了(全是广告)。

获取/设置CSS属性

CSS()方法获取或者设置被选元素的一个或多个样式属性。

代码演示:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>这是页面标题</title>

    <script src="C:\Users\jiume\Desktop\jquery-3.7.1.min.js"></script>
</head>
<body>
    <div style="color: red;">这是一个div</div>

    <script>
        // 获取CSS属性
        console.log($("div").css("color"));

        // 设置CSS属性
        $("div").click(function(){
            $(this).css("color", ("green"));
        });
    </script>
</body>
</html>

运行结果:

添加元素

添加HTML内容

|-----------|--------------|
| 方法 | 说明 |
| append() | 在被选元素的结尾插入内容 |
| prepend() | 在被选元素的开头插入内容 |
| after() | 在被选元素之后插入内容 |
| before() | 在被选元素之前插入内容 |

代码演示:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>这是页面标题</title>

    <script src="C:\Users\jiume\Desktop\jquery-3.7.1.min.js"></script>
</head>
<body>
    <ol>
        <li>item1</li>
        <li>item2</li>
        <li>item3</li>
    </ol>

    <script>
        // 在ol元素的尾部增加
        $("ol").append("<li>item4</li>");
        // 在ol元素的头部增加
        $("ol").prepend("<li>item0</li>");
        // 在ol元素之前增加
        $("ol").before("<div>这是一个div<\div>");
        // 在ol元素之后增加
        $("ol").after("<div>这是一个div</div>");

    </script>
</body>
</html>

运行结果:

注意:这里的添加 与 html方法是一样的,可以识别出标签并转换。

删除元素

|----------|-------------------|
| 方法 | 说明 |
| remove() | 删除被选的元素(包括子元素) |
| empty() | 删除被选元素的子元素(不包括本身) |

代码演示:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>这是页面标题</title>

    <script src="C:\Users\jiume\Desktop\jquery-3.7.1.min.js"></script>
</head>
<body>
    <ol>
        <li>item1</li>
        <li>item2</li>
        <li>item3</li>
    </ol>

    <div id="div1">
        <span>这是一个span</span>
        <span>这是一个span</span>
        <span>这是一个span</span>
    </div>

    <div id="div2">这是一个div</div>

    <script>
        // 删除被选元素(包括子元素)
        $("ol").remove()
        // 删除被选元素的子元素(不包括本身)
        $("#div1").empty()
    </script>
</body>
</html>

运行结果:

这里的删除也是将HTML元素都进行了删除,并不单单只是删除了文本内容。

好啦!本期 速通前端篇------JavaScript 的学习之旅就到此结束啦!我们下一期再一起学习吧!

相关推荐
腾讯TNTWeb前端团队6 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰9 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪9 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪10 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy10 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom11 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom11 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom11 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom11 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom11 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试