【第五部分 | JS WebAPI】5:1W字详解Bom对象

news2024/12/23 10:17:59

目录

| Bom概述

| window 、Bom、Dom 的关系

| window的load事件:把JS写进head里

如何把 JS 代码写到head里(页面加载事件 onload)

比onload更高效的加载事件 DOMContentLoaded

| window的resize事件(窗口大小改变的时候触发)

| 定时器

1-1 setTimeout() 定时器

1-2 回调函数的概念

1-3 清除setTimeOut定时器

2-1 setInterval() 定时器

2-2 清除setInterval定时器

2-2 案例:倒计时

2-4 案例:点击”发送“按钮后 60s不能再点击

| this

| JS 同步与异步

现在的 JS 支持异步执行了

JS 中的同步任务和异步任务

JS 同步任务、异步任务 的执行机制

JS 异步任务(回调函数)放入任务队列的顺序

| location 对象

1-1 概述

1-2 url 复习

2-1 location 对象的相关属性

2-2 location.href 获取或修改URL

2-3 location.search 获取参数

3-1 location 对象的相关方法

| navigater对象:根据设备不同跳转页面

| history对象:在页面中实现前进页面、后退页面


| Bom概述

  • Bom比Dom的范围更大。Bom包含Dom

  • Bom的标准由不同浏览器厂商自己制定,没有统一标准,因此兼容性有些不确定性

| window 、Bom、Dom 的关系

  • Bom是浏览器对象模型

  • Bom的最高级对象是window

  • Bom的其它对象还有 location navigation history

  • 实际上,document也是一个 window的对象,即它也是Bom(浏览器对象模型)的一部分。但是在Dom(文档对象模型)中,它是最高级别的对象

    即:Bom包含Dom

  • 一切window的对象都可以通过【window.对象】调用 如window.document ,但是也可以省略

  • window是浏览器的顶级祖先对象。相当于Java万物源于Object

  • window下有一个特殊属性name,默认打印出来是空的。建议命名的时候不要用name


alert() 等价于 window.alert()


| window的load事件:把JS写进head里

如何把 JS 代码写到head里(页面加载事件 onload)

window.onload = function(){}
或者监听事件:
window.addEventListener("load",function(){});

  • window.onload 是窗口 (页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS 文件等), 就调用的处理函数。

  • 有了 window.onload 就可以把 JS 代码写到页面元素的上方,因为 onload 是等页面内容全部加载完毕, 再去执行处理函数

  • window.onload 传统注册事件方式 只能写一次,如果有多个,会以最后一个 window.onload 为准。 如果使用 addEventListener 则没有限制

代码示例

<!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>Document</title>
    <script>
        window.addEventListener('load',function(){
            // 在这里面写上所有的JS代码
            // onload会在所有的dom对象加载完毕,才会执行。因此可以把JS写在最上面
            var btn = document.querySelector('button');
            btn.addEventListener('click',f);
            function f(){
                alert('Click')
            }
        })
    </script>
</head>
<body>
    <button>点我</button>
</body>
</html>

比onload更高效的加载事件 DOMContentLoaded

  • onload会等页面所有的元素加载完,才会执行onload内的JS函数

  • DOMContentLoaded 事件触发时,仅当DOM加载完成,不包括样式表,图片,flash等等(IE9+才支持)

  • 如果页面的图片很多的话, 从用户访问到onload触发需要较长的时间, 交互效果就不能实现,必然影响用 户的体验,此时用 DOMContentLoaded 事件比较合

document.addEventListener('DOMContentLoaded',function(){})
 

| window的resize事件(窗口大小改变的时候触发)

  • window.onresize 是调整窗口大小加载事件, 当触发时就调用的处理函数

  • 只要窗口大小发生像素变化,就会触发这个事件。

  • 在没有CSS3之前,我们经常利用这个事件完成响应式布局。搭配 window.innerWidth 获取当前屏幕尺寸

window.onresize = function(){}
或者监听事件:
window.addEventListener("resize",function(){});

| 定时器

