【JavaScript】JS语法入门到实战

文章目录

  • 一、初识JavaScript
    • 1. 什么是JavaScript?
    • 2. JavaScript 和 HTML 和 CSS 之间的关系
    • 3. JavaScript的运行过程
    • 4. JavaScript的组成
  • 二、JavaScript的书写形式
  • 三、变量
    • 1. 输入输出
    • 2. 变量的使用
    • 3. 数据类型
  • 四、运算符
  • 五、分支和循环语句
    • 1. 分支语句
    • 2. 循环语句
  • 六、数组
  • 七、函数
  • 八、对象
    • 1. JS创建对象
    • 2. JavaScript 的对象和 Java 的对象的区别
    • 3. class创建类 | static关键字的理解 | 继承
  • 九、总结


一、初识JavaScript

1. 什么是JavaScript?

JavaScript (简称 JS)

  • 是世界上最流行的编程语言之一
  • 是一个脚本语言, 通过解释器运行
  • 主要在客户端(浏览器)上运行, 现在也可以基于 node.js 在服务器端运行

JavaScript 最初只是为了完成简单的表单验证(验证数据合法性),结果后来不小心就火了。当前 JavaScript 已经成为了一个通用的编程语言。

💕 JavaScript能做的事情:

  • 网页开发(更复杂的特效和用户交互)
  • 网页游戏开发
  • 服务器开发(node.js)
  • 桌面程序开发(Electron, VSCode 就是这么来的)
  • 手机 app 开发

2. JavaScript 和 HTML 和 CSS 之间的关系

在这里插入图片描述

  • HTML: 网页的结构(骨)
  • CSS: 网页的表现(皮)
  • JavaScript: 网页的行为(魂)

3. JavaScript的运行过程

JS通常是运行在浏览器上的。

  • 编写的代码是保存在文件中的, 也就是存储在硬盘(外存上).
  • 双击 .html 文件浏览器(应用程序)就会读取文件, 把文件内容加载到内存中(数据流向: 硬盘 => 内存)
  • 浏览器会解析用户编写的代码, 把代码翻译成二进制的, 能让计算机识别的指令(解释器的工作)
  • 得到的二进制指令会被 CPU 加载并执行(数据流向: 内存 => CPU)

在这里插入图片描述

💕 浏览器分成渲染引擎 + JS 引擎

  • 渲染引擎: 解析 html + CSS, 俗称 “内核”
  • JS 引擎: 也就是 JS 解释器. 典型的就是 Chrome 中内置的 V8

JS 引擎逐行读取 JS 代码内容, 然后解析成二进制指令, 再执行。


4. JavaScript的组成

  • ECMAScript(简称 ES): JavaScript 语法
  • DOM: 页面文档对象模型, 对页面中的元素进行操作
  • BOM: 浏览器对象模型, 对浏览器窗口进行操作

光有 JS 语法, 只能写一些基础的逻辑流程,但是要想完成更复杂的任务, 完成和浏览器以及页面的交互, 那么久需要 DOM APIBOM API

这主要指在浏览器端运行的JS,如果是运行在服务端的JS, 则需要使用 node.js 的 API,就不太需要关注 DOM 和 BOM

💕 重要概念: ECMAScript

这是一套 “标准”, 无论是啥样的 JS 引擎都要遵守这个标准来实现。

啥叫标准? 车同轨, 书同文. 秦始皇最大的贡献之一, 就是制定了一套标准,三流公司做产品, 一流公司做标准


二、JavaScript的书写形式

💕 行内式

直接嵌入到 html 元素内部

<input type="button" value="这是一个按钮" onclick="alert('哈哈哈')">

当我们按下按钮后,会有如下效果:

在这里插入图片描述

💕 内嵌式

写到 script 标签中

<script>alert("haha");
</script>

在这里插入图片描述

💕 外部式

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

在这里插入图片描述
在这里插入图片描述

💕 第一个JS程序

在这里插入图片描述

注释:

  • 单行注释 // [建议使用]
  • 多行注释 /* */

使用 ctrl + / 切换注释,多行注释不能嵌套。形如这种代码就会报错:

