当前位置: 首页 > news >正文

day01JS-数据类型-01

1. 浏览器内核

        通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页不同的内核的浏览器里的渲染(显示)效果也可能不同。

  1. blink(webikt 内核的升级)(Google Chrome/ Safari /Opera/ 大部分的国产和手机浏览器)。

  2. Gecko([ˈɡekəʊ])内核(Firefox 火狐)。

  3. Presto ([ˈprestəʊ])欧朋。

  4. Trident (ie浏览器)。

2. 服务器渲染与客户端渲染

2.1 服务器渲染

        客户端(浏览器html+css+js发送消息给服务器要数据)-----> 服务器(去数据库查找相关的数据)-----> 数据库(返回数据)-----> 服务器(拿到数据,并渲染成一个完整的页面返回)-----> 客户端(将接收到的页面进行展示)。

2.2 服务器渲染的缺点

  • 服务器渲染数据压力过大。

  • 每次修改数据都需要服务器重新渲染一个页面,不能局部更新。

  • 不利于团队协作。

2.3 客户端渲染

        客户端(浏览器页面局部需要数据)-----> 服务器(去数据库查找相关的数据)-----> 数据库(返回数据)-----> 服务器(拿到数据,返回给客户端)-----> 客户端(将接收到的数据进行循环渲染)。

2.4客户端渲染的优点

  • 减少了服务器的压力。

  • 能局部更新数据。

  • 有利于团队协作。

3. 为什么学JavaScript

  1. 所有主流浏览器都支持JavaScript。

  2. 目前,全世界大部分网页都使用JavaScript。

  3. 他可以让网页呈现各种动态效果。

  4. 作为一个Web开发工程师,如果你想提供漂亮的网页、令客户满意的上网体验,JavaScript是必不可少的工具。

4. JS的构成(背)

  1. ECMAScript:语言的核心(语法)。

  2. DOM(文档对象模型):Document Object Model,提供了一系列的应用程序接口(api),供我们开发者对DOM的添加删除修改等(说白了就是操作标签的)。

  3. BOM(浏览器对象模型):Browser Object Model,客户端和浏览器端窗口操作的基础(操作浏览器窗口的),可以使用BOM对浏览器窗口进行访问和操作,比如移动窗口位置、返回历史记录等等,但是BOM没有一个成型的规范,但是所有的浏览器都支持。

5. 什么是JavaScript

5.1 简介

JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。

5.2 JS的3种引入方式

5.2.1 行内JS

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><div id="box"></div><!-- 行内式:通过事件引入(有限制性) --><div onclick="alert('月薪过万')">点击</div></body>
</html>

5.2.2 内部JS

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><script>alert('月薪过万')</script></body>
</html>

5.2.3 外部JS

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><script src="Demo-01.js"></script></body>
</html>

6. JavaScript命名规范

  • 区分大小写

  • 名字以数字字母下划线$ 符号组成,但是不能以数字开头)。

  • 不能是关键字或者保留字,关键字,就是代表特殊含义和功能的名字。

  • 命名要有语义化,可以遵循:

1.小驼峰命名法(驼峰命名法):首单词的首字母小写,其余单词的首字母大写,例如:studentMessage

2.大驼峰命名法(又叫帕斯卡命名法):跟小驼峰命名法类似,只不过是每个单词的首字母都大写,例如:StudentMessage。

3.下划线命名法:要求单词与单词之间通过下划线连接即可。例如:my_name

7. JS的基础知识

7.1 注释

单行注释: //

多行注释 : /*多行注释*/

7.2 语句

        js的语句是以为结尾的,虽然不一定是必须的,但是我们建议不省略,代码块结束以后可以省略。

7.3 变量

7.3.1 简介

        变量相当于容器就是容器中盛放的内容,变量名字就是贴在容器上的标签,通过这个标签可以找到变量,读取使用它。

​         在ECMAScript中,变量是松散类型的(弱类型、动态类型),也就是一个变量可以保存任何类型的值。