1-1 setTimeout() 定时器

window.setTimeout(调用函数, [延迟的毫秒数]);

  • setTimeout() 方法用于设置一个定时器,该定时器在定时器到期后执行调用函数

  • window 可以省略

  • 延迟的毫秒数省略默认是 0,如果写,必须是毫秒

  • 因为定时器可能有很多,所以我们经常给定时器赋值一个标识符。

代码示例

<!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>Document</title>
    <script>
        //以后都把JS写在预加载监听事件里
        window.addEventListener('load',function(){
            
            //写法一:window.定时器。 在里面写上函数体,定义1000ms延迟触发
            window.setTimeout(function(){
                alert(1);
            },1000);

            //写法二:window.定时器。 直接写函数名
            window.setTimeout(f,2000);

            //写法三:直接写定时器,调用
            setTimeout(f,3000);

            //为了区别不同的定时器,我们给不同的定时器起一个标识符(名字)
            var timeCommand = setTimeout(f,5000);
            
            
            function f(){
                alert('2');
            }


        })
    </script>
</head>
<body>
    
</body>
</html>

1-2 回调函数的概念


1-3 清除setTimeOut定时器

  • 应用场景:肥皂剧中,女主被捆绑了炸弹,然后男主奋不顾身让炸弹停止。

  • 语法

window.clearTimeout(定时器的名字变量)

 

2-1 setInterval() 定时器

  • setTimeout( ) 至始至终只会执行一次!(亲测,即使放进while循环也不会在每次循环的时候重新执行)

  • setInterval 和 setInterval 的使用方法完全相同,不同之处在于 setInterval( ) 定时器会间隔某个时间段一直反复执行


2-2 清除setInterval定时器

window.clearInterval(interval定时器的变量名);


2-2 案例:倒计时

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            margin: 200px;
        }
        
        span {
            display: inline-block;
            width: 40px;
            height: 40px;
            background-color: #333;
            font-size: 20px;
            color: #fff;
            text-align: center;
            line-height: 40px;
        }
    </style>
</head>

<body>
    <div>
        <span class="hour">1</span>
        <span class="minute">2</span>
        <span class="second">3</span>
    </div>
    <script>
        // 1. 获取元素 
        var hour = document.querySelector('.hour'); // 小时的黑色盒子
        var minute = document.querySelector('.minute'); // 分钟的黑色盒子
        var second = document.querySelector('.second'); // 秒数的黑色盒子
        var inputTime = +new Date('2019-5-1 18:00:00'); // 返回的是用户输入时间总的毫秒数
        countDown(); // 我们先调用一次这个函数,防止第一次刷新页面有空白 
        // 2. 开启定时器
        setInterval(countDown, 1000);

        function countDown() {
            var nowTime = +new Date(); // 返回的是当前时间总的毫秒数
            var times = (inputTime - nowTime) / 1000; // times是剩余时间总的秒数 
            var h = parseInt(times / 60 / 60 % 24); //时
            h = h < 10 ? '0' + h : h;
            hour.innerHTML = h; // 把剩余的小时给 小时黑色盒子
            var m = parseInt(times / 60 % 60); // 分
            m = m < 10 ? '0' + m : m;
            minute.innerHTML = m;
            var s = parseInt(times % 60); // 当前的秒
            s = s < 10 ? '0' + s : s;
            second.innerHTML = s;
        }
    </script>
</body>

</html

2-4 案例:点击”发送“按钮后 60s不能再点击

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    手机号码: <input type="number"> <button>发送</button>
    <script>
        // 按钮点击之后,会禁用 disabled 为true 
        // 同时按钮里面的内容会变化, 注意 button 里面的内容通过 innerHTML修改
        // 里面秒数是有变化的,因此需要用到定时器
        // 定义一个变量,在定时器里面,不断递减
        // 如果变量为0 说明到了时间,我们需要停止定时器,并且复原按钮初始状态
        var btn = document.querySelector('button');
        var time = 3; // 定义剩下的秒数
        btn.addEventListener('click', function() {
            btn.disabled = true;
            var timer = setInterval(function() {
                if (time == 0) {
                    // 清除定时器和复原按钮
                    clearInterval(timer);
                    btn.disabled = false;
                    btn.innerHTML = '发送';
                } else {
                    btn.innerHTML = '还剩下' + time + '秒';
                    time--;
                }
            }, 1000);

        })
    </script>