/*
/*
我是多行注释
我是多行注释
我是多行注释
*/
*/

三、变量

1. 输入输出

💕 输入:prompt

弹出一个输入框,提示输入自己的姓名。

<script>prompt("请输入您的姓名: ");    
</script>

在这里插入图片描述

💕 输出: alert

<script>alert("hello 你好");
</script>

在这里插入图片描述

💕 输出: console.log:向控制台打印一个日志,供程序员看。

<script>console.log("hello 你好");
</script>

在这里插入图片描述

注意:这样的输出一般不是给普通用户看的, 而是程序员来看的

重要概念: 日志

日志是程序员调试程序的重要手段

去医院看病, 医生会让患者做各种检查, 血常规, 尿常规, B超, CT等… 此时得到一堆检测结果. 这些结果普通人看不懂, 但是医生能看懂, 并且医生要通过这些信息来诊断病情,这些检测结果就是医生的 “日志”

PS: 相比于医生来说, 程序猿多一个终极大招, “重启下试试”。

重要概念: .

console 是一个 js 中的 “对象”,. 表示取对象中的某个属性或者方法. 可以直观理解成 “的”。console.log 就可以理解成: 使用 “控制台” 对象 “的” log 方法。


2. 变量的使用

💕 创建变量(变量定义/变量声明/变量初始化)

<script>var name = "chenjiale";console.log(name)let age = "23"
</script>

这里定义变量时我们不需要指定数据类型,使用var或者let即可,那我们该如何选择呢?

let比var出现的晚,意味着避免了var这块定义变量的时候的一些缺陷,如果使用let定义变量,此时变量的生命周期、作用域基本和Java类似。

JS对于数字类型只有一种类型:数值类型。

💕 强类型变量和弱类型变量

强类型变量意味着不同类型的变量之间进行赋值的时候,需要一定的手段(强制类型转换)。弱类型变量在不同类型变量之间进行赋值的时候,可以直接赋值。

<script>a = 1console.log(a)b = 'b'b = a;console.log(b);
</script>

在这里插入图片描述
这里我们可以看到JS中的变量是弱类型变量。

💕 动态类型变量和静态类型变量

动态类型变量意味着代码在执行过程中,变量的类型可以随时发生变化。静态类型变量意味着变量定义的时候是什么类型,在运行过程中就是什么类型。

<script>a = 1console.log(typeof(a))b = 'b'a = bconsole.log(typeof(a));
</script>

在这里插入图片描述

随着程序运行, 变量的类型发生了改变,说明该变量类型是动态类型变量。


3. 数据类型

JS 中内置的几种类型

  • number: 数字,不区分整数和小数
  • boolean: true 真,false 假
  • string: 字符串类型
  • undefined: 只有唯一的值 undefined 表示未定义的值.
  • null: 只有唯一的值 null,表示空值

💕 number 数字类型

JS 中不区分整数和浮点数, 统一都使用 “数字类型” 来表示。

<script>let a = 10;console.log(typeof(a))a = a / 3console.log(a)console.log(typeof(a))
</script>

在这里插入图片描述

这里我们可以看到,整数和小数在JS中都用number类型表示。

数字进制表示

计算机中都是使用二进制来表示数据, 而人平时都是使用十进制,因为二进制在使用过程中不太方便(01太多会看花眼),所以在日常使用二进制数字时往往使用 八进制十六进制 来表示二进制数字.

注意:

  • 一个八进制数字对应三个二进制数字
  • 一个十六进制数字对应四个二进制数字. (两个十六进制数字就是一个字节)
  • 各种进制之间的转换, 不需要手工计算, 直接使用计算器即可

特殊的数字值

  • Infinity: 无穷大, 大于任何数字. 表示数字已经超过了 JS 能表示的范围.
  • -Infinity: 负无穷大, 小于任何数字. 表示数字已经超过了 JS 能表示的范围.
  • NaN: 表示当前的结果不是一个数字.
<script>let a = 10;console.log(a/0)console.log(-a/0)console.log('hehe' - 10)
</script>