7.3.2 定义一个变量并使用

声明变量的关键字var/let

1. 声明一个变量未赋值,默认是undefined(未定义)

语法1:var/let 变量名;

2. 声明一个变量并赋值。

语法2:var/let 变量名 = 数据;

案例:

var name="xiaoxiaohui"  (把等号后面的值赋给了前面定义的变量)

3. 还可以给多个变量同时赋值,或者是同时定义,使用英文逗号隔开。

var sex="女",age="18";let sex="女",age="18";

4. 可以给同一个变量多次赋值或者多次定义

var age=18;
age=19;var age=20;
console.log(age);

7.3.3 var与let的区别

var关键字可以重复声明同一个变量let关键字不可以重复声明同一个变量

7.4 常量

1. 声明一个变量并赋初始值。

语法:const 变量名 = 数据;

2. 常量的特点:

  • 必须赋初始值

  • const 不能重复声明同一个变量。

  • 赋初始值不可以被修改

8. JS的数据类型

8.1 基础数据类型(原始值类型)(7个)

  • Number 数值 :(数字,整数,小数,NaN(Not a Number))。

  • String 字符串:可以使用单引号双引号反引号(字符串模板)表示字符串。

  • Boolean 布尔: true(真),false(假)。

  • Null (空)

  • Undefined (未定义)

  • Symbol(唯一值,es6新增)

  • BigInt(大数,es6新增)

8.2 引用数据类型(11个)

  • Array

  • Object

  • Function

  • RegExp(正则表达式)

  • Math

  • Date

  • ..........

9. 基础数据类型详解

9.1 number 数值类型

1. number 数值类型运行原理:把十进制数据转为二进制数据,二进制数据再转十进制数据。

2.  number 数值类型包括:整型 (整数)浮点型 (小数) 、特殊的数值 NaN。

注意!!!

       浮点型 (小数)的计算要注意浮点的精度问题(十进制小数转为二进制小数,大部分无法精确转换;整数不存在这个问题)。

0.1 + 0.2 = 0.30000....4

3. JS中数值的范围

        JS 中的Number数据类型只能安全地表示-9007199254740991 (-(2^53-1))9007199254740991(2^53-1)之间的整数,任何超出此范围的整数值都可能失去精度

4. 特殊的数值 NaN 的特点

  • NaN是number类型,是一个数值,表示非有效数字

  • 特点1:NaN与任何数进行任何运算结果都是NaN

  • 特点2NaN与任何数都不相等,包括自己

5. 数值相关的运算符

+ :加
- :减
* :乘
/ :除 
% :取余

6.  相关的函数

        isNaN() :验证一下n是不是有效数字,如果是有效数字,则返回false;如果不是有效数字,则返回true

        isNaN()函数的底层运行逻辑:先把任何类型转化为数字类型Number()再使用isNaN()函数判断

<body><script>console.log(isNaN(1)); //falseconsole.log(isNaN(NaN));//trueconsole.log(isNaN('AA'));//true//"12.5"---Number("12.5")---12.5  isNaN(12.5) falseconsole.log(isNaN('12.5'));//false//Number("12.5px")---NaN  isNaN(NaN)  trueconsole.log(isNaN('12.5px'));//true//Number([])---0   falseconsole.log(isNaN([]));//false//Number([10])---10  falseconsole.log(isNaN([10]));//false//Number([10, 20])---NaN  trueconsole.log(isNaN([10, 20]));//true// Number({})  NaN  trueconsole.log(isNaN({}));//true//Number(null)---0  isNaN(0) falseconsole.log(isNaN(null));//false//Number(undefined)--NaN trueconsole.log(isNaN(undefined));//trueconsole.log(isNaN(Symbol(1)));//报错</script>
</body>

注意!!!!几个特殊值

NaN 转为数字类型值为NaN --- ture

null转为数字类型值为0 --- false

[] 转为数字类型值为0 --- false

[10,30] 转为数字类型值为NaN --- ture

