JavaScript


介绍

JavaScript是一门跨平台、面向对象的脚本语言,来控制网页行为,它能使网页可交互
JavaScript和Java是完全不同的语言,不论是概念还是设计。但是基础语法类似
javaScript插入HTML页面后,可由所有的现代浏览器执行。
JavaScript语言不需要编译,直接由各大浏览器解析运行
学习这门语言不需要单独安装软件,只需要浏览器即可
浏览器执行JS介绍
浏览器分成俩部分:

  • 渲染引擎:用来解析HTML和CSS,俗称内核
  • JS引擎:也称JS解释器。用来读取网页中的JS代码,对其处理后运行

浏览器本身并不会执行JS代码,而是通过内置JavaScript引擎(解释器)来执行JS代码。JS引擎执行代码时逐行解释每一行源码(转换为机器语言),然后由计算机去执行。所有JavaScript语言归为脚本语言,会逐行解释执行。

引入方式

内部脚本

将JS代码定义在HTML页面中
在HTML中,JavaScript代码必须位于<script></script>之间
注意

  • 在HTML文档中可以在任意位置,放置任意数量的

外部脚本

将JS代码定义在外部的JS文件中,然后引入到HTML页面中
Snipaste_2024-04-25_14-41-39.png
注意

  • 外部的js文件中不能包含

基础语法

书写语法

  1. 区分大小写:与Java一样,变量名、函数以及其他一切东西都区分大小写
  2. 每行结尾的分号可有可无
  3. 注释:
    1. 单行注释://注释内容
    2. 多行注释:/注释内容/
  4. 大括号表示代码块

输出语句

  • 使用window.alert() 写入警告框
  • 使用document.write() 写入HTML输出
  • 使用console.log() 写入浏览器控制台

变量

JavaScript中var关键字来声明变量
JavaScript是一门弱类型语言,变量可以存放不同类型的值
变量名和Java类似
ECMAScript6新增了用let关键字来定义变量。它的用法类似于var,但是所声明的变量,只在let关键字所在的代码块内有效,且不允许重复声明
ECMAScript6新增了const关键字,用来声明一个只读的常量。一旦声明,常量的值就不能改变

数据类型

JavaScript中分为:原始类型和引用类型

原始类型

  • number:数字(整数,小数,NAN(Not a Number))
  • string:字符、字符串,单双引号皆可
  • boolean:布尔 true,false
  • null:对象为空
  • undefined:当声明的变量未初始化时,该变量的默认值是undefined

undefined==null
es6开始定义字符类型可以使用返单引号,可以简化字符类型数据的拼接

console.log(`哈哈` + 10 + "ss" + true );
//哈哈10sstrue

引用类型

  • 就是对象 Object,Date等

使用typeof运算符可以获取数据类型
typeof 变量名

运算符

Snipaste_2024-04-25_15-28-17.png
=的区别

  • ==属于非严格比较,如果运算符俩侧的数据类型不一致,那么先转换成一致,然后再比较数值
  • ===属于严格比较,如果运算符俩侧的数据类型不一样,直接返回false;如果俩侧数据类型一致再比较数值

!=和!==的区别

  • !=是==的取反
  • =的取反

类型转换

  • 字符串转化为数字,方法parseInt(),从左向右解析,遇到非数值就停止解析,字面值不是数字,转为NaN
  • boolean转换数字,用方法Number()
  • 其他类型转化为boolean类型 使用Boolean(balue)函数
    • 0,NAN,空字符串,null,undefined转为false
    • 其他都转为true

流程控制语句

if,switch,for,while,do…while

函数

函数(方法)是被设计为执行特定任务的代码块

普通函数

语法
function 函数名(参数1,参数2…){
函数体
}

  • 形式参数不需要类型,JavaScript是弱类型语言
  • 返回值也不需要定义类型,可以在函数内部直接使用return返回即可

JavaScript中的函数必须被调用才能执行
JavaScript中不存在方法的重载,只要函数名相同,那么就认为是一个函数,后面的函数会覆盖掉前面的函数
注意事项

  1. 调用有参数的函数可以不传递实参
  2. 调用无参数的函数可以传递实参,传递的实参会放到js中的一个内置数组对象arguments中,我们可以遍历数组取出数据

匿名函数

没有名字的函数
格式一:将匿名函数赋值给一个变量

