JavaScript(笔记)

目录

Hello World

JavaScript 的变量

JavaScript 动态类型

隐式类型转换

JavaScript 数组

JavaScript 函数

JavaScript 中变量的作用域

对象

DOM

选中页面元素

事件

获取 / 修改元素内容

获取 / 修改元素属性

获取 / 修改 表单元素属性

获取 / 修改样式属性

新增元素

删除元素

代码案例:

1、网页版本的猜数字

表白墙程序


JS 是运行在浏览器上的,比如 chrome里面专门有一个模块,就是 JS 引擎,就相当于 JVM 一样,能够解释执行 js 代码

JS 的组成:

DOM API 是浏览器给 js 提供的操作页面的 api 

BOM API 是浏览器给 js 提供的操作浏览器窗口的 api


Hello World

通过 script 标签嵌入到 html 中,三种引入方式:

1、内部 js 

 2、外部 js 

写成一个单独的 .js 文件,让 html 引入过来

3、行内 js 

 alert 能够弹窗,从而让用户看到程序的输出,但是弹窗操作不太好

有些对话框,一弹出来,就会阻止用户操作界面的其它部分,叫做 模态对话框

console .log 就可以在控制台中打印日志

 js 里的 console.log 就类似于 java 中的 println ,也是非常有用的调试手段


JavaScript 的变量

var 变量名 = 初始值

js 定义变量不必写类型,不写类型不意味着没有类型

而是变量的类型,是通过初始化操作的值来确定的

js 里定义变量 使用的关键字还可以是写作 let


JavaScript 动态类型

一个变量在程序运行过程中,类型可以发生改变,这样的特性,就称为动态特性

如果一个变量在程序运行的过程中,类型不能发生改变,就叫做静态类型

动态类型,最大的好处在于代码非常灵活

比如,写一个函数来计算两个数字的和,如果使用 Java ,可能得写两个 int 相加,两个 double 相加,两个 long 相加.....等多个版本

动态类型的语言,只需要写一个函数即可

动态类型的缺点也很明显:一个变量当下到底是什么类型,里面存储了什么样的值,里面提供了哪些方法哪些属性,都是不确定的

JavaScript 内置的几种类型:

在别的语言中,如果访问到某个东西没有定义,是直接报错的

但是 JS 不会进行报错,而是直接返回 undefined 


隐式类型转换

这段代码中,就触发了隐式类型转换

在 JS 中,针对不同的类型进行比较 / 运算的时候,会尝试尽可能地转换成相同的类型

又比如说:

最终的结果也是 true

像  Java 这种不太支持隐式类型转换的语言,称为 “强类型” 语言

像 JS 这种比较能支持隐式类型转换的语言,称为 “弱类型” 语言

 JavaScript 中,引入了一个 ===

当使用===进行比较的时候,不会进行隐式类型转换


JavaScript 数组

这两种,都是 JS 中创建数组的方式

但是一般都是使用第二个

在 JS 中,数组的元素类型不要求统一,可以是任意类型!!!

这个事情,不仅仅是 JS 如此,动态类型的语言都是如此

如何去操作数组元素?

使用数组下标进行操作

JS 的数组,不仅仅是一个传统意义上的数组(只能按下标来取元素),而是带有 “键值对” 性质的一个东西

不如理解成 Map + 数组 的混血,此时,数组也能够按照 Map 键值对的方式来组织数据

JS 更高的版本中,引入了专门的 map 来表示键值对

数组的遍历:

1、使用 for 循环

2、使用 for-each

 3、第二种 for-each

给数组添加元素(尾插)

使用 push 方法即可

给数组删除元素:

使用 splice 方法


JavaScript 函数

函数语法规则:

 括号中并不需要写类型(什么类型都可以,只要你传入的变量在函数内部可以正常工作即可)

当我们拿 undefined 和 10 进行相加的时候,会出现 NaN 的结果

全称是 Not a Number 意思是:不是一个数字

但是我们的代码是不会进行报错的,这个结果不符合用户的期望,但是也不会报错

如果实参个数少于形参个数,那么多出来的形参的值就是 undefined

如果形参的个数过多,那么多出来的形参等于没用上

总之,当形参和实参个数不匹配的时候,是不会报错的,只会尽可能地去执行

每个函数里面都会自定义一个 arguments 变量,是个数组,包含了所有实参

利用 arguements ,我们就可以实现任意个数字的相加

对于 JS 这样的动态类型语言来说,不需要 “重载” 这样的语法

函数表达式:

先定义了一个没有名字的匿名函数,再把匿名函数赋值给了一个 add 变量

add 变量的类型,就叫做 function 类型

对于 function 类型的变量 ,是可以进行调用的

JS 中,可以像普通变量意义,把函数赋值给一个变量,同时也可以把函数作为另一个函数的参数,或者把函数作为另一个函数的返回值(这一点,Java 中做不到)