</body>

</html>

| this

  • 全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)

  • 方法调用中谁调用this指向谁

  • 构造函数中this指向构造函数的实例

易错示例:

代码示例:

<!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>Document</title>
    <script>
        window.addEventListener('load',function(){

            // 1.全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)
            console.log(this); //window

            function f(){
                console.log(this); 
            }
            f();//window



            // 2.方法调用中谁调用this指向谁
            var obj = {
                objf : function(){
                    console.log(this);
                }
            }
            obj.objf();//Object { objf: objf() }


            
            //  3.构造函数中this指向构造函数的实例
            function Person(name , age){
                this.name = name;
                this.age = age;
                console.log(this);
            }
            var person = new Person('Klee');//Object { name: "Klee", age: undefined }


        })
    </script>
</head>
<body>
    
</body>
</html>


| JS 同步与异步

现在的 JS 支持异步执行了


现在的 JS引入了”执行栈、回调函数“ 相关标准和技术,使得可以把需要等待执行的代码(回调函数)添加到任务队列中,把事件给那些不需要等待的代码。从而实现异步

包括今后的Ajax,就是一个异步回调函数!

代码示例

<!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>Document</title>
    <script>
        window.addEventListener('load',function(){
            console.log(1);
            window.setTimeout(function(){
                console.log(2);
            },2000);
            console.log(3);

            //按照以前的JS,输出结果是 1 2 3
            //但是现在的JS支持异步,所以输出结果是 1 3 2
        })
    </script>
</head>
<body>
    
</body>
</html>


JS 中的同步任务和异步任务

  • JS 为了实现异步,添加了”执行栈、回调函数“等概念,从而帮助我们把那些需要等待的任务放到栈中,稍后再执行。

  • 我们需要弄懂,哪些是同步任务(按照顺序依次执行)、哪些是异步任务(放入执行栈中,等待回调的代码)

常见的异步任务

普通事件 click resize

资源加载 load error

定时器 setInterval setTimeOut


JS 同步任务、异步任务 的执行机制

  • 先区分同步任务和异步任务。

  • 同步任务先放到执行栈中,先执行完所有同步任务

  • 一旦所有同步任务执行完毕,则系统依次读取任务队列的异步任务,把异步任务进入执行栈,开始执行


JS 异步任务(回调函数)放入任务队列的顺序

  • 有时候,代码中可能有许多异步任务,比如【延时2s执行】的任务可能定义在【延时3s执行】的任务前面,如果我们只按照【异步函数定义的顺序 + 按照顺序将其丢入任务队列】的做法,则会导致任务队列中【延时2s】的任务被【延时3s】的任务所耽误了一秒(因为是【延时3s】的任务先进去的,根据栈的后进先出,则【延时3s】的任务出栈后才轮到【延时2s】的任务出栈)

  • 观察下列代码 输出的结果是【1 4 休眠2s 休眠3s】 这说明,异步任务的任务队列入栈顺序并不是简单的顺序关系

            console.log(1);
            window.setTimeout(function(){
                console.log('休眠2s');
            },2000);
            window.setTimeout(function(){
                console.log('休眠3s');
            },3000);
            console.log(4);

  • 实际上,异步任务的任务队列入栈顺序,是由异步任务处理来管理的

    对于定时器:只有计时结束了,异步任务处理 才会把该任务 放入任务队列!然后等同步任务全部执行完成后,再从任务队列调用该函数(这也就解释了上述的现象)

    对于点击:只有点击了,异步任务处理 才会把该任务 放入任务队列!

  • 实际上,系统会在【同步任务执行 → 查看任务队列是否有任务 → 从任务队列获得任务并执行】 【异步任务处理 → 添加异步任务到任务队列】两条任务线上不断循环,这种机制被称为事件循环(event loop)

