JavaScript中的对象,常用内置对象和数据类型

news2024/10/21 9:07:20

一、对象

1.概念

什么是对象?

在JavaScript中,对象是一组无序的相关属性和方法集合,所有的事物都是对象,例如:字符串、数值、数组和函数等等。

对象是由属性和方法组成的。

  • 属性:事物的特征,在对象中属性来表示(常用名词)
  • 方法:事物的行为,在对象中用方法来表示(常用动词)
手机:
	属性——大小、颜色、尺寸和厚度等等
	方法——打电话、发短信、玩游戏

2.为什么需要对象

保存一个值的时候,可以使用变量、保存多个值可以使用数组。

如果要保存一个人的完整信息呢?

​ 如:将“张三丰”的个人信息保存起来 var arr = [‘张三丰’,‘男’,100,100,…]

上述例子中用数组保存数据的缺点:数据只能通过索引来访问,开发者就需要非常清晰的记得所有数据的排行才能准确的获取数据,而当数据量庞大的时候,不可能做到记忆所有的数据的索引值。


为了让更好地存储一组数据,对象就应运而生:对象中的每项数据设置了属性名词,可以访问数据更加语义化,数据结构清晰,表意明显,方便开发者使用
var person = {
    "name":"张三丰",
    "sex":"男",
    "age":100,
    "height":100
}

JS中对象表达结构更加清晰,更强大。

3.创建对象的三种方式

3.1 利用newObject创建

语法
//语法1:创建一个空对象
var  对象名 = new Object();//创建了一个空的对象

// 语法2:给对象中添加属性和值
对象名.属性名 =;


// 语法3:给对象添加方法
对象名.方法名 = function(){
   //...
}


// 语法4:如何获取对象中的属性
对象名.属性名


//语法5:如何调用对象中的方法
对象名.方法名();
案例
//利用new  Object创建对象
var zsf = new Object();  //创建了一个空的对象
//给对象添加属性
zsf.name = '张三丰'; //给对象中添加属性和值
zsf.age = 100;
zsf.sex = '男';

//给对象添加方法
zsf.sayHi = function(){
    console.log('张三丰说:你好!');
}

console.log(zsf.name);
console.log(zsf.sex);

//调用对象中的方法
zsf.sayHi();

3.2 利用字面量的方式创建

语法
//语法:
var 对象名 = {
    属性1: '值1',
    属性2: '值2,
    ...
    方法名1:function(){
        //..
    },
	方法名2:function(){        //..
    }
}
案例
//通过字面量的方式创建对象
var ldh = {
    name:'刘德华',
    age:61,
    sing:function(){
        console.log('刘德华唱了:忘情水');
    },
    eat:function(){
        console.log('我会吃饭');
    }
}
//获取属性值
console.log(ldh.name);
//调用对象中的方法
ldh.sing();
ldh.eat();

3.3 利用构造函数创建

我们为什么需要构造函数:

因为我们前面两种创建对象的方式一次只能创建一个对象。因为我们一次创建了一个对象,里卖弄很多的属性和方法是大量相同的,我们只能复制。

我们可以利用函数方法,重复这些相同的代码,我们把这个函数称之为构造函数,因为这个函数不一样的,里卖弄封装的不是普通的代码,而是对象

**构造函数:**就是把我们对象里面一些相同的属性和方法抽取(抽象)出来封装到函数里面

//构造函数
function Star(uname,uage){
    this.name = uname;
    this.age = uage;
    this.sing = function(sang){
        console.log('我在唱歌:' + sang);
    };
    this.eat = function(){
        console.log('我爱吃饭');
    }
}

//通过构造函数,构造出一个刘德华
var ldh = new Star('刘德华','55');
console.log(ldh.name);
console.log(ldh.age);
ldh.sing('冰雨');
ldh.eat();
var zxy = new Star('张学友',60);
console.log(zxy.name);
console.log(zxy.age);
zxy.sing('吻别');