在这里插入图片描述
注意:

  1. 负无穷大 和 无穷小 不是一回事. 无穷小指无限趋近与 0, 值为 1 / Infinity
  2. ‘hehe’ + 10 得到的不是 NaN, 而是 ‘hehe10’, 会把数字隐式转成字符串, 再进行字符串拼接。
  3. 可以使用 isNaN 函数判定是不是一个非数字。
console.log(isNaN(10)); // false
console.log(isNaN('hehe' - 10)); // true

💕 string 字符串类型

基本规则:字符串字面值需要使用引号引起来, 单引号双引号均可

<script>let a = '哈哈哈'a = "JS"a = "哈哈哈'JS'"a  = '哈哈哈"JS"'alert(a)
</script>

在这里插入图片描述

如果字符串中本来已经包含引号咋办?

var msg = "My name is "zhangsan""; // 出错
var msg = "My name is \"zhangsan\""; // 正确, 使用转义字符. \" 来表示字符串内部的引
号.
var msg = "My name is 'zhangsan'"; // 正确, 搭配使用单双引号
var msg = 'My name is "zhangsan"'; // 正确, 搭配使用单双引号

转义字符

有些字符不方便直接输入, 于是要通过一些特殊方式来表示.

  • \n
  • \\
  • \'
  • \"
  • \t

求长度: 使用 String 的 length 属性即可

<script>let a = "哈哈哈"alert(a.length)
</script>

在这里插入图片描述

字符串拼接:使用 + 进行拼接

<script>a = "程序人"console.log("Hello" + a)console.log("10" + 10) // 这里和Java中类似
</script>

在这里插入图片描述


💕 boolean 布尔类型

boolean类型表示 “真” 和 “假”,boolean 原本是数学中的概念 (布尔代数),在计算机中 boolean 意义重大,往往要搭配条件/循环完成逻辑判断。

JS中的boolean类型和C语言中的bool类型类似,参与运算时,true表示1,false表示0

<script>let a = falseconsole.log(typeof(a))a = a + 1console.log("a的值等于" + a + ",a的类型" + typeof(a))
</script>

在这里插入图片描述


💕 undefined 未定义数据类型

如果一个变量没有被初始化过,结果就是 undefined,是 undefined 类型。

<script>let a;console.log(a)console.log(a + "20")console.log(a + 1)console.log(a + true)
</script>

在这里插入图片描述


💕 null 空值类型

<script>let a;let b = null;console.log(a + 10);// 运行结果NaNconsole.log(b + 10);// 运行结果是10
</script>

在这里插入图片描述


四、运算符

JavaScript 中的运算符和 Java 用法基本相同. 此处不做详细介绍了。

💕 算术运算符

  • +
  • -
  • *
  • /

💕 赋值运算符 & 复合赋值运算符

  • =
  • +=
  • -=
  • *=
  • /=
  • %=

💕 自增自减运算符

  • ++: 自增1
  • --: 自减1

💕 比较运算符

  • <
  • <=
  • >=
  • == 比较相等(会进行隐式类型转换)
  • !=
  • === 比较相等(不会进行隐式类型转换)
  • !==
<script>let a = 10;let b = "10";alert(a == b)
</script>

在这里插入图片描述

<script>let a = 10;let b = "10";alert(a === b)
</script>

在这里插入图片描述

💕 逻辑运算符

用于计算多个 boolean 表达式的值.

  • && 与: 一假则假
  • || 或: 一真则真
  • !

💕 移位运算

  • << 左移
  • >> 有符号右移(算术右移)
  • >>> 无符号右移(逻辑右移)

五、分支和循环语句

1. 分支语句

💕 if语句

// 形式1
if (条件) {语句
}// 形式2
if (条件) {语句1
} else {语句2
}// 形式3
if (条件1) {语句1
} else if (条件2) {语句2
} else if .... {语句...
} else {语句N
}

案例:

<script>let num = prompt("请输入数字")if(num % 2 == 0) {alert("这个数字是偶数")} else if(num % 2 == 1) {alert("这个数字是奇数")} else {alert("非法输入")}
</script>

在这里插入图片描述

💕 三元表达式

是 if else 的简化写法,

条件 ? 表达式1 : 表达式2

条件为真, 返回表达式1 的值. 条件为假, 返回表达式2 的值。注意, 三元表达式的优先级是比较低的

