JavaScript

125 阅读2分钟

JavaScript

JavaScript是一门跨平台、面向对象的脚本语言

JavaScript 是一门弱类型语言,变量可以存放不同类型的值

Java是编译语言,是需要编译成字节码文件才能运行的;
JavaScript是脚本语言,不需要编译,由浏览器直接解析并执行。

一. JavaScript作用

JavaScript 是用来控制网页行为的,它能使网页可交互;那么它可以做什么呢?如改变页面内容、修改指定元素的属性值、对表单进行校验等

二. JavaScript引入方式

1.内部脚本:将 JS代码定义在HTML页面中
    
    在 HTML 中,JavaScript 代码必须位于 <script></script> 标签之间
    
2.外部脚本:将 JS代码定义在外部 JS文件中,然后引入到 HTML页面中

    定义外部 js 文件。如定义名为 demo.js的文件
    在页面中引入外部的js文件(在body标签中的最后引入)
        <script src="../js/demo.js"></script>


最好将<script>标签定义在<body></body>标签中的最后,可改善显示速度。
因为浏览器在加载页面的时候会从上往下进行加载并解析。 
我们应该让用户看到页面内容,然后再展示动态的效果。

注意:

外部脚本不能包含 <script> 标签,在js文件中直接写 js 代码即可,不要在 js文件 中写 script 标签。
<script> 标签不能自闭合在页面中引入外部js文件时,不能写成 <script src="../js/demo.js" />

三. JavaScript基础语法

1. 注释

1.行注释:// 注释内容
2.多行注释:/* 注释内容 */

JavaScripts输出语句

1.window.alert() 写入警告框
2.document.write() 写入 HTML 输出
3.console.log() 写入浏览器控制台

2. 变量

1.声明变量格式: 

    - var 变量名 = 数据值;
    
        作用域:全局变量
        变量可以重复定义
             var test = 20;
             test = "张三";
        
    - let 变量名 = 数据值;
    
        只在 let 关键字所在的代码块内有效,且不允许重复声明。
           {
                let age = 20;
           }

2.变量名命名规则

    - 组成字符可以是任何字母、数字、下划线(_)或美元符号($)
    - 数字不能开头
    - 建议使用驼峰命名
    

3. 数据类型

    JavaScript 中提供了两类数据类型:原始类型 和 引用类型。
    使用 typeof 运算符可以获取数据类型
        alert(typeof age);
    
    原始数据类型:
        number:数字(整数、小数、NaN(Not a Number))
        string:字符、字符串,单双引皆可
        boolean:布尔。truefalse
        null:对象为空
        undefined:当声明的变量未初始化时,该变量的默认值是 undefined

4. 运算符

    一元运算符:++,--
    算术运算符:+,-,*,/,%
    赋值运算符:=,+=,-=…
    关系运算符:>,<,>=,<=,!=,==,===…
    逻辑运算符:&&,||,!
    三元运算符:条件表达式 ? true_value : false_value

    a.==和===区别

        ==:判断类型是否一样,如果不一样,则进行类型转换,再去比较其值
        ===:js 中的全等于,判断类型是否一样,如果不一样,直接返回false,一样在再去比较其值

    b.类型转换
        其他类型转为number
            1.string 转换为 number 类型:按照字符串的字面值,转为数字。如果字面值不是数字,则转为NaNstring 转换为 number 有两种方式:
                使用 + 正号运算符:
                    var str = +"20";
                使用 parseInt() 函数(方法):
                    var str = "20";
                    alert(parseInt(str) + 1);
            2.其他类型转为boolean
                number 类型转换为 boolean 类型:0NaN转为false,其他的数字转为true
                string 类型转换为 boolean 类型:空字符串转为false,其他的字符串转为true
                null类型转换为 boolean 类型是 false
                undefined 转换为 boolean 类型是 false
            3.使用场景:
                在 Java 中使用字符串前,一般都会先判断字符串不是null,并且不是空字符才会做其他的一些操作

5. 流程控制语句

1. if语句
    
        var count = 3;
        if (count == 3) {
            alert(count);
        }
        