{} 转为数字类型值为NaN--- true

undefined转为数字类型值为NaN --- true

Symbol(1) --- 报错

        Number():Number是JS内置的转换方法,可以把其它数据类型“强制”转换为数字类型

        Number()的底层实现逻辑:把其它数据类型先转为字符串类型,再转为数字类型

转换规则:
1.把字符串转换为数字:一但字符串中出现非有效数字字符(只要不是数字),则结果为NaN。
2.只有都是有效数字字符,才能转换为具体的数字。
3.把布尔转换为数字:true转换为1  false转换为0。
4.把null转换为数字:null转换为0 undefined转换为NaN。 
5.不能把Symbol类型转换为数字,否则会报错。

 案例:

<body><script>console.log(Number('111'));//111console.log(Number(true));//1console.log(Number(false));//0console.log(Number(null));//0console.log(Number(undefined));//NaNconsole.log(Number(Symbol());//报错</script>
</body>

练习题:

console.log(Number('12')); //12
console.log(Number('12.5'));//12.5
console.log(Number('12px'));//NaN
console.log(Number('12.5.0'));//NaN
console.log(Number(true));//1
console.log(Number(false));//0
console.log(Number(null));//0
console.log(Number(undefined));//NaN
console.log(Number(function func() { }));//NaN
console.log(Number(Symbol(13)));//报错

        parseInt()/parseFloat():把其它数据类型转换为number类型

        parseInt():其他类型转化为number,整数部分

        parseFloat():其他类型转化为number,整数+小数部分

        ​ 从字符串最左边开始查找,把找到的有效数字字符转换为数字,遇到不是数字的时候停止。如果找不出来,就是NaN

console.log(Number('12px'));//NaN
console.log(parseInt('12px'));//12
console.log(parseInt('12px24'));//12
console.log(parseInt('width:12px'));//NaN
console.log(parseInt('12.5px'));//12
console.log(parseFloat('12.5px'));//12.5
console.log(parseFloat('12px'));//12console.log(Number(true)); //1
console.log(parseInt(true));//NaN
console.log(parseInt('true'));//NaN
console.log(parseInt(NaN));//NaN
console.log(Number(null));//0
console.log(parseInt(null));//NaN
console.log(isNaN(Number(parseInt("0.8"))));//falseconsole.log(Number(''));//0
console.log(parseInt('')); //NaN

        toFixed( ):保留小数点后面N位(最后的结果是一个字符串),要四舍五入

var num = 12.349594354;
//装箱
console.log(num.toFixed(2)); //四舍五入
console.log(num.toFixed(1)); //四舍五入
console.log(num.toFixed(3)); //四舍五入

        Number.MAX_SAFE_INTEGER :JS能够有效识别的最大整数。

console.log(Number.MAX_SAFE_INTEGER); //=>9007199254740991 
最大安全数(JS能够有效识别的最大整数)
console.log(9007199254740992 == 9007199254740993); //=>true 
应该是不一样的,但是超过了最大数值,JS无法精准计算

9.2 值类型string 字符串

  1. 定义字符串 :在JS中用 单引号/双引号/反引号 包起来的都是字符串。

  2. string 字符串类型的特点:

  • 字符串有长度length

  • 字符串有索引,但没有负索引,虽然能够使用负索引不报错,但是取不到值,默认为undefined

  • 数值类型的字符串没有方法

//没有负索引
var str = "10ased";
console.log(str.length); //length 求长度
console.log(str[2]); //a  [index] 求索引(下标) 0---X
console.log(str[5]); //d
console.log(str[-1]); //undefined  索引取不到值,默认 undefined
console.log(str[10]); //undefined

3. 相关函数

String( ):将其他类型转化为字符串。

console.log(String(100)); //"100"
console.log(String(null)); //"null"
console.log(String(undefined)); //"undefined"
console.log(String(true)); //"true"
console.log(String(false)); //"false"
console.log(String(Symbol())); //"Symbol()"