alert(1 === "1" ? true : false)

在这里插入图片描述

💕 switch语句

用户输入一个整数, 提示今天是星期几

let day = prompt("请输入今天是星期几:")
day = parseInt(day)
switch(day) {case 1:alert("今天是星期一")breakcase 2:alert("今天是星期二")breakcase 3:alert("今天是星期三")breakcase 4:alert("今天是星期四")breakcase 5:alert("今天是星期五")breakcase 6:alert("今天是星期六")breakcase 7:alert("今天是星期天")breakdefault:alert("非法输入")
}

在这里插入图片描述


2. 循环语句

💕 for循环语句

let result = 0;
for(let i = 100; i <= 200; i++) {if(i % 3 == 0) {result = i;break;}
}
alert("100~200之间第一个3的倍数是" + result)

在这里插入图片描述

💕 while循环语句

while (条件) {循环体;
}

执行过程:

  • 先执行条件语句
  • 条件为 true, 执行循环体代码.
  • 条件为 false, 直接结束循环

案例:

var num = 1;
while (num <= 10) {console.log(num);num++;
}

在这里插入图片描述


六、数组

💕 创建数组

使用 new 关键字创建

// Array 的 A 要大写
var arr = new Array();

使用字面量方式创建 [常用]

var arr = [];
var arr2 = [1, 2, 'haha', false]; // 数组中保存的内容称为 "元素"

案例:

let array = new Array();
let array1 = [1, 2, 3, "4"]
console.log(typeof(array1))
console.log(array1)
console.log(array1[2])

在这里插入图片描述

注意: JS 的数组不要求元素是相同类型,这一点和 C, C++, Java 等静态类型的语言差别很大. 但是 Python, PHP 等动态类型语言也是如此。

let array1 = [1, 2, 3, "4"]
// 这种写法在JS中并不会抛异常, 如果下标超出范围读取元素, 则结果为 undefined
console.log(array1[-10])
array1 = "程序人"
console.log(typeof(array1))
console.log(array1)

在这里插入图片描述

注意: 不要给数组名直接赋值, 此时数组中的所有元素都没了,相当于本来 arr 是一个数组, 重新赋值后变成字符串了。


💕 新增数组元素

  1. 通过修改 length 新增,相当于在末尾新增元素. 新增的元素默认值为 undefined
let array = [1, 2, 3, 4]
array.length = 10;
console.log(array)
array[7] = 8
console.log(array)
console.log(array[9])

在这里插入图片描述

  1. 通过下标新增,如果下标超出范围赋值元素, 则会给指定位置插入新元素
let array = new Array()
console.log(array)
for(i = 0; i < 10; i++) {array[i] = i;
}
console.log(array)

在这里插入图片描述

  1. 使用 push 进行追加元素
let array = new Array()
console.log(array)
for(i = 0; i < 10; i++) {array[i] = i;
}
let new_array = new Array()
// 将array中所有的元素追加到new_array中
for(i = 0 ;i < array.length; i++) {new_array.push(array[i])
}
console.log(new_array)

在这里插入图片描述


💕 删除数组元素

使用 splice 方法删除元素

let array = new Array()
console.log(array)
for(i = 0; i < 10; i++) {array[i] = i;
}
console.log(array)
// 第一个参数表示从下表为 1 的位置开始删除. 第二个参数表示要删除的元素个数是 2 个
array.splice(1, 1)
console.log(array)

在这里插入图片描述


七、函数

💕 语法格式

// 创建函数/函数声明/函数定义
function 函数名(形参列表) {函数体return 返回值;
}
// 函数调用
函数名(实参列表) // 不考虑返回值
返回值 = 函数名(实参列表) // 考虑返回值

注意:

  • 函数定义并不会执行函数体内容,必须要调用才会执行,调用几次就会执行几次
function hello() {console.log("hello");
}
// 如果不调用函数, 则没有执行打印语句
hello();
  • 调用函数的时候进入函数内部执行,函数结束时回到调用位置继续执行,可以借助调试器来观察
  • 函数的定义和调用的先后顺序没有要求(这一点和变量不同,变量必须先定义再使用)