| location 对象

1-1 概述

  • location是隶属于window下的一个对象,其地位和document相当

  • 区别在于:document 是 Dom(文档对象模型)的 ; location 是 Bom(浏览器对象模型)的。

  • location 与 url 有关,location这个Bom对象,是用来对url的相关属性进行操作的

1-2 url 复习


2-1 location 对象的相关属性

注意这是属性!不是函数!不需要括号

location属性的获取方式

window.location.属性名

 当然,也可以省略window

location.属性名

2-2 location.href 获取或修改URL

var url = location.href;  //获取url
location.href = 'url';  //修改当前页面url

2-3 location.search 获取参数

location.search;  //获取的是一个从 ? 开头的字符串

若有中文,则需要进行转码,使用下面这个代码

var parameter = decodeURIComponent(window.location.search);

代码示例:

//登录页代码
<!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>Document</title>
    <style>
        form {
            width: 300px;
            height: 200px;
            border: 1px transparent;
            margin: 200px auto;
        }

        form .name {
            width: 200px;
            height: 20px;
            margin: 5px calc(50% - 100px);
        }

        form .sex {
            display: block;
            width: 200px;
            height: 20px;
            margin: 5px calc(50% - 70px);
        }

        form .submit {
            display: block;
            width: 100px;
            height: 40px;
            background-color: lightcyan;
            margin: 20px calc(50% - 50px);
            
        }

    </style>
</head>
<body>
    <form action="13-2 跳转页面.html">
        <input type="text" name="name" placeholder="输入" value="" class="name">
        <div class="sex">
            <input type="radio" name="sex" value="man">man
            <input type="radio" name="sex" value="woman">women
        </div>
        <input type="submit" value="登录" class="submit">
    </form>
</body>
</html>

//跳转页代码
<!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>Document</title>
    <script>
        window.addEventListener('load',function(){
        

        //获取参数字符串
        var parameter = decodeURIComponent(window.location.search);//?name=SSS&sex=woman

        //去掉开头的?
        var parameter2 = parameter.substring(1,parameter.length);//name=SSS&sex=woman


        //根据 & 符号分割字符串
        var parameterArray = parameter2.split('&');//Array [ "name=SSS", "sex=woman" ]

        //遍历字符串,依次获取
        for(var i=0 ; i<parameterArray.length ; i++){
            var para = parameterArray[i];
            var name = para.split('=')[0];
            var value = para.split('=')[1];

            //展示参数值
            var newDiv = document.createElement('div');
            var box = document.querySelector('.box');
            box.appendChild(newDiv);
            newDiv.innerText = '参数名:' + name + ',参数值:' + value;
        }
           
        })
    </script>
</head>
<body>
    <div class="box">
        
    </div>
</body>
</html>

3-1 location 对象的相关方法

方法是要加括号的哦,注意和属性区别开


| navigater对象:根据设备不同跳转页面

navigator 对象包含有关浏览器的信息,它有很多属性,我们最常用的是 userAgent,该属性可以返回由客 户机发送服务器的 user-agent 头部的值。

下面前端代码可以判断用户那个终端打开页面,实现跳转

if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|
Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS
|Symbian|Windows Phone)/i))) {
 window.location.href = ""; //手机
} else {
 window.location.href = ""; //电脑
}


| history对象:在页面中实现前进页面、后退页面

代码示例:

<!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>Document</title>
    <script>
        window.addEventListener('load',function(){
            var button1 = document.querySelector('body button:nth-of-type(1)');
            button1.addEventListener('click',function(){
                //通过back返回上级页面
                history.back();
            })
            
            var button2 = document.querySelector('body button:nth-of-type(2)');
            button2.addEventListener('click',function(){
                window.location.href = '14-3 跳转页面2.html';
            })
        })
    </script>
</head>
<body>
    <span>当前页面:2</span>
    <button>上一级</button>
    <button>下一级</button>
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue移动端高德地图的使用及实现最简单的地图功能