9.3 boolean 布尔类型

  1. 布尔值表示真或假 ,开或关,是或否。有 true 和 false 两个值
  2. 数字转为布尔值0转为false,NaN转为false;其他都是true。
  3. 字符串转为布尔值空字符串转为false, 其他都是true。

  4. null 转为 flase

  5. undefined 转为 false

总结:除了0   “”没有任何内容的引号   null   undefined   NaN为false其他都是true

6. 相关函数

        Boolean():将其他类型转化为布尔类型。

console.log(Boolean(0)); //false
console.log(Boolean("")); //false
console.log(Boolean(null)); //false
console.log(Boolean(NaN)); //false
console.log(Boolean(undefined)); //false
console.log(Boolean(" ")); //true
console.log(Boolean([])); //true
console.log(Boolean({})); //true

        ! 非(取反 ): 间接转化为布尔类型。

console.log(!"11"); // false  "11"--真  !"11"---假
console.log(!null); //true     null--假  !null--真
console.log(!!null); //false     null--假  !null--真  !!null--假

9.4 null 和 undefined

null表示没有,即该处不应该有值

  1. 在我们不确定一个变量具体数据类型的时候,我们可以先赋值为null,后面可以再给具体的值。
  2. 作为对象原型链的终点。
  3. 获取 DOM 获取不到的时候。

undefined表示缺少值,即此处应该有值,但没有定义:

  1. 定义了变量没有给值,显示 undefined。
  2. 定义了形参,没有传实参,显示 undefined。
  3. 对象属性名不存在时,显示 undefined。
  4. 函数没有写返回值,即没有写return,拿到的是 undefined。
  5. 写了return,但没有赋值,拿到的是 undefined。
var str = "hello";
console.log(str[10]); //undefined
var arr = [10, 20, 30];
console.log(arr);
console.log(arr[100]); //undefined
var arr = null; //未来要存放引用类型的值,释放内存

9.5 Symbol类型

//es6 新增
var s1 = Symbol("a");
console.log(s1);
var s2 = Symbol("a");
console.log(s2);
console.log(s1 === s2); //false  唯一   可以用作对象的key,唯一的key

9.6 BigInt类型

        BigInt类型:管理超过安全数值的数字。

        ES6中提供了一个新的数据类型 BigInt:管理超过安全数值的数字。

console.log(BigInt(9007199254740992), BigInt(9007199254740993));

10 .引用数据类型详解

10.1 数组类型

1. 数组类型:可以放任何数据类型。

2. 特点:有长度length,有索引,有方法

3. 数组的两种写法:

写法一:通过new的方式
var/let  变量名 =  new Array(数据1,数据2,...);写法二:通过[]字面量的方式,[]是数组字面量
var/let  变量名 = [数据1,数据2,...];
var arr1 = new Array(10, 20, 30);
console.log(arr1);
console.log(arr1[0]); //10
console.log(arr1.length); //3
//在数组的尾部添加一个值
arr1.push("hello");
console.log(arr1);var arr2 = [100, 200, 300, 400];
console.log(arr2);

10.2 String引用数据类型

1. String字符串类型既是值类型也是引用数据类型

语法:var/let 变量名 = new String("变量值");
​​​​​​​var str2 = new String("apple");
console.log(str2);

2. 值类型的string与引用类型的String的区别:

  • 值类型的string有长度length,有索引,但是没有方法,而引用类型的string是有方法的

  • 声明的方法不同值类型的string的声明语法为var/let 变量名 = 变量值;,而引用类型的string的声明语法是var/let 变量名 = new String("变量值");

3. 为什么值类型的string会有长度length和索引?

是因为装箱

4. 装箱与拆箱的概念:

  • 装箱:把值类型---转换成---引用类型用---转换成---值类型
  • 拆箱:把引用类型---转换成---值类型---转换成---引用类型

10.3 Number引用数据类型

1.Number数字类型既是值类型也是引用数据类型