// 调用函数
hello();
// 定义函数
function hello() {console.log("hello");
}

案例

  • 定义的没有参数列表,也没有返回值的一个函数
function hello() {console.log("hello")
}
hello()

在这里插入图片描述

  • 定义一个有参数列表,有返回值的一个函数
function HelloXiaobite(num, name) {console.log(num + " Hello " + name)return 1;
}
HelloXiaobite(1, "小明")

在这里插入图片描述

如果我们将一个函数返回值赋值给一个变量,那么函数的返回值是什么类型,这个变量就是什么类型。

function HelloXiaobite(num, name) {console.log(num + " Hello " + name)return 1;
}
let b = HelloXiaobite(1, "小明")
console.log(typeof(b));

在这里插入图片描述


💕 关于参数个数

实参和形参之间的个数可以不匹配,但是实际开发一般要求形参和实参个数要匹配

  1. 如果实参个数比形参个数多, 则多出的参数不参与函数运算
sum(10, 20, 30); // 30
  1. 如果实参个数比形参个数少, 则此时多出来的形参值为 undefined
sum(10); // NaN, 相当于 num2 为 undefined

JS 的函数传参比较灵活, 这一点和其他语言差别较大. 事实上这种灵活性往往不是好事。

案例:

function HelloXiaobite(num, name) {console.log(num + " Hello " + name)return 1;
}
HelloXiaobite();
HelloXiaobite(1, "小明", 3)

在这里插入图片描述


💕 函数表达式

我们可以在定义函数时在最前面赋给一个变量,后面就可以通过这个变量来调用函数了。

let result = function Sum() {// 计算1~100之间的和ret = 0for(i = 0; i <= 100; i++) {ret += i}return ret
}
console.log(result())

在这里插入图片描述

当然在这里我们可以省略函数名,变量 = function() { } 这样的写法定义了一个匿名函数,随后直接通过这个变量来调用函数。

let b = function() {console.log(arguments)
}
b();
b(1, 2, 3)

在这里插入图片描述


💕 作用域

某个标识符名字在代码中的有效范围,在 ES6 标准之前, 作用域主要分成两个:

  • 全局作用域: 在整个 script 标签中, 或者单独的 js 文件中生效
  • 局部作用域/函数作用域: 在函数内部生效

例如:

for(i = 0; i <= 100; i++) {}
console.log(i)
// 在JS,在for循环中如果变量没有通过let,var定义,此时就变成一个全局变量

在这里插入图片描述

例如:

let j = 0
for(let i = 0; i <= 100; i++) {j += i
}
console.log(j)

在这里插入图片描述


💕 作用域链

  • 函数可以定义在函数内部
  • 内层函数可以访问外层函数的局部变量.

内部函数可以访问外部函数的变量,采取的是链式查找的方式,从内到外依次进行查找。

let num = 10
function test01() {let num = 100console.log(num)function test02() {let num = 200console.log(num)}test02()
}
test01()

在这里插入图片描述


八、对象

1. JS创建对象

💕 使用 字面量 创建对象 [常用]

let a = {}
let student = {name:"蔡徐坤",height:"175",weight:"170kg",sayHello:function() {console.log("Hello")}
}
  • 使用 { } 创建对象
  • 属性和方法使用键值对的形式来组织.
  • 键值对之间使用 , 分割 最后一个属性后面的 , 可有可无
  • 键和值之间使用 : 分割.
  • 方法的值是一个匿名函数

使用对象的属性和方法:

  1. 使用 . 成员访问运算符来访问属性 . 可以理解成 “的”
    console.log(student.name);
  2. 使用 [ ] 访问属性, 此时属性需要加上引号
    console.log(student[‘height’]);
  3. 调用方法, 别忘记加上 ()
    student.sayHello();

在这里插入图片描述

💕 使用 new Object 创建对象

let student = new Object()
student.name = "小明"
student.height = 180
student['weight'] = 75
student.SayHello = function() {console.log("Say Hello")
}
console.log(student.name)
console.log(student['height'])
student.SayHello()

在这里插入图片描述

💕 使用 构造函数 创建对象