4.new关键字执行过程

function Star(name,age,sex){
    this.name = name;
    this.age = age;
    this.sex = sex;
    this.sing = function(sang){
        console.log(sang);
    }
}
/*
            new执行过程:
                1.new构造函数可以在内存中创建一个空对象
                2.this 就会执行刚辞创建的空对象
                3.执行构造函数里面的代码,给这个空对象添加属性和方法
                4.返回这个对象
 */
//创建对象
var ldh = new Star('刘德华',20,'男');

5.遍历对象

var obj = {
    name:'蔡徐坤',  //key:value
    age:19,
    sex:'男',
    fn:function(){
        console.log('fn执行了');
    }
}

//遍历对象
for(var k in obj){
    //得到属性的值  对象[key]
    console.log(k + '    ' + obj[k]);
}

二、JS内置对象

1 什么是JS内置对象

JavaScript中的对象分为3种:

  • 自定义对象
  • 内置对象
  • 浏览器对象

前面的两种对象是JS基础内容,属于ECMAScript,第三个浏览器对象属于JS独有的。JS API讲解内置对象就是指JS语言自带的一些对象,这些对象提供给开发者使用,并提供了一些常用的或者是最基本而必要的功能(属性和方法),内置对象最大的优点就是帮助我们快速开发。

JavaScript种提供了多个内置对象:Math、Date、Array、String等等。

2 查文档

查找文档:学习一个内置对象的使用,只要学会了其常用成员和使用即可,我们可以通过查文档学习,可以通过MDN/W3C来查询。

Mozilla开发网络(MDN)提供了有关开放网络技术(Open Web)的信息,包括了HTML、css和万维网及HTML5应用的API

MDN: https://developer.mozilla.org/zh-CN/

3 Math

Math 不是一个函数对象。Math 是一个内置对象,它拥有一些数学常数属性和数学函数方法。

属性、方法功能
Math.PI圆周率,一个圆的周长和直径之比,约等于 3.14159
Math.floor(x)返回小于一个数的最大整数,即一个数向下取整后的值。
Math.ceil(x)返回大于一个数的最小整数,即一个数向上取整后的值。
Math.abs(x)返回一个数的绝对值。
Math.max([x[, y[, …\]]])返回零到多个数值中最大值。
Math.min([x[, y[, …\]]])返回零到多个数值中最小值。
Math.random()返回一个 0 到 1 之间的伪随机数。
Math.round(x)返回四舍五入后的整数。

案例一

//Math数学对象,不是一个构造函数,所以我们不需要用new来调用,而是直接使用里面的属性和方法即可
console.log(Math.PI);  //PI一个属性,圆周率
console.log(Math.max(1,99,3,100,20,6));  //100
console.log(Math.min(1,10,20,-1,9,7));   //-1
console.log(Math.max(1,99,10,'abc'));    //NaN
console.log(Math.max());    //-Infinity

案例二

利用对象封装自己的数学对象,里面由PI和最大值和最小值

//利用对象封装自己的数学对象,里面由PI和最大值和最小值
var myMath = {
    PI:3.141592653589793,
    max:function(){  //求传入数据中的最大值
        if(arguments.length == 0){
            return -Infinity;
        }
        var max = arguments[0];
        for(var i = 1; i < arguments.length; i++){
            if(arguments[i] > max){
                max = arguments[i];
            }
        }
        return max; //记得返回
    },
    min:function(){  //求传入数据中的最小值
        var min = arguments[0];
        for(var i = 1; i < arguments.length; i++){
            if(min > arguments[i]){
                min = arguments[i]
            }
        }
        return min; //记得返回
    }
}


console.log(myMath.PI);  //PI一个属性,圆周率
console.log(myMath.max(1,99,3,100,20,6));  //100
console.log(myMath.min(1,10,20,-1,9,7));   //-1
console.log(myMath.max(1,99,10,'abc'));    //NaN
console.log(myMath.max());    //-Infinity

