JavaWeb学习记录:JavaScript

介绍

什么是JavaScript

JavaScript(简称:JS) 是一门跨平台、面向对象的脚本语言,是用来控制网页行为的,实现人机交互效果。JavaScript 和 Java 是完全不同的语言,不论是概念还是设计。但是基础语法类似。

JS核心语法

JS引入方式

第一种方式:内部脚本:将JS代码定义在HTML页面中

例子:
 

<!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>
    alert('Hello JS')
  </script>
</body>
</html>

 注意:HTML文档中,可以在任意地方,放置任意数量的<script></script>。但是一般在<body>标签底部(</body>标签之前)添加<script></script>,这样可以确保 HTML 元素先加载,避免脚本操作未解析的 DOM,提升页面加载性能。
第二种方式:将JS代码定义在外部 JS文件中,然后引入到 HTML页面

例子:
 

  • 在js目录下,定义一个js文件(如:demo.js),在文件中编写js代码,如下:
     

    alert('Hello JS')
  • 在html文件中,通过<script></script>引入js文件(demo.js),如下:

<script src="js/demo.js"></script>

 注意:在 HTML 中,引入外部 JS 文件的 <script> 标签必须写成 <script src="file.js"></script> 的完整闭合形式,而不能写成 <script src="file.js" /> 这种自闭合格式,因为 HTML 规范中 <script> 属于非自闭合标签

  • JS书写规范:

    • 结束符:每行js代码,结尾以分号结尾,而结尾的分号可有可无。(建议在一个项目中保持一致,要么全部都加,要么全部都不加)

    • 注释:单行注释,多行注解的写法, 与java中一致。

JS基础语法

输出语句

在JS中有3种输出语句,分别是:

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

我们定义如下这么一段JS,来做一个测试:

<!DOCTYPE html>
<html lang="en">
<head>
    <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>JS基础语法</title>
</head>
<body>
        
    <script>
        //方式一: 写入浏览器的body区域
        document.write("Hello JS (document.write)");

        //方式二: 弹出框
        window.alert("Hello JS (window.alert)");

        //方式三: 控制台
        console.log("Hello JS (console.log)")
    </script>
</body>
</html>

变量

接下来,我们再来讲解JS中的变量。在js中,变量的声明和java中还是不同的。

  • JS中主要通过 let 关键字来声明变量的。

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

  • 变量名需要遵循如下规则:

    • 组成字符可以是任何字母、数字、下划线(_)或美元符号($),且数字不能开头

    • 变量名严格区分大小写,如:name和Name是不同的变量

    • 不能使用关键字作为变量名,如:let、if、for等

变量的声明示例如下所示:

<script>
    //变量
    let a = 20;
    a = "Hello";
    alert(a);
</script>

 常量

在JS中,如果声明一个场景,需要使用const关键字。一旦声明,常量的值就不能改变 (不可以重新赋值)。

数据类型

虽然JS是弱数据类型的语言,但是JS中也存在数据类型,JS中的数据类型分为 :原始数据类型 和 引用数据类型。那这部分,我们先来学习原始数据类型,主要包含以下几种类型:

数据类型描述
number数字(整数、小数、NaN(Not a Number))
string字符串,单双引('...')、双引号("...")、反引号(`...`)皆可,正常使用推荐单引号
boolean布尔。true,false
null对象为空。 JavaScript 是大小写敏感的,因此 null、Null、NULL是完全不同的
undefined当声明的变量未初始化时,该变量的默认值是 undefined

 使用typeof 关键字可以返回变量的数据类型,接下来我们需要通过书写代码来演示js中的数据类型。代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <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>JS-数据类型</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>

对于字符串类型的数据,除了可以使用双引号("...")、单引号('...')以外,还可以使用反引号 (``)。 而使用反引号引起来的字符串,也称为 模板字符串

  • 模板字符串的使用场景:拼接字符串和变量。

  • 模板字符串的语法:

    • `...` :反引号 (英文输入模式下键盘 tab 键上方波浪线 ~ 那个键)

    • 内容拼接时,使用 ${ } 来引用变量

具体示例如下:

  <script>
    let name = 'Tom';
    let age = 18;
    console.log('大家好, 我是新入职的' + name + ', 今年' + age + '岁了, 请多多关照'); //原始方式 , 手动拼接字符串
    console.log(`大家好, 我是新入职的${name}, 今年${age}岁了, 请多多关照`); //使用模板字符串方式拼接字符串
  </script>

函数

函数(function)是被设计用来执行特定任务的代码块,方便程序的封装复用。 那我们学习函数,主要就是学习JS中函数的定义及调用的语法。

 方式一

示例:

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

如果要调用上述的函数add,可以:

let result = add(10,20);
alert(result);