function 构造函数名(形参) {this.属性 =;this.方法 = function...
}
var obj = new 构造函数名(实参);

例如:

function People(name, height, weight) {this.name = namethis.height = heightthis.weight = weightthis.Say = function() {console.log(name + "say hello")}
}
let xiaoming = new People("小明", 175, 75)
let zhangsan = new People("张三", 175, 75)
console.log(xiaoming)
xiaoming.Say()
console.log(zhangsan)
zhangsan.Say()

在这里插入图片描述

💕 理解 new 关键字

new 的执行过程:

  1. 先在内存中创建一个空的对象 { }
  2. this 指向刚才的空对象(将上一步的对象作为 this 的上下文)
  3. 执行构造函数的代码, 给对象创建属性和方法
  4. 返回这个对象 (构造函数本身不需要 return, 由 new 代劳了)

2. JavaScript 的对象和 Java 的对象的区别

  1. JavaScript 没有 “” 的概念
    对象其实就是 “属性” + “方法” .
    类相当于把一些具有共性的对象的属性和方法单独提取了出来, 相当于一个 “月饼模子”
    在 JavaScript 中的 “构造函数” 也能起到类似的效果.
    而且即使不是用构造函数, 也可以随时的通过 { } 的方式指定出一些对象
    在 ES6 中也引入了 class 关键字, 就能按照类似于 Java 的方式创建类和对象了
  2. JavaScript 对象不区分 “属性” 和 “方法”
    JavaScript 中的函数是 “一等公民”, 和普通的变量一样. 存储了函数的变量能够通过 ( ) 来进行调用执行
  3. JavaScript 对象没有 private / public 等访问控制机制
    对象中的属性都可以被外界随意访问
  4. JavaScript 对象没有 “继承
    继承本质就是 “让两个对象建立关联”. 或者说是让一个对象能够重用另一个对象的属性/方法,JavaScript 中使用 “原型” 机制实现类似的效果
  5. JavaScript 没有 “多态
    多态的本质在于 “程序猿不必关注具体的类型, 就能使用其中的某个方法”,C++ / Java 等静态类型的语言对于类型的约束和校验比较严格. 因此通过 子类继承父类, 并重写父类的方法的方式 来实现多态的效果。但是在 JavaScript 中本身就支持动态类型, 程序猿在使用对象的某个方法的时候本身也不需要对对象的类型做出明确区分. 因此并不需要在语法层面上支持多态。
    • 例如,在 Java 中已经学过 ArrayList 和 LinkedList. 为了让程序猿使用方便, 往往写List<String> list = new ArrayList<>(),然后我们可以写一个方法:
      在这里插入图片描述
      我们不必关注 list 是 ArrayList 还是 LinkedList, 只要是 List 就行. 因为 List 内部带有 add 方法.
      当我们使用 JavaScript 的代码的时候
      在这里插入图片描述
      add 对于 list 这个参数的类型本身就没有任何限制. 只需要 list 这个对象有 add 方法即可. 就不必
      像 Java 那样先继承再重写绕一个圈子

3. class创建类 | static关键字的理解 | 继承

💕 class创建类

当我们使用class关键字创建类的时候,构造函数名为关键字constructor

class People {constructor(name, height, weight) {this.name = namethis.height = heightthis.weight = weight}Say() {console.log(this.name + "正在说:Hello")}
}
let xiaoming = new People("小明", 175, 75)
console.log(xiaoming)
xiaoming.Say()

在这里插入图片描述


💕 static关键字的理解

如果我们想要让类中的一些成员属于类而不是属于某个对象时,就可以使用static关键字来修饰它。

class People {constructor(name, height, weight) {this.name = namethis.height = heightthis.weight = weight}Say() {console.log(this.name + "正在说:Hello")}static other = "other"static Sum() {return 100}
}
let xiaoming = new People("小明", 175, 75)
alert(People.other)
alert(People.Sum())

在这里插入图片描述

当我们使用某个对象去访问static修饰的成员变量或者成员方法时,就会报错。

在这里插入图片描述


💕 继承

继承的关键字和Java中是一样的,都是使用extends关键字。