案例三

Math绝对和三个取整方法

//1.绝对值方法
console.log(Math.abs(1)); //1
console.log(Math.abs(-1)); //1
console.log(Math.abs('-1')); // 隐式转换,会把字符串-1转换成数字型
console.log(Math.abs('abc')); //NaN

//2.三个取整方法
//2.1 Math.floor();  floor:地板,向下取整,往最小的取
console.log(Math.floor(1.1));  //1
console.log(Math.floor(1.9));  //1

//2.2 Math.ceil();    ceil:天花板,向上取整,往最大的取
console.log(Math.ceil(1.1));  //2
console.log(Math.ceil(1.9));  //2

//3. Math.round()   round:四舍五入
console.log(Math.round(1.1));  //1
console.log(Math.round(1.5));  //2
console.log(Math.round(1.9));  //2

console.log(Math.round(-1.1));  //-1
console.log(Math.round(-1.5));  //-1

案例四

Math对象随机数方法

//Math对象随机数方法  random:随机,返回的数范围:  0 <= x < 1
//这个方法里面不跟参数
console.log(Math.random());

//我们想要得到两个数之间的随机整数 
//          Math.floor(Math.random() * (max - min + 1) + min);
//每次随机数字是1 ~ 3  max = 3  min = 1
// var max = 3,min = 1;
// var r = Math.floor(Math.random()*(max - min + 1) + min);
// console.log(r);

//封装成一个函数,以后你传给我最大值和最小值,我就给你返回一个随机数
function getRandom(min,max){
    return Math.floor(Math.random()*(max - min + 1) + min);
}

var r = getRandom(1,3);
console.log(r);

//随机点名
var arr = ['张三','李四','王五','柯震东','房祖名'];
var index = getRandom(0,arr.length - 1) //随机索引(0,数组长度-1)
console.log(arr[index]);

案例五

需求:随机生成1~100之间的一个数字,用户通过prompt输入一个数字,和随机生成的数字比较,如果猜大了就提示猜大了,然后用户重新输入,如果猜小了就提示用户猜小了然后用户重新输入,直到用户猜对了程序才结束

//封装成一个函数,以后你传给我最大值和最小值,我就给你返回一个随机数
function getRandom(min,max){
    return Math.floor(Math.random()*(max - min + 1) + min);
}
//1.生成1~100的随机数
var r = getRandom(1,100);

//2.猜数字
while(true){
    var num = parseInt(prompt('请输入数字:'));
    if(num > r){
        alert('猜大了');
    } else if(num < r){
        alert('猜小了');
    } else {
        alert('恭喜!猜对了');
        break;//结束循环
    }
}

4 日期对象

该实例呈现时间中的某个时刻。Date是一个构造函数,所以使用的时候需要实例化(new)之后才能使用其中具体的方法和属性

4.1 实例化Date
  • 获取当前时间必须实例化:

    • 获取当前时间

      • var now = new Date();
        
    • 获取指定的时间

      • var mynow = new Date('2024/9/1');
        
//1.实例化
var date = new Date();
console.log(date);  //Mon Oct 14 2024 11:26:00 GMT+0800 (GMT+08:00)

//2.带参数
var date2 = new Date(2024,9,1);
console.log(date2);  //Tue Oct 01 2024 00:00:00 GMT+0800 (GMT+08:00)


//3.带参
var date3 = new Date('2022-10-10 08:08:08');
console.log(date3);  //Mon Oct 10 2022 08:08:08 GMT+0800 (GMT+08:00)

**注意:**如果创建实例时没有传入参数,则得到的日期对象是当前时间对应的日期对象