2.switch语句
    
        var num = 3;
        switch (num) {
            case 1:
                alert("星期一");
                break;
            case 2:
                alert("星期二");
                break;
            default:
                alert("输入的星期有误");
                break;
    
3.for语句
        var sum = 0;
        for (let i = 1; i <= 100; i++) { //建议for循环小括号中定义的变量使用let
            sum += i;
        }
        
4.while语句

        var sum = 0;
        var i = 1;
        while (i <= 100) {
            sum += i;
            i++;
        }

5.dowhile语句

    var sum = 0;
    var i = 1;
    do {
        sum += i;
        i++;
    } 
    while (i <= 100);
    

6. 函数

1.函数定义格式

    function 函数名(参数1,参数2..){
        要执行的代码
    }
    
    (形式参数不需要类型。因为JavaScript是弱类型语言)
    (返回值也不需要定义类型,可以在函数内部直接使用return返回即可)

2.函数调用

    函数名称(实际参数列表);
    例子:let result = add(10,20);
    
    JS中,函数调用可以传递任意个数参数
    例如 let result = add(1,2,3);
    它是将数据 1 传递给了变量a,将数据 2 传递给了变量 b,而数据 3 没有变量接收。

四. JavaScript常用对象

JavaScript常用对象分三类:

    1.基本对象
        Array
        Boolean
        Date
        Math
        Number
        String
        RegExp
        Global
        
    2.BOM对象
        Window
        Navigator
        Screen
        History
        Location
        
    3.DOM对象
        Document
        Anchor
        Area
        ...

1. 基本对象

暂时先学习 Array 数组对象和 String 字符串对象。

其他对象的学习参考手册:www.w3school.com.cn/jsref/index…

Array对象

1.Array对象
   JavaScript Array对象用于定义数组
    
    - 定义格式:
        1.数组定义格式1:var 变量名 = new Array(元素列表);
        2.数组定义格式2:var 变量名 = [元素列表];
        注意:Java中的数组静态初始化使用的是{}定义,而 JavaScript 中使用的是 [] 定义
    
    = 元素访问:
        arr[索引] = 值;
    
    - 特点:
        1.JavaScript 中的数组相当于 Java 中集合。
        2.JavaScript的数组长度是可以变化的。
        3.JavaScript 是弱类型,所以可以存储任意的类型的数据。

假如数组长度为3,我们在索引6的位置也可以插入任意数据类型的数据,那索引4,5位置的数据没有赋值,默认是 undefined。

2.Array 对象属性

    length :设置或返回数组中元素的数量。
    举例:
        var arr = [1,2,3];
        for (let i = 0; i < arr.length; i++) {
            alert(arr[i]);
        }
        
3.Array 方法

    - push 函数 : 给数组添加元素,也就是在数组的末尾添加元素
    - splice 函数 : 删除元素
        参数1:索引。表示从哪个索引位置删除
        参数2:个数。表示删除几个元素

String对象

1.String对象
    
    String对象的创建方式有两种:
        1.var 变量名 = new String(s);
        2.var 变量名 = "数组";
        
2.String对象属性

    length属性:用于动态的获取字符串的长度

3.String对象的函数
    
    1.charAt():返回在指定位置的字符
    2.indexOf():检索字符串
    3.trim():去掉字符串两端的空格
           一般用在用户登录的时候,去除用户多输入的账号密码左右的空格。

自定义对象

1.自定义对象格式:

    var 对象名称 = {
        属性名称1:属性值1,
        属性名称2:属性值2,
        ...,
        函数名称:function (形参列表){},
        ...
    };

2.调用属性的格式:

        对象名.属性名

3.调用函数的格式:

        对象名.函数名()

五. BOM对象

BOM:Browser Object Model 浏览器对象模型。
也就是 JavaScript 将浏览器的各个组成部分封装为对象。
我们要操作浏览器的各个组成部分就可以通过操作 BOM 中的对象来实现。

BOM 中包含了如下对象:

1. Window:浏览器窗口对象
2. Navigator:浏览器对象
3. Screen:屏幕对象
4. History:历史记录对象
5. Location:地址栏对象

BOM 中的各个对象和浏览器的各个组成部分的对应关系

image.png

1. Window对象

Window对象对应上图的蓝色线框的范围

1. 获取window对象
    该对象不需要创建直接使用 window ,其中 window. 可以省略。
    比如我们之前使用的 alert() 函数,其实就是 window 对象的函数

    显式调用:window.alert("abc");
    隐式调用:alert("abc")

2.window对象属性
    
    history
    location
    Navigator
    Screen

    window 对象提供了用于获取其他 BOM 组成对象的属性
    如果我们想使用其他BOM对象,可以通过window.对象名获取
    比如:window.location,window也可以省略不写,直接写location也可以获取对象.

3.window对象函数

    alert("xxx"):显示带有一段消息和一个确认按钮的警告框。
    confirm("xxx"):显示带有一段消息以及确认按钮和取消按钮的对话框。
    setInterval(函数(),时间间隔):按照指定的周期(以毫秒计)来调用函数或计算表达式。
    setTimeout(函数(),时间间隔):在指定的毫秒数后调用函数或计算表达式。
    
    setInterval()和setTimeout()区别:
        setInterval()是在一定时间间隔内循环执行function(循环执行)
        和setTimeout()是在一定的时间间隔后执行一个function(只执行一次)

2. History对象

History 对象是 JavaScript 对历史记录进行封装的对象。

1.History 对象的获取
    
    window.history
    也可以省略window.

2.History 对象的函数

    back():加载history列表中的前一个URL
    forward():加载history列表中下一个URL
    
    这两个函数对应浏览器中的前进和后退的按钮。

3. Location对象

Location 对象是 JavaScript 对地址栏封装的对象。可以通过操作该对象,跳转到任意页面。
1.获取Location对象
    
    方式一:window.location.方法();
    方式二:location.方法();

2.Location对象属性
    
    href:设置或返回完整的URL
    
    举例:
        alert("要跳转了");
        location.href = "https://www.baidu.com";
        在浏览器首先会弹框显示 要跳转了,当我们点击了确定就会跳转到百度的首页。

案例:3秒跳转到百度首页
    
        document.write("3秒跳转到首页...");
        setTimeout(function (){
            location.href = "https://www.baidu.com"
        },3000);
    

六. DOM对象

1. DOM概述

DOM:Document Object Model 文档对象模型。
也就是 JavaScript 将 HTML 文档的各个组成部分封装为对象.

DOM封装了如下对象:

1. Document:整个文档对象
2. Element:元素对象
3. Attribute:属性对象
4. Text:文本对象
5. Comment:注释对象

image

1.DOM对象的作用
    
    JavaScript 通过 DOM, 就能够对 HTML进行操作了,比如:
        1.改变 HTML 元素的内容
        2.改变 HTML 元素的样式(CSS)
        3.对 HTML DOM 事件作出反应
        4.添加和删除 HTML 元素
        
2.DOM 是 W3C(万维网联盟)定义的访问 HTML 和 XML 文档的标准。

    该标准被分为 3 个不同的部分:
    
    1. 核心 DOM:针对任何结构化文档的标准模型。 XML 和 HTML 通用的标准
            
            Document:整个文档对象
            Element:元素对象
            Attribute:属性对象
            Text:文本对象
            Comment:注释对象
            
    2. XML DOM: 针对 XML 文档的标准模型
    3. HTML DOM: 针对 HTML 文档的标准模型
        该标准是在核心 DOM 基础上,对 HTML 中的每个标签都封装成了不同的对象
            例如: <img> 标签在浏览器加载到内存中时会被封装成 Image 对象,同时该对象也是 Element 对象。
            <input type='button'> 标签在浏览器加载到内存中时会被封装成 Button 对象,同时该对象也是Element 对象。

2. 获取 Element对象

Element对象就是每个标签对象,比如<img>标签,<input type='button'> 标签
获取 Element对象就是获取每个标签对象,并对标签对象进行一系列操作。
Document 对象是通过 window 对象获取
Element 对象可以通过 Document 对象获取

Document 对象中提供了以下获取 Element 元素对象的函数

1. getElementById() :根据id属性值获取,返回单个Element对象
        <img id="light" src="../imgs/off.gif"> <br>
        document.getElementById("light"); //根据 id 属性值获取上面的 img 元素对象,返回单个对象
        
2. getElementsByTagName() :根据标签名称获取,返回Element对象数组
        <div class="cls">JavaScript</div> <br>
        <div class="cls">Java</div> <br>
        document.getElementsByTagName("div");// 返回一个数组,数组中存储的是 div 元素对象

3. getElementsByName() :根据name属性值获取,返回Element对象数组
        <input type="checkbox" name="hobby"> 电影
        <input type="checkbox" name="hobby"> 旅游
        document.getElementsByName("hobby"); //根据name属性值获取,返回Element对象数组
        
4. getElementsByClassName() :根据class属性值获取,返回Element对象数组
        <div class="cls">Javascript</div> <br>
        <div class="cls">Java</div> <br>
        document.getElementsByClassName("cls"); //根据class属性值获取,返回Element对象数组

3. HTML Element对象使用

1.改变图片(先获取图片对象,然后通过src属性修改图片地址)
    var img = document.getElementById("light");
    img.src = "../imgs/on.gif";
    
2.将所有的 div 标签的标签体内容替换为 java(先获取对象数组,通过for循环遍历对象数组,通过对象.innerHTML方法更改元素内容。
   
    style:设置元素css样式
    innerHTML:设置元素内容
    
        var divs = document.getElementsByTagName("div");
        for (let i = 0; i < divs.length; i++) {
            divs[i].style.color = 'red';
            divs[i].innerHTML = "java";
        }
3.使所有的复选框呈现被选中的状态
         
        var hobbys = document.getElementsByName("hobby");
        for (let i = 0; i < hobbys.length; i++) {
            hobbys[i].checked = true;
        }

Element对象学习链接:www.w3school.com.cn/jsref/dom_o…

七. 事件监听

1. 事件:HTML 事件是发生在 HTML 元素上的“事情”,比如:
    
        a.页面上的 按钮被点击
        b.鼠标移动到元素之上
        c.按下键盘按键 等都是事件
2.事件监听:JavaScript 可以在事件被侦测到时执行一段逻辑代码,例如:

        a.当我们点击某按钮,就可以通过 js 代码实现替换图片
        b.光标离开 输入框,就可以校验输入框中输入的字符串数据是否正确,并给出提示。

1. 事件绑定

1.JavaScript 提供了两种事件绑定方式

   方式一:通过 HTML标签中的事件属性进行绑定(在标签上定义事件属性,在事件属性中绑定函数)
   
       //onclick:事件属性,on()代表事件触发后要执行的函数。
       <input type="button" onclick='on()’>
       function on(){
           alert("我被点了");
       }
       
   方式二:通过 DOM 元素属性绑定(绑定事件的操作需要在 js 代码中实现)
   
       <input type="button" id="btn">
       document.getElementById("btn").onclick = function (){
            alert("我被点了");
       }

2. 常见事件

事件属性名说明
onclick鼠标单击事件
onblur元素失去焦点
onfocus元素获得焦点
onload某个页面或图像被完成加载
onsubmit当表单提交时触发该事件
onmouseover鼠标被移到某元素之上
onmouseout鼠标从某元素移开

八.表单验证案例

1. 当输入框失去焦点时,验证输入内容是否符合要求
2. 当点击注册按钮时,判断所有输入框的内容是否都符合要求,如果不合符则阻止表单提交

九.RegExp对象

RegExp 是正则对象。正则对象是判断指定字符串是否符合规则
在 js 中对正则表达式封装的对象就是正则对象。

1. 正则对象使用

1.正则对象有两种创建方式:
    1.直接量方式: var reg = /正则表达式/; ( 注意不要加引号 )
    2.创建RegExp对象: var reg = new RegExp("正则表达式"); 

2.函数

     test(str) :判断指定字符串是否符合规则,返回 truefalse

2.正则表达式

正则表达式定义了字符串组成的规则。
也就是判断指定的字符串是否符合指定的规则,如果符合返回true,如果不符合返回false。

1. 正则表达式常用的规则如下:

    ^:表示开始
    $:表示结束
    [ ]:代表某个范围内的单个字符,比如: [0-9] 单个数字字符
    .:代表任意单个字符,除了换行和行结束符
    \w:代表单词字符:字母、数字、下划线(),相当于 [A-Za-z0-9]
    \d:代表数字字符: 相当于 [0-9]
    
2.量词:
    
    +:至少一个
    *:零个或多个
    ?:零个或一个
    {x}:x个
    {m,}:至少m个
    {m,n}:至少m个,最多n个
    
3.代码演示:

    var reg = /^\w{6,12}$/; //创建正则对象,对正则表达式进行封装\
    var str = "abcccc";
    var flag = reg.test(str); //判断 str 字符串是否符合 reg 封装的正则表达式的规则
    alert(flag);
    

验证用户名是否符合规则

1.HTML代码

<input name="username" type="text" id="username">
<span id="username_err" class="err_msg" style="display: none">用户名不符合规则</span>


2.javascript代码

//1. 获取用户名的输入框
var usernameInput = document.getElementById("username");

//2. 绑定onblur事件 失去焦点
usernameInput.onblur = checkUsername;
function checkUsername() {
    //3. 获取用户输入的用户名
    var username = usernameInput.value.trim();
    //4. 判断用户名是否符合规则:长度 6~12,单词字符组成
    var reg = /^\w{6,12}$/;
    var flag = reg.test(username);

    if (flag) {
        //符合规则
        document.getElementById("username_err").style.display = 'none';
    } else {
        //不合符规则
        document.getElementById("username_err").style.display = '';
    } 
    return flag;
}