class People {constructor(name, height, weight) {this.name = namethis.height = heightthis.weight = weight}Say() {console.log(this.name + "正在说:Hello")}static other = "other"static Sum() {return 100}
}
class Student extends People {constructor(name, height, weight, number) {super(name, height, weight)this.number = number}Say() {alert(this.name)}
}
let student = new Student("张三", 180, 70, 1)
console.log(student)
student.Say()

在这里插入图片描述


九、总结

尽管Java和JavaScript有相似的名称,但他们是两种不同的编程语言,它们有着不同的应用领域、语法和类型系统、执行环境以及对象模型和生态系统。JavaScript在Web开发领域有着丰富的库和框架,如React、Angular和Vue等,但与Java相比,JavaScript的生态系统更为注重于Web开发。

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

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

相关文章

uniapp打包微信小程序。报错:https://api.weixin.qq.com 不在以下 request 合法域名列表

场景&#xff1a;在进行打包上传测试时&#xff0c;发现登录失效&#xff0c;但在测试中【勾选不效应合法域名】就可以。 出现原因&#xff1a;我在获取到用户code后&#xff0c;直接使用调用官方接口换取openid 解决方案&#xff1a; 可以把code带给后端&#xff0c;让他们返…

Leetcode128. 最长连续序列

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 题解&#…

Qt 简单闹钟

//wiget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> //时间类 #include <QTimer> //定时器类 #include <QTextToSpeech> #include <QDebug> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPA…

无需编程经验,也能制作租车预约微信小程序,快速上手

现在&#xff0c;制作租车预约微信小程序不再需要编程经验&#xff0c;只需几个简单的步骤&#xff0c;您就可以拥有自己的租车预约微信小程序。在本文中&#xff0c;我们将介绍如何利用乔拓云网后台来制作租车预约微信小程序&#xff0c;并实现您所需的功能。 首先&#xff0c…

当面试官问你离职原因的时候怎么回答比较好?

所有的前提都是建立在有一定的物质基础&#xff0c;当你的一日三餐都成了问题&#xff0c;都需要家庭支持的时候我希望你可以找一份工作&#xff0c;靠自己的本事养活自己从来不丢人&#xff0c;我觉得死要面子活受罪才是真的让你看不起。 所有的建议都是建立在我们是普通打工人…

《TCP/IP网络编程》阅读笔记--并发多进程服务端的使用

1--并发服务器端 并发服务器端主要有以下三类&#xff1a; ① 多进程服务器&#xff1a;通过创建多个进程提供服务&#xff1b; ② 多路复用服务器&#xff1a;通过捆绑并统一管理I/O对象提供服务&#xff1b; ③ 多线程服务器&#xff1a;通过生成与客户端等量的线程提供服务&…

【论文通读】CLIP改进工作综述

CLIP改进工作综述 前言1. 语义分割1.1 Lseg1.2 GroupViT 2. 图像检测2.1 ViLD2.2 GLIP2.3 GLIPv2 3. 图像生成3.1 CLIPasso 4. 视频理解4.1 CLIP4Clip4.2 ActionCLIP 5. 其它领域5.1 CLIP-VIL5.2 AudioCLIP5.3 PointCLIP5.4 DepthCLIP 总结参考链接 前言 CLIP作为多模态对比学…

递归算法学习——N皇后问题,单词搜索

目录 ​编辑 一&#xff0c;N皇后问题 1.题意 2.解释 3.题目接口 4.解题思路及代码 二&#xff0c;单词搜索 1.题意 2.解释 3.题目接口 4.思路及代码 一&#xff0c;N皇后问题 1.题意 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上…

CSP-J初赛复习大题整理笔记

本篇全是整理&#xff0c;为比赛准备. 在这里插入代码片 #include<cstdio> using namespace std; int n, m; int a[100], b[100];int main() {scanf_s("%d%d", &n, &m);for (int i 1; i < n; i)a[i] b[i] 0;//将两个数组清0&#xff0c;这…

【zookeeper】zookeeper介绍

分布式协调技术 在学习ZooKeeper之前需要先了解一种技术——分布式协调技术。那么什么是分布式协调技术&#xff1f;其实分布式协调技术主要用来解决分布式环境当中多个进程之间的同步控制&#xff0c;让他们有序的去访问某种临界资源&#xff0c;防止造成"脏数据"的…