语法:var/let 变量名 = new Number(变量值);

2. 值类型的number与引用类型的Number的区别:

  • 声明的方法不同。

  • 值类型的number没有方法,引用类型的Number有方法。

10.4 Object引用数据类型

10.4.1 创建Object对象

        Object引用数据类型把多组键值对大括号{}包起来 ,并且属性与属性之间“英文逗号”进行分割。

声明语法:var/let 对象名 = {属性名1:属性值,属性名2:属性值......}使用属性的语法:对象名['key'] 或 对象名.key
 var obj = {name: "lili", //"name":"lili"age: 18,"for one": true,};console.log(obj);console.log(obj["name"]); //"lili"console.log(obj.age); //18console.log(obj["for one"]); //trueconsole.log(obj.school); // undefined

注意!!!

1. 属性名(key)不是使用string字符串类型,而是其它基础类型属性名要使用[ ]包裹起来,会自动其它基础类型转为字符串

2. 属性名(key)的类型只能是string字符串类型、Symbol()

var obj = {name : "lili",age : 18,[Symbol()] : 100,[true]:true
}

3.虽然Symbol()可以使用[ ]包裹起来作为,但是无法访问到数据因为Symbol()是唯一的,下面的写法相当于声明了两个Symbol(),所以取不到值,默认是undefined的。如果使用常量Symbol()装起来,就可以访问到同一个Symbol()

<body><script>var obj = {name: "lili",age: 18,[Symbol()]: 100};console.log(obj[Symbol()]);//undefined</script>
</body>-------------------------------------------
<body><script>const sym = Symbol('10');var obj = {name: "lili",age: 18,[sym]: 100};console.log(obj[sym]);//100</script>
</body>

4. 对象的属性名不能是引用数据类型值 。

        基于对象[属性名] 的方式操作,需要保证属性名是一个值(字符串/数字/布尔等都可以),如果不是值而是一个变量,它会把变量存储的值作为对象的属性名进行操作

​         基于对象.属性名的方式操作,属性名就是点后面的。

let n = {x: 100
};
let m = [100, 200];
let obj = {};
obj[n] = "高高"; 
obj[m] = "培训"; 
console.log(obj); 

10.4.2 属性名和属性值

  • 属性名:就是用来描述某种特征或者特点的名字,(又被称作键,key)。

  • 属性值:就是这个特征的具体值(又被称作值,value)。

  • 合称键值对。

基本操作:增、删、改、查。

10.4.3 获取属性值的方法

        对象的属性名一般都是字符串格式(还可以是数字格式),属性值可以是任意类型数据

方法一:对象.属性名;

方法二:对象['属性名']; 对象[“属性名”];  :如果key的类型是字符串,使用该方法必须加“ ”,不然是获取不到值的。默认为undefined的。

方法三:如果key的类型变量或常量,获取语法:对象[属性名];

<body><script>const sym = Symbol('10');var obj = {name: "lili",age: 18,[sym]: 100};console.log(obj.age);//18console.log(obj.name);//liliconsole.log(obj['name']);//liliconsole.log(obj[name]);//undefinedconsole.log(obj[sym]);//100</script>
</body>

注意!!!!

1.如果对象里面没有这个属性名,得到的值就是“undefined”。

2.如果key的类型特殊类型(for age)数字类型(number)Symbol()变量必须使用[ ]进行访问,点(.)只能访问字符串类型的数据。

10.4.4 增、改

        对象的属性名(键)不允许重复的,之前没有这个属性则为新增,之前有这个属性,则是修改对应的属性值。一般新增一项的key都是string类型

语法:方法一:对象[“属性名”] = 属性值;方法二:对象.属性名 = 属性值;
var obj={"name":"lili","age":18
}obj.name="dawei"; ====>修改
obj.sex="男"; =====> 增加
obj.true = 180; =====>这种增加会把true转为字符串"true"
console.log(obj)

 10.4.5 删除

彻底删除语法: delete 对象名["属性名"]

普通删除语法: 只是让对象中的属性值为空, 对象名["属性名"] = null;

var obj={"name":"lili","age":18
}
//彻底删除
delete obj["age"];
//普通删除
obj.name=null;
console.log(obj);

思考题:

var obj={name:"lili",age:18
}
var name="zhufengpeixun"; 
console.log(obj.name);//lili
console.log(obj["name"]);//lili
//obj[name] === obj["zhufengpeixun"] ---对象中没有这个属性名 ----/undefiend
console.log(obj[name]);//undefiend

相关文章:

day01JS-数据类型-01

1. 浏览器内核 通常所谓的浏览器内核也就是浏览器所采用的渲染引擎&#xff0c;渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同&#xff0c;因此同一网页在不同的内核的浏览器里的渲染&#xff08;显示&#xff09;…...

MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74)