4.2 Date常用的属性和方法
方法名说明
getFullYear()获取年
getMonth()获取月(0 ~ 11)
getDate()获取日
getDay()获取星期几(周日0, 其它周一1,周2…)
getHours()获取小时
getMinutes()获取分钟
getSeconds()获取秒
//1.创建日期对象
var date = new Date();
var year = date.getFullYear(); //年
var month = date.getMonth() + 1;  //月(从0 ~ 11)
var dates = date.getDate(); //日
var week = date.getDay(); //获取的是星期 (星期天是0)
var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六']

var hours = date.getHours(); //时
var minutes = date.getMinutes(); //分钟
var seconds = date.getSeconds();//秒
console.log(year + '-' + month + '-' + dates + ' ' + arr[week] + ' ' + hours + ':' + minutes + ':' + seconds);
4.3 毫秒数

通过Date获取总毫秒数

  • 总毫秒数的含义

    • 基于1970年1月1日起到你获取的这一刻所经历的毫秒
  • 获取总毫秒数

    • //实例化对象
      var now = new Date();
      
      //1.用于获取对象的原始值(两个都是)
      console.log(now.valueOf());
      console.log(now.getTime());
      
      //2.简单写
      //HTML5种提供的写法
      var now2 = Date.now();
      console.log(now2);
      
      var now3 = + new Date();
      console.log(now3);
      

5 数组对象

5.1 数组创建方式

  • 字面量

    • var arr = [1,'test',true];
      
  • new Array();

    • var arr = new Array();
      
    • 创建的是一个空数组,如果需要使用构造函数Array创建非空数组,可以在创建数组的时候传入参数,参数传递的规则如下:

      • 如果只传入一个参数,则参数规定了数组的长度
      • 如果传入了多个参数,则参数是数组种的元素
//通过构造函数创建数组
//var arr2 = new Array(5);  //只传入一个参数,表示设置数组的长度
var arr2 = new Array(5,1); //传入的是多个参数,表示设置数组中的元素

5.2 检测是否为数组

5.2.1 instanceof

instanceof 运算符:可以判断一个对象是否是某个构造函数的实例

//instanceof 运算符:可以判断一个对象是否是某个构造函数的实例
var date = new Date();
var arr = new Array();

console.log(date instanceof(Array)); //false
console.log(date instanceof(Date)); //true
console.log(arr instanceof(Array)); //true
5.2.2 Array.isArray()

Array.isArray() 用于判断是否一个对象是数组

//instanceof 运算符:可以判断一个对象是否是某个构造函数的实例
var date = new Date();
var arr = new Array();

console.log(date instanceof(Array)); //false
console.log(date instanceof(Date)); //true
console.log(arr instanceof Array); //true

console.log(Array.isArray(arr)); //true

5.3 添加删除数组元素

数组中由进行增加、删除元素的方法