5分钟生成10条短视频,AI重构电商营销

点击关注 文&#xff5c;姚 悦&#xff0c;编&#xff5c;王一粟 “我们将正式告别过去单一渠道投放的时代&#xff0c;走向一站式跨渠道品效联合经营的全新时代。”9月6日&#xff0c;在2023年其最重要的营销峰会上&#xff0c;淘天集团阿里妈妈市场部总经理穆尔说道。 当天…

小程序实现摄像头拍照 + 水印绘制

文章标题 01 功能说明02 使用方式 & 效果图2.1 基础用法2.2 拍照 底部定点水印 预览2.3 拍照 整体背景水印 预览 03 全部代码3.1 页面布局 html3.2 业务核心 js3.3 基础样式 css 01 功能说明 需求&#xff1a;小程序端需要调用前置摄像头进行拍照&#xff0c;并且将拍…

OpenCV 06(图像的基本变换)

一、图像的基本变换 1.1 图像的放大与缩小 - resize(src, dsize, dst, fx, fy, interpolation) - src: 要缩放的图片 - dsize: 缩放之后的图片大小, 元组和列表表示均可. - dst: 可选参数, 缩放之后的输出图片 - fx, fy: x轴和y轴的缩放比, 即宽度和高度的缩放比. - …

stable diffusion实践操作-大模型介绍-SDXL1大模型

系列文章目录 大家移步下面链接中&#xff0c;里面详细介绍了stable diffusion的原理&#xff0c;操作等&#xff08;本文只是下面系列文章的一个写作模板&#xff09;。 stable diffusion实践操作 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生…

2023-9-8 求组合数(三)

题目链接&#xff1a;求组合数 III #include <iostream> #include <algorithm>using namespace std;typedef long long LL;int p;int qmi(int a, int k) {int res 1;while(k){if(k & 1) res (LL) res * a % p;k >> 1;a (LL) a * a % p;}return res; }…

FAT32文件系统f_mkfs函数详解

1.f_mkfs参数 参数path&#xff1a;要挂载/卸载的逻辑驱动器号;使用设备根路径表示。 参数opt&#xff1a;系统的格式&#xff0c;如图所示&#xff0c;选择FM_FAT32即可&#xff0c;选择其他的可能无法格式化。 参数au&#xff1a;每簇的字节数&#xff0c;以字节为单位&#…

安全模型中的4个P

引言&#xff1a;在安全模型中&#xff0c;经常会碰到PDR,PPDR&#xff0c;IPDRR&#xff0c;CARTA-PPDR等模型&#xff0c;其中的P&#xff0c;是predict&#xff1f;是prevent&#xff1f;还是protect&#xff1f;还是policy呢&#xff1f; 一、4P字典意思解释 1、predict&a…

使用内网负载机(Linux)执行Jmeter性能测试

一、背景 ​ 在我们工作中有时候会需要使用客户提供的内网负载机进行性能测试&#xff0c;一般在什么情况下我们需要要求客户提供内网负载机进行性能测试呢&#xff1f; 遇到公网环境下性能测试达到了带宽瓶颈。那么这时&#xff0c;我们就需要考虑在内网环境负载机下来执行我们…

中国ui设计师年终工作总结

一、萌芽阶段 记得初次应聘时&#xff0c;我对公司的认识仅仅局限于行业之一&#xff0c;对UI设计师一职的认识也局限于从事相对单纯的界面的设计创意和美术执行工作。除此之外&#xff0c;便一无所知了。所以&#xff0c;试用期中如何去认识、了解并熟悉自己所从事的行业&…

【Sword系列】Vulnhub靶机HACKADEMIC: RTB1 writeup

靶机介绍 官方下载地址&#xff1a;https://www.vulnhub.com/entry/hackademic-rtb1,17/ 需要读取靶机的root目录下key.txt 运行环境&#xff1a; 虚拟机网络设置的是NAT模式 靶机&#xff1a;IP地址&#xff1a;192.168.233.131 攻击机&#xff1a;kali linux&#xff0c;IP地…