专栏往期文章,包含本章 MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 手动实现一种基于高度覆盖值的建筑物点云提取方法,适用于高大的城市建筑物,比只利用高度提取建筑物的方法更加稳定和具有价值,主要…...

git的下载与安装(Windows)

Git是一个开源的分布式版本控制系统&#xff08;Distributed Version Control System&#xff0c;简称DVCS&#xff09;&#xff0c;它以其高效、灵活和强大的功能&#xff0c;在现代软件开发中扮演着至关重要的角色。 git官网&#xff1a;Git (git-scm.com) 1.进入git官网 2…...

腾讯云AI代码助手 —— 编程新体验,智能编码新纪元

阅读导航 引言一、开发环境介绍1. 支持的编程语言2. 支持的集成开发环境&#xff08;IDE&#xff09; 二、腾讯云AI代码助手使用实例1. 开发环境配置2. 代码补全功能使用&#x1f4bb;自动生成单句代码&#x1f4bb;自动生成整个代码块 3. 技术对话3. 规范/修复错误代码4. 智能…...

使用 ESP32 和 TFT 屏幕显示实时天气信息 —— 基于 OpenWeatherMap API

实时监测环境数据是一个非常常见的应用场景&#xff0c;例如气象站、智能家居等。这篇博客将带你使用 ESP32 微控制器和一个 TFT 屏幕&#xff0c;实时显示当前城市的天气信息。通过 OpenWeatherMap API&#xff0c;我们能够获取诸如温度、天气情况以及经纬度等详细的天气数据&…...

高阶数据结构——B树

1. 常见的搜索结构 以上结构适合用于数据量相对不是很大&#xff0c;能够一次性存放在内存中&#xff0c;进行数据查找的场景。如果数据量很大&#xff0c;比如有100G数据&#xff0c;无法一次放进内存中&#xff0c;那就只能放在磁盘上了&#xff0c;如果放在磁盘上&#xff0…...

Vue2中watch与Vue3中watch对比和踩坑

上一节说到了 computed计算属性对比 &#xff0c;虽然计算属性在大多数情况下更合适&#xff0c;但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法&#xff0c;来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时&#…...

在Java程序中执行Linux命令

在Java中执行Linux命令通常涉及到使用Java的运行时类 (java.lang.Runtime) 或者 ProcessBuilder 类来启动一个外部进程 1. 使用 Runtime.exec() Runtime.exec() 方法可以用来执行一个外部程序。它返回一个 Process 对象&#xff0c;可以通过这个对象与外部程序交互&#xff0…...

微信小程序在不同移动设备上的差异导致原因

在写小程序的时候用了rpx自适应单位&#xff0c;但是还是出现了在不同机型上布局不统一的问题&#xff0c;在此记录一下在首页做一个输入框&#xff0c;在测试的时候&#xff0c;这个输入框在不同的机型上到处跑&#xff0c;后来排查了很久都不知道为什么会这样 解决办法是后 …...

快速体验fastllm安装部署并支持AMD ROCm推理加速