这个特性,称为:函数在 JS 中给是“一等公民”


JavaScript 中变量的作用域

当代码中想要访问某个变量的时候,要去哪里找到这个变量呢?

JS 会先找当前作用域,如果当前没有,就往上层作用域找,一直往上直到全局作用域,如果还找不到,就会 报错 / undefined

 这个语法设定,和 java 中的变量捕获是类似的


对象

JS 不是面向对象的编程语言,但是存在对象的概念

意味着 JS 中关于对象的设定和 JAVA 差别很大

js 中没有封装,继承,多态,甚至没有 类

js 的对象,有属性,也有方法(方法本质上也是属性,因为 函数 在 js 中是一等公民)

此处,就构成了 js  的对象

我们也可以用 Object 的方式创建对象

js 对象中有什么属性,有什么方法,都不是提前约定好的,可以随时添加


DOM

DOM: 文档对象模型,把html 的每个标签,都是可以映射到 js 中的一个对应对象的

标签上显示什么,都可以通过 js 对象感知到

js 对象修改对应属性,能够影响到标签的展示

通过 dom 就可以让 js 代码来操作页面元素

DOM 的 api 有很多,我们这里只介绍几个常用的 api

选中页面元素

querySelector(CSS 选择器)

document 是浏览器中的全局对象,任何一个页面,都会有一个 document 对象

所有的 dom api 都是通过 document 对象来展开的  

如果有多个 ,box,此时默认的是第一个

如果想全部选出来,还有一个方法:querySelectorAll()(返回数组) 


事件

事件就是针对用户的操作进行的一些响应

要能够和用户交互,就需要知道用户干了什么,用户做的一些动作,就会在浏览器中产生一些事件

代码就需要针对事件做出反应

事件的三个要素:

1、事件源:哪个元素产生的事件

2、事件类型:点击,双击,移动,按下

3、事件处理程序:事件发生之后,要执行哪个代码(要执行的代码都是提前设定好的)

前端页面中,针对事件也是要有不同的处理方式,都是最开始的时候就设定好了的

最简单的方式:直接在元素中使用 on XXX 的方式,来绑定一个事件处理

事件源: .box  事件类型: onlick 事件处理程序: alert


获取 / 修改元素内容

先获取到该元素,使用 innerHTML 属性,就能拿到元素里的内容

修改该属性,就会影响到界面的显示


获取 / 修改元素属性

html 标签的属性,也会映射到 js 对象中


获取 / 修改 表单元素属性

表单元素(input , textarea , select.....)有一些特别的属性,是普通标签没有的

value 获取到元素里用户填写的值

给 input 放一个数字,每次点击按钮,让数字 +1,并显示出来

value 属性是一个 String ,直接 +1 就会变成字符串凭借,我们需要使用parseInt 将字符串转换成整数


获取 / 修改样式属性

1、直接修改 内容样式

(修改 style 属性的值)

弄一个 div,每次点击,都会让字体放大

style 里面的属性名字,都是和 CSS 中的一直的,只不过是脊柱命名换成驼峰 

2、修改元素应用的 CSS 类名

切换夜间模式


新增元素

1、创建一个元素

2、把这个元素放到 dom 里面去

使用 createElement 方法来创建元素


删除元素

parentElem.removeChild


代码案例:

1、网页版本的猜数字

1、生成一个 1 - 100 之间的随机数

2、让用户来输入一个数字

3、根据数字输入的大小关系,给出提示

使用 Math.random 生成的是 [0,1) 之间的随机数

把随机数设置为 N ,在这个基础上 *100,此时 N 的范围就是 [0,100)

并且使用 parseInt 把小数部分去掉,最终得到[0,100)之间的整数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>猜数字</title>
</head>
<body>
    <div>请输入要猜的数字</div>
    <input type="text">
    <button>提交</button>
    <!-- 使用这个 div 来显示结果 -->
    <div class="result">

    </div>
    <script>
        //1、先生成一个随机的整数
        let toGuess = parseInt(Math.random() * 100) + 1;
        console.log(toGuess);
        //2、进行猜数字操作
        let button = document.querySelector('button');
        let input = document.querySelector('input');
        let resultDiv = document.querySelector('.result');
        button.onclick = function(){
            //取出输入框里的数字
            if(input.value == ''){
                //用户什么都没有输入
                return;
            }
            let inputNum = parseInt(input.value);
            //4、比较大小关系
            if(inputNum < toGuess){
                //低了
                resultDiv.innerHTML = '低了'
            }else if(inputNum > toGuess){
                //高了
                resultDiv.innerHTML = '高了'
            }else{
                //猜对了
                resultDiv.innerHTML = '猜对了'
            }
        }

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