方法名说明返回值
push(参数1...)末尾添加一个或多个元素(注意:会修改原来的数组返回新的长度
pop()删除数组最后一个元素,把数组的长度减少1,没有参数
注意:会修改原来的数组
返回它删除的元素的值
shift()删除数组的第一个元素,数组的长度减少1,没有参数
注意:会修改原来的数组
并返回第一个元素的值
unshift(参数1...)向数组的开头添加一个或多个元素(注意:会修改原来的数组并返回新的长度

**总结:**push、unshift是添加元素的方法。pop和shift是删除元素的方法

        /*
            添加或删除数组中的元素
            1.添加元素
                push(元素1,元素2,...):往数组的末尾添加元素
                unshift(元素1,元素2,...):往数组的开头添加元素
            2.删除元素
                pop():该方法没有参数,删除数组中的最后一个元素;返回的是删除的最后一个元素
                shift():该方法没有参数,删除数组中的第一个元素;返回的是删除的第一个元素
        */
var arr = [1,2,3];
//1.添加元素
// arr.push(4);  //往数组的末尾添加元素
var a1 = arr.push(4,5); //用push方法后,将返回新的数组的长度

console.log(a1);

//arr.unshift(0);
var a2 = arr.unshift(-1,0);
console.log(a2);


//2.删除元素
arr.pop();
// var a3 = arr.pop();
// console.log("被删除的数是:" + a3);

var a4 = arr.shift();
console.log('被删除的是:' + a4);

console.log(arr);
console.log(arr.length);

5.4 数组排序

数组中由对数组本身排序的方法

方法名说明是否修改原数组
reverse()颠倒数组中元素的顺序,无参数该方法会改变原来的数组,返回新的数组
sort()对数组中的元素进行排序该方法会改变原来的数组,返回新的数组
var arr1 = new Array(5,7,3,8,2);

//1.要求升序排序
arr1.sort();

//循环遍历输出
for(var i = 0; i < arr1.length; i++){
    console.log(arr1[i]);
}


var arr2 = new Array('jack','admin','aben','back','rose','hello');
arr2.sort();
for(var i = 0; i < arr2.length; i++){
    console.log(arr2[i]);
}

console.log("*************************************");

//2.翻转
arr2.reverse();
for(var i = 0; i < arr2.length; i++){
    console.log(arr2[i]);
}
冒泡排序
  • 如果传入function (a,b) {return a - b;} ;则为升序排序
  • 如果传入function (a,b) {return b - a;} ;则为降序排序
var arr1 = new Array(5,7,3,8,10,11,2);
arr1.sort(function(a,b){
    // return a - b; //升序
    return b - a;  //降序
});
console.log(arr1);

5.5 数组索引方法

数组中由获取数组指定元素索引的方法

方法名说明返回值
indexOf()数组中查找给定元素的第一个索引如果存在返回索引号,如果不存在返回-1
lastIndexOf()在数组中的最后一个的索引如果存在返回索引号,如果不存在返回-1
var arr = ['red','green','blue','pink','skyblue','blue']
//indexOf()数组中查找给定元素的第一个索引.如果存在返回索引号,如果不存在返回-1
var index1 = arr.indexOf('blue');
console.log(index1); //2

//lastIndexOf()在数组中的最后一个的索引,如果存在返回索引号,如果不存在返回-1
var index2 = arr.lastIndexOf('blue');
console.log(index2); //5

var index3 = arr.indexOf('abc');
console.log(index3); // -1
数组中元素去重复
//目标:把数组中重复的元素去掉
//核心算法:遍历数组,然后拿着旧数组元素取查询新的数组,如果该元素在新数组里面没有出现就添加,有不加
// var arr = ['blue','skyblue','pink','blue']

function unique(arr){
    var newArr = [];//新数组
    //遍历传入的数组
    for(var i = 0; i < arr.length; i++){
        //判断老数组中的元素是否在新数组中有
        if(newArr.indexOf(arr[i]) == -1){ //没有
            newArr.push(arr[i]); //加入到新数组中
        }
    }
    return newArr;//返回
}

var arr = ['c','a','b','d','a','c'];
var newArr = unique(arr);
console.log(newArr);

5.6 其它方法

方法名说明返回值
concat()链接两个或多个数组,不影响原来的数组返回一个新的数组
slice()数组截取 slice(begin,end)返回被截取项目的新的数组
splice()数组删除splice(第几个开始,要删除的个数)返回被删除项目的新的数组
**注意:**这个会影响原来的数组
//1.concat('字符串1','字符串2',...)
var str1 = 'red';
var str2 = 'hello',str3 = 'world';

console.log(str1.concat(str2));
console.log(str1.concat(str2,str3));

//2.substr('截取开始的位置','截取的字符个数')
var str = 'helloworld';
//要求,获取hello
var mystr = str.substr(0,5);
console.log(mystr);

//要求,获取world
var mystr2 = str.substr(5,5);
console.log(mystr2);
//将一个字符串中的字符替换成别的
//replace它不会改变原来的字符串 

var str = 'helloWorld,世界你好!this is my first replace'
//将第一个的o,都替换成z
//str = str.replace('o','z'); //第一个参数是要调换的,第二个参数是替换为

//将素有的o都替换成z
str = str.replaceAll('o','z');

str = str.replace('世界你好','hahaha');
console.log(str);

5.7 数组转字符串

var arr1 = [1,2,3];
//1.toString()  可以将数组转换成字符串
var str1 = arr1.toString();
console.log(str1); //1,2,3

//2.join(连接符号)
var str2 = arr1.join();
console.log(str2); //1,2,3

var str3 = arr1.join('-');
console.log(str3); //1-2-3

var str4 = arr1.join('&');
console.log(str4); //1&2&3

5.8 字符串对象

5.8.1 基本包装类型

为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String、Number 和Boolean

基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了复杂数据类型的属性和方法

var str = 'admin';
console.log(str.length);

按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,但上面代码却可以执行,这是因为js会把基本数据类型包装为复杂数据类型。

//上面的代码默认会经历下面的过程

//1.生成临时变量,把简单类型包装成为复杂类型
var temp = new String("admin");
//2.赋值给我们声明的变量
var str = temp;
//3.销毁临时变量
temp = null;
5.8.2 字符串的不可变

指的是里面的值不可变,虽然看上去可以改变内容,但实际上是内存中的地址发生了变化,内存中重新开辟了一个新的内存空间

5.9根据位置返回字符

字符串通过基本包装类型可以调用部分方法来实现操作字符串,以下是根据位置返回字符

方法名说明使用
charAt(index)返回指定位置(索引)的字符(index表示字符的索引号)str.charAt(0)
charCodeAt(index)获取指定位置处字符ASCⅡ码(index索引号)str.charCodeAt(0);
str[index]获取指定位置处字符HTML5中charAt()等效

在上述方法中,charCodeAt(index)方法返回的是指定位置上字符对应的ASCⅡ码

在这里插入图片描述

查找字符串中某个字符出现的次数

//需求:查找'aaodfosafoad23scx'找o出现的位置及次数
var str = 'aaodfosafoad23scx';
var index = str.indexOf('o');
var num = 0; //o出现的次数

while(index != -1){ //能找到o
    //console.log(index);
    num++; //加1
    index = str.indexOf('o',index + 1);
}

console.log(num);

判断一个字符串’aaodfosafoad23scx’中出现次数最多的字符,并统计其次数


//判断一个字符串'aaodfosafoad23scx'中出现次数最多的字符,并统计其次数
//核心算法:利用charAt()

var str = 'aaodfosafboabdb2b3sbcx';
var o = [];  //用来存储每个字符出现的次数
for(var i = 0; i < str.length; i++){
    var chars = str.charAt(i); //chars是字符串中的一个字符
    if(o[chars]){ //o[chars]得到是属性值
        o[chars]++;
    } else {
        o[chars] = 1;
    }
}
console.log(o);

//遍历o数组
var max = 0;
var ch = '';//次数最多的字符
for(var k in o){
    // console.log(k + '----->' + o[k]);
    if(o[k] > max){
        max = o[k]; //获取最大值
        ch = k;//次数最多的字符
    }
}

console.log('最多的字符:' + ch + ',出现了:' + max);

三、简单和复杂数据类型

1.简单数据类型

简单数据类型(基本数据类型、值类型):在存储时变量中存储的时值本身

包括:string、number、boolean、undefined、null

2.复杂数据类型

复杂数据类型(引用类型):在存储时变量中存储的是地址(引用),通过new关键字创建对象(系统对象、自定义对象)

如:Object、Array、Date等等

3.堆栈

  • 栈(操作系统)

    • 由操作系统自动分配释放函数的参数值,局部变量等,其操作方式类似于数据结构中的栈。
    • 简单数据类型存储在栈里面
    • 在这里插入图片描述
  • 堆(操作系统)

    • 存储复杂数据类型,一般由程序员分配释放,若程序员不释放,由垃圾机制回收

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

使用CSS Flexbox创建简洁时间轴

使用CSS Flexbox创建简洁时间轴 在网页设计中,时间轴是一种常见且有效的方式来展示事件的顺序和进程。本文将介绍如何使用CSS Flexbox创建一个简洁优雅的时间轴,无需复杂的JavaScript代码。 基本HTML结构 首先,我们需要创建基本的HTML结构: html复制<div class"ti…

《CUDA编程》8.共享内存的合理使用

共享内存是 一种可被程序员直接操控的缓存&#xff0c;主要作用有两个&#xff1a; ①减少核函数中对全局内存的访 问次数&#xff0c;实现高效的线程块内部的通信 ②提高全局内存访问的合并度 将通过两个具体的例子阐明共享内存的合理使用&#xff0c;一个数组归约的例子和讨矩…

深入解析“低代码平台”与“零代码平台”:区别与应用场景

随着企业数字化转型的加速&#xff0c;低代码平台与零代码平台作为提升开发效率、降低IT成本的有效工具&#xff0c;正逐渐成为企业软件开发的新趋势。这两种平台虽然都旨在简化应用开发过程&#xff0c;但在功能、适用场景及用户群体上存在着显著差异。 低代码平台&#xff1a…

如何通过Chrome设置保护你的在线隐私

在当今数字时代&#xff0c;保护个人隐私和在线安全变得尤为重要。谷歌浏览器作为全球最受欢迎的网络浏览器之一&#xff0c;提供了多种功能来帮助用户保护自己的在线隐私。本教程将指导你如何通过谷歌浏览器设置来提高你的在线隐私保护水平。&#xff08;本文由https://www.li…

highcharts样式记录

图表设置 const rendChart (min, max) > {Highcharts.setOptions({global: { useUTC: false },});Highcharts.chart(hourly-chart, {chart: {spacingBottom: 0,marginLeft: 53,marginTop: 10,marginBottom: 0,marginRight: 13,style: {fontSize: 0.2rem,color: #363a44,li…

论文笔记 ICLR 2024 MogaNet: Multi-Order Gated Aggregation Network

配图中有2个分支&#xff0c;一个是subtract的输出和缩放因子&#xff08;γs&#xff09;相乘之后的结果&#xff0c;另一个是11卷积输出的结果&#xff0c;这两个分支的输出进行element-wise addition&#xff0c;这两个分支的输出分别代表什么&#xff1f; 为什么”增强局部…

1486. 数组异或操作

1486. 数组异或操作 题目含义&#xff1a;根据整数 n n n 和 s t a r t start start 构造一个数组&#xff0c;数组元素为 n u m s [ i ] 2 i s t a r t , i ∈ [ 0 , n − 1 ] nums[i] 2i start, i \in [0,n-1] nums[i]2istart,i∈[0,n−1]&#xff1b;最后返回这个数组…

电脑 WiFi 上网,开发板和电脑直连,如何才能让开发板也有网络

目录 问题 解决方法 1.设置电脑为WLAN共享模式 2、设置以太网IP 3、设置开发板IP及网关 4、测试 5、开发板重启之后会自动清空 /etc/resolv.conf文件中的内容问题解决 问题 电脑 WiFi 上网&#xff0c;开发板和电脑直连,如何才能让开发板也有网络 解决方法 1.设置电脑…

父子情深!汤姆克鲁斯已经结束英国的奢华生活搬回美国跟儿子团聚

汤姆克鲁斯似乎一直专注于在英国的奢华生活方式。过去五年里&#xff0c;他拍摄了许多电影&#xff0c;还被看到与皇室成员和一线明星一起参加派对。但消息人士称&#xff0c;他可能正在准备搬回美国&#xff0c;以便更接近他的儿子康纳。 在跨过大西洋的五年后&#xff0c;他…

使用electron+vue开发桌面应用

electron是什么 electron由Node.jsChromiumNative APIs构成。你可以理解成&#xff0c;它是一个得到了Node.js和基于不同平台的Native APIs加强的Chromium浏览器&#xff0c;可以用来开发跨平台的桌面级应用。 它的开发主要涉及到两个进程的协作——Main&#xff08;主&#x…

力扣题解(鸡蛋掉落)

887. 鸡蛋掉落 已解答 困难 相关标签 相关企业 给你 k 枚相同的鸡蛋&#xff0c;并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 0 < f < n &#xff0c;任何从 高于 f 的楼层落下的鸡蛋都会碎&#xff0c;从 f 楼层或比它…

JVM可视化监控

1 JConsole 一、介绍 JConsole 是一种 Java 监控和管理控制台工具&#xff0c;可以用于监视 Java 虚拟机&#xff08;JVM&#xff09;的性能和资源利用情况。它提供了一种图形化界面&#xff0c;可以实时查看 JVM 的运行状态、内存使用情况、线程活动、垃圾回收等信息&#xf…

Spring 实现 3 种异步流式接口,干掉接口超时烦恼

大家好&#xff0c;我是小富&#xff5e; 如何处理比较耗时的接口&#xff1f; 这题我熟&#xff0c;直接上异步接口&#xff0c;使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性&#xff0c;处理结果仅返回单个值。在某…

每日OJ题_牛客_小乐乐改数字_模拟_C++_Java

目录 牛客_小乐乐改数字_模拟 题目解析 C代码 Java代码 牛客_小乐乐改数字_模拟 小乐乐改数字_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a; 小乐乐喜欢数字&#xff0c;尤其喜欢0和1。他现在得到了一个数&#xff0c;想把每位的数变成0或1。如果某一位是奇数&#…

Python 工具库每日推荐【PyAutoGUI】

文章目录 引言Python桌面自动化库的重要性今日推荐:PyAutoGUI工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:自动化图像识别和点击案例分析高级特性失败安全机制相对坐标操作扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 Python工…

如何远程查看孩子的电脑使用?

越来越多的家庭拥有了多台电脑和智能设备。家长们往往没有办法时刻陪伴在孩子身边&#xff0c;监督他们的上网行为。而远程控制电脑可以帮助家长在任何时间、任何地点对孩子的电脑进行监控和管理&#xff0c;确保他们能够安全、健康地使用互联网。 通过远程控制软件&#xff0c…

锦锐科技CA51F7系列笔记

1、PWM &#xff08;1&#xff09;芯片一共有6个PWM通道&#xff08;PWM0~PWM5&#xff09; &#xff08;2&#xff09;IRCH时钟&#xff08;IRCH 频率为 16MHz&#xff09; &#xff08;3&#xff09;IRCL时钟&#xff08;IRCL频率为100KHz&#xff09; &#xff08;4&…

JavaScript 命令模式实战:打造可撤销的操作命令

一. 前言 在前端开发中&#xff0c;命令模式&#xff08;Command Pattern&#xff09;作为一种行为型设计模式&#xff0c;可以帮助我们将请求封装成一个对象&#xff0c;从而实现调用对象和执行对象之间的解耦&#xff0c;方便扩展和修改。 本文将和大家分享 JavaScript 中的…

实战子网掩码划分问题

拓扑要求总部有2个业务段&#xff0c;分部也有3个业务 还有互联地址段&#xff0c;还有管理地址段&#xff01;&#xff01;&#xff01;&#xff01; 23117 个段 192.168.1.0/24 怎么划分呢&#xff1f; 1 根据要求划分地址段 192.168.1.0/24 要划分7个网段那就…

linux------缓冲区与C库的原理

前言 一、缓冲区 缓冲区的作用是提高效率&#xff0c;因为将数据写入到设备&#xff0c;是需要调用系统接口的&#xff0c;如果每次写入缓冲区的数据就调用一次系统调用&#xff0c;涉及到系统调用这时操作系统就会介入&#xff0c;用户态转为内核态&#xff0c;这个过程需要时…