序言 fastllm是纯c实现&#xff0c;无第三方依赖的高性能大模型推理库。 本文以国产海光DCU为例&#xff0c;在AMD ROCm平台下编译部署fastllm以实现LLMs模型推理加速。 测试平台&#xff1a;曙光超算互联网平台SCNet GPU/DCU&#xff1a;异构加速卡AI 显存64GB PCIE&#…...

报错:java: javacTask: 源发行版 8 需要目标发行版 1.8

程序报错&#xff1a; Executing pre-compile tasks... Loading Ant configuration... Running Ant tasks... Running before tasks Checking sources Copying resources... [gulimail-coupon] Copying resources... [gulimail-common] Parsing java… [gulimail-common] java…...

【数据结构篇】~单链表(附源码)

【数据结构篇】~链表 链表前言链表的实现1.头文件2.源文件 链表前言 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 1、链式机构在逻辑上是连续的&#xff0c;在物理结构上不一定连续​ 2、结点一般是从…...

旋转图像(LeetCode)

题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 解题 def rotate(matrix):n len(matrix)# 矩阵转置for i in range(n):for…...

入门 - vue中v-model的实现原理和完整用法详解

v-model介绍 v-model是vue的双向绑定的指令&#xff0c;能将页面上控件输入的值同步更新到相关绑定的data属性&#xff0c;也会在更新data绑定属性时候&#xff0c;更新页面上输入控件的值。在view层&#xff0c;model层相互需要数据交互&#xff0c;即可使用v-model。 双向绑…...

【区块链+金融服务】港融区域股权服务平台 | FISCO BCOS应用案例

中国证监会在 2020 年启动了区块链建设试点工作&#xff0c;提出建设基于区块链的场外市场登记系统和交易报告库&#xff0c;利 用区块链去中心化、不易篡改、安全稳定等技术特点&#xff0c;构建区域性股权市场数字化信任机制&#xff0c;为区域性股权市场 提供基础支撑设施。…...

Nginx反向代理和前后端分离项目打包部署

Nginx反向代理 Nginx的定位&#xff1a;主要用于做反向代理&#xff0c;一般都是用它来做前端页面的服务器&#xff0c;动态资源代理到后端服务器。这样做的好处是可以避免跨域请求带来的不便。 使用Nginx主要是对Nginx中的nginx.conf文件进行配置&#xff1a; 虚拟主机配置…...

Spring 中ApplicationContext

ApplicationContext 是 Spring 框架中最重要的接口之一&#xff0c;用于提供 Spring IoC 容器的功能。它是一个比 BeanFactory 更高级的容器&#xff0c;负责管理 Spring bean 的生命周期&#xff0c;同时提供对各种企业服务的集成&#xff0c;例如事件传播、国际化、弱引用等。…...

python之时间 datetime、date、time、timedelta、dateutil

在 Python 中&#xff0c;处理日期和时间的常用库是 datetime。此外&#xff0c;还有一些第三方库如 pytz 和 dateutil 可以帮助处理时区和日期解析。 1. 使用 datetime 模块 导入模块 from datetime import datetime, date, time, timedelta获取当前日期和时间 now datet…...

【机器学习第11章——特征选择与稀疏学习】

机器学习第11章——特征选择与稀疏学习 11.特征选择与稀疏学习11.1子集搜索与评价子集搜索子集评价 11.2 过滤式选择11.3 包裹式选择11.4 嵌入式选择11.5 稀疏表示与字典学习稀疏表示字典学习 11.6 压缩感知 11.特征选择与稀疏学习 11.1子集搜索与评价 特征&#xff1a;描述物…...

LeetCode-day43-3137. K 周期字符串需要的最少操作次数

LeetCode-day43-3137. K 周期字符串需要的最少操作次数 题目描述示例示例1&#xff1a;示例2&#xff1a; 思路代码 题目描述 给你一个长度为 n 的字符串 word 和一个整数 k &#xff0c;其中 k 是 n 的因数。 在一次操作中&#xff0c;你可以选择任意两个下标 i 和 j&#x…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...