注意:由于JS是弱类型语言,形参、返回值都不需要指定类型。在调用函数时,实参个数与形参个数可以不一致,但是建议一致。(如果不一致,且实参数量多于形参,多余的实参不会被形参接收;若实参数量少于形参,未被匹配的形参会被自动赋值为 undefined

 方式二

匿名函数:是指一种没有名称的函数,由于它们没有名称,因此无法直接通过函数名来调用,而是通过变量或表达式来调用。

匿名函数定义可以通过两种方式:函数表达式 和 箭头函数。

  • 示例一(函数表达式):

var add = function (a,b){
    return a + b;
}
  • 示例二(箭头函数):

var add = (a,b) => {
    return a + b;
}

上述匿名函数声明好了之后,是将这个函数赋值给了add变量。 那我们就可以直接通过add函数直接调用,调用代码如下:

let result = add(10,20);
alert(result);

而箭头函数这种形式,在现在的前端开发中用的会更多一些。

自定义对象

在 JavaScript 中自定义对象特别简单,其语法格式如下:

let 对象名 = {
    属性名1: 属性值1,
    属性名2: 属性值2,
    属性名3: 属性值3,
    方法名称: function(形参列表){}
};

我们可以通过如下语法调用属性:

对象名.属性名

通过如下语法调用函数:

对象名.方法名()

代码演示:

<script>
    //自定义对象
    let user = {
        name: "Tom",
        age: 10,
        gender: "男",
        sing: function(){
             console.log("悠悠的唱着最炫的民族风~");
         }
    }

    console.log(user.name);
    user.eat();
<script>

上述函数定义的语法可以简化成如下格式:(函数部分简化)

<script>
    //自定义对象
    let user = {
        name: "Tom",
        age: 10,
        gender: "男",
        sing(){
             console.log("悠悠的唱着最炫的民族风~");
         }
    }
    
    console.log(user.name);
    user.eat();
<script>

 JSON

JSON对象:JavaScript Object Notation,JavaScript对象标记法。JSON是通过JavaScript标记法书写的文本。其格式如下: 

{
    "key":value,
    "key":value,
    "key":value
}

其中,key必须使用引号并且是双引号标记,value可以是任意数据类型。

而由于语法简单,层级结构鲜明,现多用于作为数据载体,在网络中进行数据传输。

代码演示: 

//3. JSON - JS对象标记法
let person = {
  name: 'itcast',
  age: 18,
  gender: '男'
}
alert(JSON.stringify(person)); //js对象 --> json字符串

let personJson = '{"name": "heima", "age": 18}';
alert(JSON.parse(personJson).name);

API说明:

JSON.stringify(...):作用就是将js对象,转换为json格式的字符串。

JSON.parse(...):作用就是将json格式的字符串,转为js对象。

 流程控制

在JS中,当然也存在对应的流程控制语句。常见的流程控制语句如下:

  • if ... else if ... else ...

  • switch

  • for

  • while

  • do ... while

JS DOM 

DOM介绍

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

DOM 其实我们并不陌生,之前在学习 XML 就接触过,只不过 XML 文档中的标签需要我们写代码解析,而 HTML 文档是浏览器解析。封装的对象分为

  • Document:整个文档对象

  • Element:元素对象

  • Attribute:属性对象

  • Text:文本对象

  • Comment:注释对象

那么我们学习DOM技术有什么用呢?主要作用如下:

  • 改变 HTML 元素的内容

  • 改变 HTML 元素的样式(CSS)

  • 对 HTML DOM 事件作出反应

  • 添加和删除 HTML 元素

DOM操作
  • DOM的核心思想:将网页的内容当做对象来处理,标签的所有属性在该对象上都可以找到,并且修改这个对象的属性,就会自动映射到标签身上。

  • document对象

    • 网页中所有内容都封装在document对象中

    • 它提供的属性和方法都是用来访问和操作网页内容的,如:document.write(…)

  • DOM操作步骤:

    • 获取DOM元素对象

    • 操作DOM对象的属性或方法 (查阅文档)

  • 我们可以通过如下两种方式来获取DOM元素。

    • 根据CSS选择器来获取DOM元素,获取到匹配到的第一个元素:

      document.querySelector('CSS选择器');

    • 根据CSS选择器来获取DOM元素,获取匹配到的所有元素:

      document.querySelectorAll('CSS选择器');

注意:获取到的所有元素,会封装到一个NodeList节点集合中,是一个伪数组(有长度、有索引的数组,但没有push、pop等数组方法)

 代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JS-DOM</title>
</head>
<body>

  <h1 id="title1">11111</h1>
  <h1>22222</h1>
  <h1>33333</h1>

  <script>
    //1. 修改第一个h1标签中的文本内容
    //1.1 获取DOM对象
    // let h1 = document.querySelector('#title1');
    //let h1 = document.querySelector('h1'); // 获取第一个h1标签

    let hs = document.querySelectorAll('h1');

    //1.2 调用DOM对象中属性或方法
    hs[0].innerHTML = '修改后的文本内容';
  </script>
</body>
</html>

JS 事件监听

事件介绍

什么是事件呢?HTML事件是发生在HTML元素上的 “事情”,例如:

  • 按钮被点击

  • 鼠标移到元素上

  • 输入框失去焦点

  • 按下键盘按键

  • ........

而我们可以给这些事件绑定函数,当事件触发时,可以自动的完成对应的功能,这就是事件监听。

JS事件是JS非常重要的一部分,接下来我们进行事件的学习。那么我们对于JavaScript事件需要学习哪些内容呢?我们得知道有哪些常用事件,然后我们得学会如何给事件绑定函数。

所以主要围绕2点来学习:①. 事件监听、②. 常用事件

事件监听语法

JS事件监听的语法:

事件源.addEventListener('事件类型', 要执行的函数);

在上述的语法中包含三个要素:

  • 事件源: 哪个dom元素触发了事件, 要获取dom元素

  • 事件类型: 用什么方式触发, 比如: 鼠标单击 click, 鼠标经过 mouseover

  • 要执行的函数: 要做什么事

演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <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>JS-事件-事件绑定</title>
</head>

<body>
    <input type="button" id="btn1" value="点我一下试试1">
    <input type="button" id="btn2" value="点我一下试试2">
        
    <script>
        document.querySelector("#btn1").addEventListener('click', ()=>{
            alert("按钮1被点击了...");
        })
    </script>
</body>
</html>

JavaScript对于事件的绑定还提供了另外2种方式(早期版本):

1). 通过html标签中的事件属性进行绑定