<!-- 文档类型声明标签,告知浏览器这个页面采取html版本来显示页面 -->
<!DOCTYPE html>
<!-- 告诉浏览器这是一个英文网站,本页面采取英文显示,单也可以书写中文 -->
<html lang="en">

<head>
    <!-- 必须书写,告知浏览器以UTF-8编码表编解码中文,如果不书写就会乱码 -->
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 标题标签 -->
    <title>title</title>
</head>
<body>
  <script type="text/javascript">
      /*
        js中的函数:匿名函数,就是没有名字的函数
        定义格式
        let 函数名 = function(参数列表){
          函数体
        }
       */

       let sum = function(a,b){
        return a+b;
       };

       console.log(sum(3,4));
    
  </script>
</body>
</html>

格式二:匿名函数作为另一个函数的参数传递

<!-- 文档类型声明标签,告知浏览器这个页面采取html版本来显示页面 -->
<!DOCTYPE html>
<!-- 告诉浏览器这是一个英文网站,本页面采取英文显示,单也可以书写中文 -->
<html lang="en">

<head>
    <!-- 必须书写,告知浏览器以UTF-8编码表编解码中文,如果不书写就会乱码 -->
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 标题标签 -->
    <title>title</title>
</head>
<body>
<script type="text/javascript">
    /*
      js中的函数:匿名函数,就是没有名字的函数
      匿名函数作为另一个函数的参数传递
     */
    
    function add(x){
        console.log("普通函数");

       x();
    }

    add(function(){
        console.log("匿名函数");
    });


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

这个就相当于let x = function(){};

对象

Array

格式1
let arr = new Array(元素列表);

  1. 当元素列表中就一个整数时,表示数组的长度为整数
  2. 当元素列表为一个小数时,会报错,数组长度不可能为小数
  3. 当元素列表为一个非number类型的值,表示数组的元素
  4. js的数组长度是可变的

格式2
let arr = [元素列表];
当元素列表为一个数时,都为该数组的元素
函数
push() 将新元素添加到数组的末尾,并返回新的数组长度
splice(index,n) 从数组中删除元素。index表示从哪个索引删除,n表示删除数据个数
增强for
for{let x of arr}{
console.log(x);
}

RegExp正则对象