表白墙程序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表白墙</title>
    <style>
        /*  * 是通配符选择器,是选中也米娜所有元素 */
        *{
            /* 消除浏览器的默认样式 */
            margin:0;
            padding:0;
            box-sizing: border-box;
        }
        .container{
            width:600px;
            margin:20px auto;
        }

        h1{
            text-align: center;
        }
        p{
            text-align: center;
            color:#666;
            margin: 20px;
        }
        .row{
            /* 开启弹性布局 */
            display:flex;
            height:40px;
            /* 水平方向居中 */
            justify-content: center;
            /* 垂直方向居中 */
            align-items: center;
        }
        .row span{
            width:100px;
        }
        .row input{
            height:30px;
            width:200px;
        }
        .row button{
            width: 300px;
            height:30px;
            color:white;
            background-color: orange;
            border: none;
            border-radius: 5px;
        }
        /* 点击的时候有反馈 */
        .row button:active{
            background-color: #666;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>表白墙</h1>
        <p>输入内容后点击提交,会将信息显示到表格中</p>
        <div class="row">
            <span>谁:</span>
            <input type="text">
        </div>

        <div class="row">
            <span>对谁:</span>
            <input type="text">
        </div>

        <div class="row">
            <span>说:</span>
            <input type="text">
        </div>
        <div class="row">
            <button>提交</button>
        </div>
    </div>

    <script>
        // 实现提交操作
        //点击提交,就能够把用户输入的内容提交到页面上显示
        //在点击的时候,获取到三个输入框的文本内容
        //创建一个新的 div .row ,把文本内容构造到这个 div 中
        let containerDiv  = document.querySelector('.container');
        let inputs = document.querySelector('input');
        let button = document.querySelector('button');
        button.onlick = function(){
            //1、获取到三个输入框的内容
            let from = inputs[0].value;
            let to = inputs[1].value;
            let msg = inputs[2].value;
            if(from == '' || to == '' || msg == ''){
                return;
            }

            //构造新的 div
            let rowDiv = document.createElement('div');
            rowDiv.className = 'row';
            rowDiv.innerHTML = from + ' 对 ' + to + ' 说: ' + msg;
            containerDiv.appendChild(rowDiv);
            //清空之前的输入框内容
            for(let input of inputs){
                input.value = '';
            }
        }
    </script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/90659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MybatisPlus(1)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 MyBatis-Plus&#xff08;简称MP&#xff09;是一个 Mybatis 的增强工具&…

pytorch中的register_buffer

今天在一个模型的init中遇到了self.register_buffer(‘running_mean’, torch.zeros(num_features)) register_buffer(self, name, tensor)是一个PyTorch中的方法&#xff0c;它的作用是向模块&#xff08;module&#xff09;中添加一个持久的缓冲区&#xff08;buffer&#xf…

msvcp110.dll丢失的解决方法,大家最常用的三个解决方法【教程】

win10是一款非常优秀的电脑系统&#xff0c;但有时候也会出现文件错误&#xff0c;比如msvcp110.dll丢失。这个问题可能会导致一些应用程序无法正常运行&#xff0c;甚至可能影响到系统的稳定性。那么&#xff0c;面对这样一个问题&#xff0c;我们应该如何解决呢&#xff1f;今…

R语言画样本不均衡组的箱线图

# 导入 ggplot2 包 library(ggplot2)# 示例数据框&#xff0c;包含数值数据和分组信息 data <- data.frame(Group c(rep("Group A",10), rep("Group B",15),rep("Group C",20)),Value c(rnorm(10, mean 10, sd 2),rnorm(15, mean 15, sd…

Orchestrator介绍一 简介安装与web端管理

目录 一 Orchestrator简介 二 Orchestrator功能 1 Discovery(发现复制拓扑) 2 Refactoring(重构复制拓扑) 3 Recovery(恢复主库故障) 三 orchestrator支持的操作方式 四 部署要求 五 下载 六 安装 1 下载软件包 2 解压软件包 3 创建账号 第一种是 orc后端MySQL数据…

mall:redis项目源码解析

文章目录 一、mall开源项目1.1 来源1.2 项目转移1.3 项目克隆 二、Redis 非关系型数据库2.1 Redis简介2.2 分布式后端项目的使用流程2.3 分布式后端项目的使用场景2.4 常见的缓存问题 三、源码解析3.1 集成与配置3.1.1 导入依赖3.1.2 添加配置3.1.3 全局跨域配置 3.2 Redis测试…

idea上利用JDBC连接MySQL数据库(8.1.0版)

1.了解jdbc概念 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API&#xff0c;可以为多种 关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准&#xff0c;据此可以构建 更高级的工具和接口&#…

[C++ 网络协议] 多进程服务器端

具有代表性的并发服务器端实现模型和方法&#xff1a; 多进程服务器&#xff1a;通过创建多个进程提供服务。✔ 多路复用服务器&#xff1a;通过捆绑并统一管理I/O对象提供服务。 多线程服务器&#xff1a;通过生成与客户端等量的线程提供服务。 1. 进程的概念及应用 1.1 什么…

VR全景加盟会遇到哪些问题?全景平台会提供什么?

想创业&#xff0c;你是否也遇到这些问题呢&#xff1f;我是外行怎么办&#xff1f;没有团队怎么办&#xff1f;项目回本周期快吗&#xff1f;项目靠谱吗&#xff1f;加盟平台可信吗&#xff1f;等等这类疑问。近几年&#xff0c;VR产业发展迅速&#xff0c;尤其是VR全景项目在…

Linux保存退出和不保存退出命令

Vim编辑器 vim 要编辑的文件输入i进入编辑模式保存退出&#xff1a; 按Esc键退出insert模式&#xff0c;然后输入冒号(:)&#xff0c;输入wq!可以保存并退出. 不保存退出&#xff1a; 按Esc键退出insert模式&#xff0c;然后输入冒号(:)&#xff0c;输入q!可以不保存并退出。…

系统架构设计高级技能 · 大数据架构设计理论与实践

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估&#xff08;二&#xff09;【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

云计算中的数据安全与隐私保护策略

文章目录 1. 云计算中的数据安全挑战1.1 数据泄露和数据风险1.2 多租户环境下的隔离问题 2. 隐私保护策略2.1 数据加密2.2 访问控制和身份验证 3. 应对方法与技术3.1 零知识证明&#xff08;Zero-Knowledge Proofs&#xff09;3.2 同态加密&#xff08;Homomorphic Encryption&…

C++day5(静态成员、类的继承、多继承)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.静态数据成员静态成员函数&#xff08;银行账户实例&#xff09; #include <iostream>using namespace std;class BankAccount { private:double balance; //余额static double interest_rate; //利率 p…

【Cortex-M3权威指南】学习笔记2 - 指令集

目录 指令集汇编语言基础UAL 近距离检视指令数据传输数据处理子程呼叫与无条件跳转指令标志位与条件转移指令隔离指令饱和运算 CM3 中新引入指令MRS\MSRIF-THENCBZ/CBNZSDIV/UDIVREV RBITSXTBTBB,TBH 指令集 汇编语言基础 一条简单的汇编指令格式&#xff08;注释使用一个分号…

持续集成与持续交付:现代软件测试的变革之路

引言 在数字化时代&#xff0c;软件开发的速度和复杂性都在不断增加。为了满足市场的需求&#xff0c;企业需要更快、更高效地交付高质量的软件产品。在这样的背景下&#xff0c;持续集成与持续交付&#xff08;CI/CD&#xff09;成为了软件开发和测试的核心实践。 软件开发的…

UE4/5的Custom节点:在VScode使用HLSL(新手入门用)

目录 custom节点 VSCode环境安装 将VSCode里面的代码放入Custom中 custom节点 可以看到这是一个简单的Custom节点&#xff1a; 而里面是可以填写代码的&#xff1a; 但是在这里面去写代码会发现十分的繁琐【按下enter后&#xff0c;不会换行&#xff0c;也不会自动缩进】 …

Android scrollTo、scrollBy、以及scroller详解 自定义ViewPager

Scroller VelocityTracker VelocityTracker 是一个速度跟踪器&#xff0c;通过用户操作时&#xff08;通常在 View 的 onTouchEvent 方法中&#xff09;传进去一系列的 Event&#xff0c;该类就可以计算出用户手指滑动的速度&#xff0c;开发者可以方便地获取这些参数去做其他…

jemter连接数据json断言

文章目录 一、jmeter连接数据库1、加载JDBC驱动2、连接数据3、SQL Query的Query Type使用方法&#xff1a;4、Variable Name使用方法&#xff1a;5、Result variable name使用方法&#xff1a; 二、Json响应断言1、添加 》 断言 》 JSON断言2、JSON断言界面参数说明&#xff1a…

RH1288V3 - 初识物理服务器

如果你拥有一台物理服务器(不是云服务器) 个人比较推荐你用物理服务器&#xff0c;虽然性能会比云要来的差&#xff0c;但是不用每月交钱上。云服务固然方便&#xff0c;但是几个核的性能和一点存储&#xff0c;想做一个动漫网站固然要很多mp4这种影视资源&#xff0c;云服务器…

React+Typescript 父子组件事件传值

好 之前我们将 state 状态管理简单过了一下 那么 本文 我们来研究一下事假处理 点击事件上文中我们已经用过了 这里 我们就不去讲了 主要来说说 父子之间的事件 我们直接来编写一个小dom 我们父组件 编写代码如下 import Hello from "./components/hello";functio…