目录 一、创建应用获取key 1、进入开放平台&#xff0c;按步骤注册成为开发者 2、 登录之后&#xff0c;点击头像&#xff0c;进入「应用管理」 页面「创建新应用」 3、 为应用添加 Key 二、配置 1、在public下的index.html中添加 2、 JSAPI key和安全密钥的使用 方式一…

论文阅读09——《Deep Fusion Clustering Network》

论文阅读09——《Deep Fusion Clustering Network》 原文链接&#xff1a;论文阅读09——《Deep Fusion Clustering Network》 作者&#xff1a;Wenxuan Tu, Sihang Zhou, Xinwang Liu, Xifeng Guo, Zhiping Cai, En zhu, Jieren Cheng 发表时间&#xff1a;2021年5月18日 论文…

Java基础五大机制 —— SPI机制基础(一)

1、什么是SPI机制 SPI&#xff08;Service Provider Interface&#xff09;&#xff0c;是JDK内置的一种 服务提供发现机制&#xff0c;可以用来启用框架扩展和替换组件&#xff0c;主要是被框架的开发人员使用&#xff0c;比如java.sql.Driver接口&#xff0c;其他不同厂商可…

Fast-DDS库的安装教程

Fast-DDS库的安装教程0 序言1 安装依赖2 安装Fast-DDS2.1 编译foonathan_memory_vendor2.2 编译Fast-CDR2.3 编译Fast-DDS2.4 编译Fast-DDS-Gen2.5 添加环境变量2.6 验证3 参考资料4 写在最后工欲善其事,必先利其器。首先要知道 Fast-DDS是什么&#xff1f;要知道 Fast-DDS是什…

wy的leetcode刷题记录_Day48

wy的leetcode刷题记录_Day48 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2022-11-21 前言 补前几天的blog 目录wy的leetcode刷题记录_Day48声明前言808. 分汤题目介绍思路代码收获654. 最大二叉树题目介绍思路代码收获808. 分汤 今…

Boc-QAR-AMC,CAS号:201849-55-0/113866-20-9

胰蛋白酶的高反应性底物&#xff0c;前列腺素和matriptase的荧关底物 编号: 199467中文名称: 标记肽Boc-QAR-7-氨基-4-甲基香豆素.HCl英文名: Boc-Gln-Ala-Arg-AMCCAS号: 201849-55-0/113866-20-9单字母: Boc-QAR-AMC三字母: Boc-Gln-Ala-Arg-AMC氨基酸个数: 3分子式: C29H42O8…

低代码维格云常用组件入门教程

1. 维格云常用组件功能简介 工作区的成员可以根据自己的业务习惯,将工作区内的应用、门户添加到常用组件。添加后成员可以直接从门户的常用组件中操作相应的应用、门户 2. 维格云常用组件配置方式 2.1 添加常用组件 在门户中拖拽或点击添加常用组件2.2 设置组件标题 在右侧编…

中学化学教学参考杂志社中学化学教学参考编辑部2022年第15期目录

刊庆专稿 试论“文化化学”教学思想的实践意义与样态 刘英琦; 1-4 课改在线《中学化学教学参考》投稿&#xff1a;cn7kantougao163.com 凝练观念 重构实践 引领评价——谈《义务教育化学课程标准(2022年版)》的修订 周青; 4-6 领悟化学课程的育人标准——基于《义务…

阿里、字节等神创,必须是全网最全的Netty核心原理手册

时间飞逝&#xff0c;转眼间毕业七年多&#xff0c;从事 Java 开发也六年了。我在想&#xff0c;也是时候将自己的 Java 整理成一套体系。 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试…

【SpringBoot笔记28】SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)

这篇文章&#xff0c;主要介绍SpringBoot集成ES数据库之操作doc文档&#xff08;创建、更新、删除、查询&#xff09;。 目录 一、SpringBoot操作ES文档数据 1.1、创建文档 1.2、更新文档 1.3、删除文档 1.4、查询文档 1.5、判断文档是否存在 1.6、批量创建文档 一、Spr…