定义了字符串组成的规则
格式1
let reg = /^正则表达式符号 / ; < b r / > ∗ ∗ 格式 2 ∗ ∗ : < b r / > l e t r e g = n e w R e g E x p ( " 正 则表达式符号 /;<br />**格式2**:<br />let reg = new RegExp("^正则表达式符号 /;<br/>格式2<br/>letreg=newRegExp("则表达式符号");
语法
Snipaste_2024-04-25_20-42-40.png
方法
test(str):判断指定字符串是否符合规则,返回true和false

String

格式1
let 变量名 = new String(s);
格式2
let 变量名 = s
属性
length 字符串的长度
方法
charAt() 返回在指定位置的字符
indexOf() 查找指定字符串在原字符串中最开始出现的索引
lastIndexof() 查找指定字符串在原字符串从右往左第一次出现的索引

自定义对象

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

要想使用属性值,使用对象名称调用
方法中要相使用属性值,可以使用this或对象名称

BOM对象

Browser Object Model 浏览器对象模型
js将浏览器的各个组成部分封装为对象
组成

  • Window:浏览器窗口对象
  • Navigator:浏览器对象
  • Screen:屏幕对象
  • History:历史记录对象
  • Location:地址栏对象

Window

直接使用window调用window对象中的属性和函数,其中window可以省略
属性:获取其他BOM对象
Snipaste_2024-04-26_15-31-39.png
方法
alter() 带有一个确认按钮的弹出框
confirm() 带有确定、取消的确认框,确认返回true
setInterval(匿名函数,毫秒) 定时器
clearInterval(定时器变量名) 取消定时器
setTimeout(匿名函数,毫秒) 定时器(只执行一次)

History

使用window.history获取,其中window.可以省略
方法
back() 回退到前一个url
forward() 加载下一个url

Location

使用window.location获取,其中window.可以省略
属性
href 设置或返回完整的URL

DOM对象

Document Object Model 文档对象模型
将标记语言的各个组成部分封装为镀对象

  • Document:整个文档对象
  • Element:元素对象
  • Attrubute:属性对象
  • Text:文本对象

Snipaste_2024-04-26_16-42-03.png

获取Element

Element:元素对象
使用document对象的方法来获取

  1. getElementById:根据id属性值获取,返回一个Element对象
  2. getElementsByTagName:根据标签名称获取,返回一个Element对象数组
  3. getElementsByName:根据name属性值来获取,返回Element对象数组
  4. getElementByClassName:根据class属性值获取,返回Element对象数组

常见HTML Element对象的使用

查阅文档:https://www.w3school.com.cn/jsref/index.asp
先去所对应的标签对象中找,没有的话去HTML Element中找

事件监听

事情:HTML事件是发生在HTML元素上的"事情"。
事件监听:JavaScript可以在事件被侦测到时执行代码

事件绑定

方式一:通过HTML标签中的事情属性进行绑定
方式二:通过DOM元素属性绑定

常见事件

Snipaste_2024-04-26_18-12-24.png
对于onsubmit事件来说,如果可以提交表单,那么绑定的匿名函数返回true,反之返回false
对于获取form标签的js代码梵放到form标签上面,会发生获取不到from标签的,我们可以先让浏览器加载下面的html标签,然后回来执行下面的js代码,可以将操作html标签的js代码放到onload事件绑定的函数中。

综合案例

需求

Snipaste_2024-04-26_19-24-03.png

代码

<!-- 文档类型声明标签,告知浏览器这个页面采取html版本来显示页面 -->
<!DOCTYPE html>
<!-- 告诉浏览器这是一个英文网站,本页面采取英文显示,单也可以书写中文 -->
<html lang="en">

<head>
    <!-- 必须书写,告知浏览器以UTF-8编码表编解码中文,如果不书写就会乱码 -->
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 标题标签 -->
    <title>欢迎注册</title>
    <link href="css/register.css" rel="stylesheet">
</head>
<body>

<div class="form-div">
    <div class="reg-content">
        <h1>欢迎注册</h1>
        <span>已有帐号?</span> <a href="#">登录</a>
    </div>
    <form id="reg-form" action="#" method="get">

        <table>

            <tr>
                <td>用户名</td>
                <td class="inputs">
<!--                    <input name="username" type="text" id="username" οnblur="checkUsername()">-->
                    <input name="username" type="text" id="username" onblur="checkUsername()">
                    <br>
                    <span id="username_err" class="err_msg" style="display: none">用户名不太受欢迎</span>
                </td>

            </tr>

            <tr>
                <td>密码</td>
                <td class="inputs">
                    <input name="password" type="password" id="password" onblur="checkPassword()">
                    <br>
                    <span id="password_err" class="err_msg" style="display: none">密码格式有误</span>
                </td>
            </tr>


            <tr>
                <td>手机号</td>
                <td class="inputs"><input name="tel" type="text" id="tel" onblur="checkTel()">
                    <br>
                    <span id="tel_err" class="err_msg" style="display: none">手机号格式有误</span>
                </td>
            </tr>

        </table>

        <div class="buttons">
            <input value="注 册" type="submit" id="reg_btn">
        </div>
        <br class="clear">
    </form>

</div>
<script>

    //1. 验证 用户名是否符合规则:长度 6~12,单词字符组成
   function checkUsername(){
    let username = document.getElementById("username").value;

    let reg = new RegExp("^\\w{6,12}$");

    if(reg.test(username)){
        document.getElementById("username_err").style.display = "none";
        return true;
    }else{
        document.getElementById("username_err").style.display = "block";
        return false;
    }
   }

    //2. 验证 密码是否符合规则:长度 6~12任意字符
    function checkPassword(){
        let password = document.getElementById("password").value;

        let reg = new RegExp("\.{6,12}");

        if(reg.test(password)){

            document.getElementById("password_err").style.display="none";
            return true;
        }else{
            document.getElementById("password_err").style.display="block";
            return false;

        }

    };


    //3. 验证 手机号是否符合规则:长度 11,数字组成,第一位是1
    function checkTel(){
        let tel = document.getElementById("tel").value;

        let reg = new RegExp("1\\d{10}");

        if(reg.test(tel)){
            document.getElementById("tel_err").style.display="none";
            return true;
        }else{
            document.getElementById("tel_err").style.display="block";
            return false;

}

    }

    //4. 表单是否可以提交
   
    document.getElementById("reg-form").onsubmit = function(){

        return checkUsername() && checkPassword()  && checkTel();
    }

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

浏览器debug

  1. 使用浏览器打开页面然后按F12(fn+F12)
  2. 设置断点

Snipaste_2024-04-26_19-27-02.png

  1. 常见按钮

Snipaste_2024-04-26_19-27-11.png

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Zeal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值