例如一个按钮,我们对于按钮可以绑定单机事件,可以借助标签的onclick属性,属性值指向一个函数。

<input type="button" id="btn1" value="点我一下试试1" onclick="on()">

<script>
    function on(){
        alert('试试就试试')
    }
</script>

2). 通过DOM中Element元素的事件属性进行绑定

依据我们学习过得DOM的知识点,我们知道html中的标签被加载成element对象,所以我们也可以通过element对象的属性来操作标签的属性。

例如一个按钮,我们对于按钮可以绑定单机事件,可以通过DOM元素的属性,为其做事件绑定。

<body>
    <input type="button" id="btn1" value="点我一下试试1">
    <script>
      document.querySelector('#btn1').onclick = function(){
          alert("按钮2被点击了...");
      }
    </script>
</body>

整体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <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>JS-事件-事件绑定</title>
</head>

<body>
    <input type="button" id="btn1" value="事件绑定1">
    <input type="button" id="btn2" value="事件绑定2">
    <script>
        document.querySelector("#btn1").addEventListener('click', ()=>{
            alert("按钮1被点击了...");
        })
        
        document.querySelector('#btn2').onclick = function(){
            alert("按钮2被点击了...");
        }
    </script>
</body>
</html>

addEventListener 与 on事件 区别:

  • on方式会被覆盖,addEventListener 方式可以绑定多次,拥有更多特性,推荐使用 addEventListener .

常见事件

上面案例中使用到了事件 clickmouseentermouseleave,那都有哪些事件类型供我们使用呢?下面就给大家列举一些比较常用的事件属性: 

 示例:

<!DOCTYPE html>
<html lang="en">

<head>
    <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>JS-事件-常见事件</title>
</head>

<body>
    <form action="" style="text-align: center;">
        <input type="text" name="username" id="username">
        <input type="text" name="age" id="age">
        <input id="b1" type="submit" value="提交">
        <input id="b2" type="button" value="单击事件">
    </form>

    <br><br><br>

    <table width="800px" border="1" cellspacing="0" align="center">
        <tr>
            <th>学号</th>
            <th>姓名</th>
            <th>分数</th>
            <th>评语</th>
        </tr>
        <tr align="center">
            <td>001</td>
            <td>张三</td>
            <td>90</td>
            <td>很优秀</td>
        </tr>
        <tr align="center" id="last">
            <td>002</td>
            <td>李四</td>
            <td>92</td>
            <td>优秀</td>
        </tr>
    </table>
    
    <script>
        //click: 鼠标点击事件
        document.querySelector('#b2').addEventListener('click', () => {
            console.log("我被点击了...");
        })
        
        //mouseenter: 鼠标移入
        document.querySelector('#last').addEventListener('mouseenter', () => {
            console.log("鼠标移入了...");
        })

        //mouseleave: 鼠标移出
        document.querySelector('#last').addEventListener('mouseleave', () => {
            console.log("鼠标移出了...");
        })

        //keydown: 某个键盘的键被按下
        document.querySelector('#username').addEventListener('keydown', () => {
            console.log("键盘被按下了...");
        })

        //keydown: 某个键盘的键被抬起
        document.querySelector('#username').addEventListener('keyup', () => {
            console.log("键盘被抬起了...");
        })

        //blur: 失去焦点事件
        document.querySelector('#age').addEventListener('blur', () => {
            console.log("失去焦点...");
        })

        //focus: 元素获得焦点
        document.querySelector('#age').addEventListener('focus', () => {
            console.log("获得焦点...");
        })

        //input: 用户输入时触发
        document.querySelector('#age').addEventListener('input', () => {
            console.log("用户输入时触发...");
        })

        //submit: 提交表单事件
        document.querySelector('form').addEventListener('submit', () => {
            alert("表单被提交了...");
        })
    </script>
</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值