高手系列!数据科学家私藏pandas高阶用法大全 ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 本文地址&#xff1a;https://www.showmeai.tech/article-detail/394 &#x1f4e2; 声明&#xff1a;版权所有&#xff0c;转…

CubeMX+VSCode+Ozone的STM32开发工作流(二)VSCode环境配置

neozng1hnu.edu.cn 本教程的示例代码是笔者参加RoboMaster机甲大师赛为机器人编写的控制器框架&#xff0c;你可以直接克隆仓库&#xff0c;阅读仓库下的Markdown文档获得更好的体验&#xff0c;记得点一个小⭐: basic_framework: basic_framework (gitee.com)所有安装包也可以…

OceanBase TableAPI实践案例(Rust)

引子 这是OceanBase TableAPI实践案例&#xff08;Java&#xff09;的姊妹篇&#xff0c;上一篇比较全面的比较全面的介绍了TableAPI的相关概念&#xff0c;以及基本的环境搭建&#xff0c;因此这篇不再赘述。本文将主要介绍TableAPI的Rust客户端obkv-table-client-rs &#x…

Visio画图更改连接线的弧形和调整跨线

目录前言准备参考问题解决问题一解决问题二前言 最近在使用Visio画图时&#xff0c;出现了一些问题&#xff0c;于是上网查了一下&#xff0c;将方法记录下来。 准备 Visio2021 参考 Visio中&#xff0c;如何修改连接线的跨线样式&#xff1f; 问题 (1) 使用连接线的时候…

【微信小程序】使用 Cryptojs 解密微信绑定手机号码

很抱歉断更了一段时间&#xff0c;因为最近在做一个项目比较忙&#xff0c;正好项目中小程序板块需要解密手机号码来提交给接口&#xff0c;小程序中虽然提供了获取手机号按钮点击事件&#xff1a;bindgetphonenumber&#xff0c;但是该事件的处理函数中只能获取到加密过的手机…

新力量,新希望|明道云伙伴大会2022秋圆满落幕

2022年10月28日至29日&#xff0c;明道云伙伴大会&#xff08;2022年秋&#xff09;在上海顺利举办。来自北京大兴国际机场、广汽本田、京东方、天津钢管、深圳龙华区卫健局、可口可乐、山东移动、浙江移动、上海电气数科、金科信息、艾默生电气等超过五百位参会者同台交流。行…

工业物联网的数据集成

随着网关技术的不断发展&#xff0c;创新、高效的软件解决方案及IT架构在工业物联网系统架构中将发挥着更为重要的作用。其中&#xff0c;工业物联网集成工业数据的一个关键问题在于如何利用软件、IT和创新算法来部署网络解决方案&#xff0c;从而使得生产效率更高。 &#xff…

Java中 this 和 super 的用法与区别

在Java的学习与开发者我们经常遇到this和super关键字&#xff0c;那么它们的用法和区别是什么呢&#xff1f; 一、this关键字 1.this是什么&#xff1f; this 是自身的一个对象&#xff0c;代表对象本身&#xff0c;可以理解为&#xff1a;指向对象本身的一个指针。 2.this…

javaScript之数组中reduce的详细介绍及使用

一、reduce功能接受及定义&#xff08;自我理解&#xff09; reduce方法为数组中的一个高阶函数&#xff0c;接受两个参数&#xff0c;第一个参数为回调函数&#xff0c;第二个为初始值。如果不给入初始值则会以数组第一项为初始值&#xff01;reduce会循环数组每一项&#xf…

数据库-深度剖析mysql索引原理(上)(三)

目录 一、什么是索引 二、索引由来 三、索引本质 四、索引数据结构 1、hsah 2、Btree 五、myISAM 和Innodb这两个数据库的索引是如何实现的呢&#xff1f; 1、首先看 MYSAM 1、以主键Id字段建立索引 2、以name字段来建立索引 2、在看Innodb数据库引擎的数据库 1、以…