前端学习之使用JavaScript

前情回顾:网页布局

JavaScript

简介
avaScript诞生于1995年,它的出现主要是用于处理网页中的前端验证。所谓的前端验证,就是指检查用户输入的内容是否符合一定的规则。比如:用户名的长度,密码的长度,邮箱的格式等。但是,有的同学可能会有疑问,这些验证,后端不也可以进行验证吗?确实,后端程序的确可以进行这些验证,但你要清楚,在1995年那个年代,网速是非常慢的,向后端发送一个请求,浏览器很久才能得到响应,那这无疑是一种非常不好的用户体验。
为了解决前端验证的问题,当时的浏览器巨头NetScape(网景)公司就开发出一种脚本语言,起初命名为LiveScript,后来由于SUN公司的介入更名为了JavaScript。
详细情况可以看up主轻松的小希的文章点击简介即可打开

常见情况

<!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 src="./index.js"></script> -->
</head>
<body>
    <!-- 引入方式 -->
    <script>
        console.log('hello Javascrpit');
        prompt();
        /*
            输入和输出
            输出有三种方式:alert()
                        document.write('要输出的内容');
                        console.log('要输出的内容')
            输入:prompt("")
        */
    </script>

    <!-- <script src="./index.js"></script> -->
</body>
</html>

根据代码学语言:从此段代码中可以看出,JavaScript的书写形式是包含在<script></script>标签当中的。
引入方式有两种:

  1. <head></head>标签当中引入,方式<script src="./index.js"></script>
  2. <body></body>标签当中引入,方式在这里插入代码片 <script> console.log('hello Javascrpit'); prompt(); </script>

javascript的组成

在这里插入图片描述

JavaScript的输出

其输出的输出方式有三种:页面、控制台、弹出窗口

  1. 页面
<script>
    document.write("Hello,World!");
</script>

  1. 控制台

摁F12,可以在网页中调出控制台

<script>
    console.log("输出一条日志");//最常用
    console.info("输出一条信息");
    console.warn("输出一条警告");
    console.error("输出一条错误");
</script>

  1. 弹出窗口
<script>
    alert("Hello,World!");
</script>

基础语法

变量

变量的声明有三个关键字 var、const、let

var message = "hi",
    found = false,
    age = 29;
var message;
console.log(message);   //不初始化的情况下,变 量会保存一个特殊值 undefined

var 声明提升(变量提升)
声明提升 也就是把所有变量声明都拉到函数作用域的顶部。此外,反复多次使用 var 声明同一个变量也没有问题

function foo() {
    var age = 16;
    var age = 26;
    var age = 36;
    console.log(age);
}
foo();

let 声明
// if (true) {
// var message = ‘Matt’;
// console.log(message);
// let age = 18;
// console.log(age);
// }
// console.log(message);
// console.log(age);

块作用域 是函数作用域的子集,因此适用于 var 的作用域限制同样也适用于 let。

var与left的区别:
let 声明的范围是块作用域, 而 var 声明的范围是函数作用域。
let 声明的变量不会在作用域中被提升。
使用 let 在全局作用域中声明的变量不会成为 window 对象的属性(var 声明的变量则会)。

for循环中的let声明
for循环中var声明的迭代变量会渗透到循环体外部
for (var j = 0; j < 5; j++) {

}
console.log(j);

for (let i = 0; i < 5; i++) {

}
console.log(i)

const声明
注:const 的行为与 let 基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且尝试修改 const 声明的变量会导致运行时错误。

数据类型

Js中的数据类型总共有七种:undefined、Boolean、null、Number、String、Symbol和Object。Symbol(符号)是 ECMAScript 6 新增的。

  1. 布尔类型 只有2个值:ture和false let isTure = false; console.log(isTure);

  2. 字符串类型String 被单引号或者双引号包裹的值 let name = “Js”; console.log(name);

  3. typeof:判断数据类型(判断基本数据类型) console.log(typeof message);
    console.log(typeof(isTure)); console.log(typeof 36);

  4. undefined Undefined 类型只有一个值,就是特殊值 undefined。当使用 var 或 let 声明了变量但没有初始 化时,就相当于给变量赋予了 undefined 值可以直接给一个变量赋值为 undefined,但是没有必要。对一个未声明的变量,只能执行一个有用的操作–typeof。undefined 是一个假值。因此,如果需要,可以用更简洁的方式检测它。不过要记住,也有很多 其他可能的值同样是假值。所以一定要明确自己想检测的就是undefined 这个字面值,而不仅仅是假值。

  5. Null Null 类型同样只有一个值,即特殊值 null。逻辑上讲,null 值表示一个空"对象"指针
    console.log(typeof null); //object

    即使 null 和 undefined 有关系,它们的用途也是完全不一样的。
    null一般代表的是对象为‘空’,undefined一般代表着数值为‘空’null 是一个假值。 console.log(null ==
    undefined); // true

  6. Number类型 Number 类型使用 IEEE 754 格式表示整数和浮点值(在某些语言中也叫双精度值)整数也可以用八进制(以 8 为基数)或十六进制(以 16 为基数)字面量表示。对于八进制字面量, 第一个数字必须是零(0),然后是相应的八进制数字(数值 0~7)。如果字面量中包含的数字超出了应 有的范围,就会忽略前缀的零,后面的数字序列会被当成十进制数, 八进制字面量在严格模式下是无效的,会导致 JavaScript 引擎抛出语法错误。ES6中八进制通过前缀0o来表示,也适用于严格模式。

let octalNum1 = 070;    //八进制56
let octalNum2 = 079;    //无效的八进制值,当成79处理
let octalNum3 = 08;     //无效的八进制值,当成8处理

//创建十六进制字面量,必须让真正的数值前缀 0x(区分大小写),然后是十六进制数字(0~9 以 及 A~F)。十六进制数字中的字母大小写均可。
let hexNum1 = 0xA;  //十六进制的10
let hexNum2 = 0x1f; //十六进制的31

// 浮点值
let floatNum1 = 1.1;
let floatNum2 = 0.1;
let floatNum3 = .1; // 有效,但不推荐

// 因为存储浮点值使用的内存空间是存储整数值的两倍,所以 ECMAScript 总是想方设法把值转换为 整数。在小数点后面没有数字的情况下,数值就会变成整数。类似地,如果数值本身就是整数,只是小数点后面跟着 0(如 1.0),那它也会被转换为整数。
let floatNum4 = 1.; // 小数点后面没有数字,当成整数 1 处理 
let floatNum5 = 10.0; // 小数点后面是零,当成整数 10 处理

// 科学计数法   
// 对于非常大或非常小的数值,浮点值可以用科学记数法来表示。科学记数法用于表示一个应该乘以 10 的给定次幂的数值。ECMAScript 中科学记数法的格式要求是一个数值(整数或浮点数)后跟一个大 写或小写的字母 e,再加上一个要乘的 10 的多少次幂。
let floatNum6 = 3.125e7; 
let floatNum7 = 3e-7;

// 浮点值的精确度最高可达 17 位小数,但在算术计算中远不如整数精确。
// let a = 0.1;
// let b = 0.2;
// let sum = a + b;
// console.log(sum);

// let a = 0.15;
// let b = 0.25;
// let sum = a + b;
// console.log(sum);

// 解决浮点数运算错误的方法可以考虑将浮点数统一乘以一个固定的倍数,将其转化成整数进行计算,计算结果再除以固定倍数转换回原来的小数。

  1. NaN
    NaN 是一个特殊值,意思是“不是数值”(Not a Number),用于表示本来要返回数值的操作失败了(而不是抛出错误)。
console.log(0/0);    // NaN
console.log(-0/+0);  // NaN

console.log(5/0);   // Infinity
console.log(5/-0);  // -Infinity
// NaN 有几个独特的属性。首先,任何涉及 NaN 的操作始终返回 NaN(如 NaN/10),在连续多步计算 时这可能是个问题。其次,NaN 不等于包括 NaN 在内的任何值。
console.log(NaN == NaN); // false

// isNaN()函数 判断值是不是NaN
console.log(isNaN(NaN));    // true
console.log(isNaN(10));     // false,10 是数值
console.log(isNaN("10"));   // false,可以转换为数值10
console.log(isNaN("blue")); // true,不可以转换为数值
console.log(isNaN(true));   // false,可以转换为数值1

数值转换函数
可以通过三个函数将非数值转换为数值:Number()、parseInt()和parseFlot()

Number()函数基于如下规则进行转换。
布尔值,true转换成1,false转换成0。
数值直接返回。
null,返回0。
undefined,返回NaN。
字符串,应用一下规则。
如果字符串包含数值字符,包括数值字符前面带加、减号的情况,则转换为一个十进制数值。
如果字符串包含有效的浮点值格式如"1.1",则会转换为相应的浮点值。
如果字符串包含有效的十六进制格式如"0xf",则会转换为与该十六进制值对应的十进制整数值。
如果是空字符串(不包含字符),则返回 0。
如果字符串包含除上述情况之外的其他字符,则返回 NaN。
对象,调用 valueOf()方法,并按照上述规则转换返回的值。如果转换结果是 NaN,则调用 toString()方法,再按照转换字符串的规则转换。

let num1 = Number('Hello World!');  //NaN
let num2 = Number("");              //0
let num3 = Number("0000111");       //111
let num4 = Number(true);            //1

parseInt()函数更专注于字符串是否包含数值模式。
字符串最前面的空格会被忽略,从第一个非空格字符开始转换。
如果第一个字符不是数值字符、加号或减号,parseInt()立即返回 NaN。这意味着空字符串也会返回 NaN(这一点跟 Number()不一样,它返回 0)。
如果第一个字符是数值字符、加号或减号,则继续依次检测每个字符,直到字符串末尾,或碰到非数值字符。
parseInt()函数也能识别不同的整数格式(十进制、八进制、十六进制)。
不同的数值格式很容易混淆,因此 parseInt()也接收第二个参数,用于指定底数(进制数)。

let num5 = parseInt("1234blue");    // 1234
let num6 = parseInt("");            // NaN
let num7 = parseInt("0xA");         // 10, 解释为十六进制整数
let num8 = parseInt(22.5);          // 22
let num9 = parseInt("70");          // 70, 解释为十进制整数
let num10 = parseInt("0xf");        // 15, 解释为十六进制整数

let num11 = parseInt("0xAF", 16);   // 175
// let num11 = parseInt("AF", 16);
let num12 = parseInt("AF");         // NaN

parseFloat()
parseFloat()函数的工作方式与parseInt()函数类似。
parseFloat()函数始终忽略字符串开头的零。
这个函数能识别前面讨论的所有浮点格式,以及十进制格式(开头的零始终被忽略)。
十六进制数值始终会返回0。因为 parseFloat()只解析十进制值,因此不能指定底数。

let num13 = parseFloat("1234blue");  // 1234,按整数解析 
    let num14 = parseFloat("0xA");       // 0
    let num15 = parseFloat("22.5");      // 22.5
    let num16 = parseFloat("22.34.5");   // 22.34
    let num17 = parseFloat("0908.5");    // 908.5
    let num18 = parseFloat("3.125e7");   // 31250000
  1. String类型
    String(字符串)数据类型表示零或多个 16 位 Unicode 字符序列。字符串可以使用双引号(")、 单引号(')或反引号(`)表示
let firstName = 'John';
let lastName = "Jacob";
let secondName = `Jingleheimerschmidt`;

\n 换行
\t 制表
\b 退格
\r 回车
\f 换页
\ 反斜杠()
’ 单引号(‘),在字符串以单引号标示时使用,例如’He said, ‘hey.’’
" 双引号(“),在字符串以双引号标示时使用,例如"He said, “hey.””
` 反引号(),在字符串以反引号标示时使用,例如He said, `hey.``
\xnn 以十六进制编码 nnnn 表示的 Unicode 字符(其中 n 是十六进制数字 0~F),例如\u03a3等于希腊字符"Σ"

转换字符串方式:

  1. toString()方法。这个方法唯一的用途就是返回当前值的字符串等价物。
    toString()方法可见于数值、布尔值、对象和字符串值。(没错,字符串值也有 toString()方法, 该方法只是简单地返回自身的一个副本。)null 和 undefined 值没有 toString()方法。
    在对数值调用这个方法时,toString()可以接收一个底数参数,即以什么底数来输出数值的字符串表示

  2. String()方法
    如果值有 toString()方法,则调用该方法(不传参数)并返回结果。
    如果值是 null,返回"null"。
    如果值是 undefined,返回"undefined"。

// 1. toString()方法。这个方法唯一的用途就是返回当前值的字符串等价物。

let age = 11;
let ageAsString = age.toString();
let found = true;
let founAsString = found.toString();

// 在对数值调用这个方法时,toString()可以接收一个底数参数,即以什么底数来输出数值的字符串表示
let num = 10;
console.log(num.toString());    // "10"
console.log(num.toString(2));   // "1010"
console.log(num.toString(8));   // "12"
console.log(num.toString(10));  // "10"
console.log(num.toString(16));  // "a"

// 2. String()方法

let value1 = 10;
let value2 = true;
let value3 = null;
let value4;

console.log(String(value1));  // "10"
console.log(String(value2));  // "true"
console.log(String(value3));  // "null"
console.log(String(value4));  // "undefined"

// 字符串插值
// 字符串插值通过在 中使用一个 J a v a S c r i p t 表达式实现(包括函数,方法) l e t v a l u e = 5 ; l e t e x p o n e n t = ′ s e c o n d ′ ; l e t i n t e r p o l a t e d S t r i n g = v a l u e + ′ t o t h e ′ + e x p o n e n t + ′ p o w e r i s ′ + ( v a l u e ∗ v a l u e ) ; l e t i n t e r p o l a t e d T e m p l a t e L i t e r a l = ‘ {}中使用一个 JavaScript 表达式实现(包括函数,方法) let value = 5; let exponent = 'second'; let interpolatedString = value + ' to the ' + exponent + ' power is ' + (value * value); let interpolatedTemplateLiteral = ` 中使用一个JavaScript表达式实现(包括函数,方法)letvalue=5;letexponent=second;letinterpolatedString=value+tothe+exponent+poweris+(valuevalue);letinterpolatedTemplateLiteral={ value } to the ${ exponent } power is ${ value * value }`;

操作符

操作符的种类跟Java类似直接上例子

// 操作符包含有 数学操作符、位操作符、关系操作符、赋值操作符等。

// 1 算术运算符。 +、-、*、/、
let num1 = 100;
let num2 = 10;

// 加、减、乘、除
console.log(num1 + num2);
console.log(num1 - num2);
console.log(num1 * num2);
console.log(num1 / num2);

// 取余运算%
console.log(num1 % num2);

// 除了+ 以外的运算符都会把数据转成数值类型进行运算。
// 运算符进行了类型转换(隐式转换)
console.log(2 + '2');
console.log(2 - '2');

// 如果将一元加、减(+、-)应用到非数值,则会执行与使用 Number()转型函数一样的类型转换:布尔值 false 和 true 转换为 0 和 1,字符串根据特殊规则进行解析,对象会调用它们的 valueOf()和/或 toString() 方法以得到可以转换的值。
let x1 = '1';
let x2 = '1.1';
let x3 = 'Z';
let bb = false;
let ff = 1.1;
let obj = {
    valueOf() {
        return -1;
    }
}

x1 = +x1;
x2 = +x2;
x3 = +x3;
bb = +bb;
ff = +ff;
obj = +obj;


// 自增、自减运算符 ++、--  (一元操作)
// 自增或自减运算符相当于当前值+1或者-1
let age = 18;
console.log(++age); 
console.log(--age);

// 自增和自减有两种写法
// ++在前,先自增再运算,++在后,先运算再自增
console.log(age++);
console.log(age);

/*
    自增、自减操作符可以作用于任何值,不限于整数--字符串、布尔值、浮点值,甚至对象都可以。
    ·对于字符串,如果是有效的数值形式,则转换为数值再应用改变。变量类型从字符串变成数值。
    ·对于字符串,如果不是有效的数值形式,则将变量的值设置为 NaN 。变量类型从字符串变成数值。
    ·对于布尔值,如果是 false,则转换为 0 再应用改变。变量类型从布尔值变成数值。
    ·对于布尔值,如果是 true,则转换为 1 再应用改变。变量类型从布尔值变成数值。
    ·对于浮点值,加 1 或减 1。
    ·如果是对象,则调用其valueOf()方法取得可以操作的值。对得到的值应用上述规则。如果是 NaN,则调用 toString()并再次应用其他规则。变量类型从对象变成数值。
 */
let s1 = "2";
let s2 = "z";
let b = false;
let f = 1.1;
let o = {
    // 返回对象对应的字符串、数值或布尔值
    valueOf() {
        return -1;
    }
};
s1++;
s2++;
b++;
f--;
o--;

// 赋值运算符 = 
let point = 100;

// +=   x+=y => x=x+y
// -=   x-=y => x=x-y
// *=   x*=y => x=x*y
// /=   x/=y => x=x/y
// %=   x%=y => x=x%y
let x = 10;
let y = 10;
x += y;
console.log(x);


// 比较运算符(关系运算符)
// 比较运算符执行比较两个值的操作,包括(<)(>)(<=)(>=)(==)(!=)(===)(!==)
// 这几个操作符都返回的是布尔值。
/**
     如果操作数都是数值,则执行数值比较。
     如果操作数都是字符串,则逐个比较字符串中对应字符的编码。
     如果有任一操作数是数值,则将另一个操作数转换为数值,执行数值比较。
     如果有任一操作数是对象,则调用其 valueOf()方法,取得结果后再根据前面的规则执行比较。 如果没有 valueOf()操作符,则调用 toString()方法,取得结果后再根据前面的规则执行比较。
     如果有任一操作数是布尔值,则将其转换为数值再执行比较。
 */
console.log(1 > 5);
console.log(2 >= 2);

// 相等和不相等操作符(==)(!=)
// 这两个操作符都会先进行类型转换(通常称为强制类型转换)再确定操作数是否相等。
// null 和 undefined 相等。
// null 和 undefined 不能转换为其他类型的值再进行比较。
// 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true。否则,两者不相等。
console.log(2 == "2");
console.log(undefined == null);
let oc = {
    valueOf() {
        return -1;
    }
};
let od = {
    valueOf() {
        return -1;
    }
};
console.log(oc == od);

// 全等与不全等 (===)(!==)
// 全等和不全等操作符与相等和不相等操作符类似,只不过它们在比较相等时不转换操作数。
// 判断的是两边的值和数据类型是否完全相同。
console.log(2 === "2");
console.log(undefined === null);
// NaN不等于任何值,包括它本身。 涉及到NaN的比较都是false
console.log(NaN == NaN); 
console.log(NaN === NaN);

// 尽量不是比较浮点数,因为会有精度问题
console.log(0.1+0.2 === 0.3);



// 逻辑运算符(布尔运算符)
// 逻辑与(&&)、逻辑或(||)、逻辑非(!)
console.log(false && false);
console.log(true && false);
console.log(true && true);
console.log(false && true);

// 逻辑与操作符是一种短路操作符,意思就是如果第一个操作数决定了结果,那么永远不会对第二个操作数求值。对逻辑与操作符来说,如果第一个操作数是 false,那么无论第二个操作数是什么值,结 果也不可能等于 true。
let fond = true;
let result = (found && someUndeclaredVariable);
console.log(result);

console.log(false || false);
console.log(true || false);
console.log(true || true);
console.log(false || true);

console.log(!false);
console.log(!true);
console.log(!0);
console.log(!NaN);
console.log(!undefined)
console.log(!'');
console.log(!12345)
console.log(!{});

接下来就是分支和循环也是类似的

分支

// if...else... 语句
/*
if (条件) {
    满足条件执行的代码
}
*/
if (true) {
    console.log('我是真');
}

let s = 'ajosd';
if (s) {
    console.log('我是真');
} else {
    console.log('我是假');
}

let day = 2;
if (day === 1) {
    console.log('今天是星期一');
} else if (day === 2) {
    console.log('今天是星期二');
} else if (day === 3) {
    console.log('今天是星期三');
} else if (day === 4) {
    console.log('今天是星期四');
} else if (day === 5) {
    console.log('今天是星期五');
} else if (day === 6) {
    console.log('今天是星期六');
} else if (day === 7) {
    console.log('今天是星期日');
} else {
    console.log('哎呀超出我的能力范围了');
}


if (condition) {
    if (condition) {
        
    } else {
        
    }
} else {
    
}


// 需求根据输入不同的成绩,反馈不同的评价
// 成绩90以上是优秀,成绩70~90是良好,成绩60~70是及格,成绩60分以下是不及格




// 三元运算符(三目运算符)
// (条件)? 表达式1 : 表达式2
let num = 10;
num % 2 === 0? console.log('偶数'): console.log('奇数');
const result = num % 2 === 0? '偶数': '奇数';
console.log(result);

// switch语句
// switch 语句是与 if 语句紧密相关的一种流控制语句,从其他语言借鉴而来。ECMAScript 中 switch 语句跟 C 语言中 switch 语句的语法非常相似
switch (key) {
    case value:
        break;

    default:
        break;
}


switch (day) {
    case 1:
        console.log('今天是星期一');
        break;
    case 2:
        console.log('今天是星期二');
        break;
    case 3:
        console.log('今天是星期三');
        break;
    case 4:
        console.log('今天是星期四');
        break;
    case 5:
        console.log('今天是星期五');
        break;
    case 6:
        console.log('今天是星期六');
        break;
    case 7:
        console.log('今天是星期日');
        break;
    default:
        console.log('哎呀超出我的能力范围了')
}

循环

// 循环语句有三种
// 1 do...while
// 2 while循环语句
// 3 for循环语句
let i = 0;              //起始值
do {
    i++                 //循环体
} while (i <= 10);      //循环条件

i = 0;                  //起始值
while (i < 10) {        //循环条件
    i++;                //循环体
}



// for (初始值; 循环条件; 变量变化量) {
//     循环体
// }
// 循环是可以嵌套的。
for (let i = 0; i < 10; i++) {
    console.log(i);    
}


// 打印一个99乘法表



// for-in 语句
// for-in 语句是一种严格的迭代语句,用于枚举对象中的非符号键属性
// 对象的属性是无序的,因此 for-in 语句不能保证返回对象属性的顺序。
// 如果 for-in 循环要迭代的变量是 null 或 undefined,则不执行循环体。
let object = {
    name: 'zhangsan',
    age: 18,
}
for (const key in object) {
    console.log(key);
}

let array = [1, 2, 3, 4, 5];
for (const key in array) {
    console.log(key);
}

// for-of 语句
// for-of 语句是一种严格的迭代语句,用于遍历可迭代对象的元素
for (let index = 0; index < array.length; index++) {
    console.log(array[index]);
}

for (const value of array) {
    console.log(value);
}

for (const s of "object") {
    console.log(s);
}


// break和continue语句
// break和continue语句为执行循环代码提供了更严格的控制手段。其中,break语句用于立即退出循环,强制执行循环后的下一条语句。而 continue 语句也用于立即退出循环,但会再次从循环顶部开始执行。
let num = 0;

for (let i = 0; i < 10; i++) {
    console.log(`i = ${ i }`);
    for (let j = 0; j < 10; j++) {
        if (i === 5 && j ===5) {
            break;
        }
        num++;
        console.log(`j = ${ j }`);
    }
    console.log('--------------------')
}
console.log(num);

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

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

相关文章

SQL中去除重复数据的几种方法,我一次性都告你​

使用SQL对数据进行提取和分析时&#xff0c;我们经常会遇到数据重复的场景&#xff0c;需要我们对数据进行去重后分析。 以某电商公司的销售报表为例&#xff0c;常见的去重方法我们用到distinct 或者group by 语句&#xff0c; 今天介绍一种新的方法&#xff0c;利用窗口函数…

Github 的使用

3. Github 在版本控制系统中&#xff0c;大约90%的操作都是在本地仓库中进行的&#xff1a;暂存&#xff0c;提交&#xff0c;查看状态或者历史记录等等。除此之外&#xff0c;如果仅仅只有你一个人在这个项目里工作&#xff0c;你永远没有机会需要设置一个远程仓库。只有当你…

2001-2021年全国30省就业人数数据

2001-2021年全国30省就业人数数据/各省就业人数数据 1、时间&#xff1a;2001-2021年 2、范围&#xff1a;包括30个省市不含西藏 3、指标&#xff1a;就业人数 4、来源&#xff1a;各省NJ、社会统计NJ 5、缺失情况说明&#xff1a;无缺失 6、指标说明&#xff1a; 就业人…

实在智能出席第六届数字中国建设峰会,入围2022年信息技术应用创新优秀解决方案榜单

最美榕城四月天&#xff0c;山海之间尽显数字澎湃。这一周来&#xff0c;实在智能来到了“有福之州”&#xff0c;为数字中国建设增添实在色彩。 4月25日&#xff0c;实在华夏行抵达福州站&#xff0c;与众多生态合作伙伴携手共话数字发展新未来&#xff1b; 4月26日&#xff…

分布式事务 --- Seata事务模式、高可用

一、事务模式 1.1、XA模式 XA 规范 是 X/Open 组织定义的分布式事务处理&#xff08;DTP&#xff0c;Distributed Transaction Processing&#xff09;标准&#xff0c;XA 规范 描述了全局的TM与局部的RM之间的接口&#xff0c;几乎所有主流的数据库都对 XA 规范 提供了支持。…

ContextCapture Master 倾斜摄影测量实景三维建模技术应用

查看原文>>>ContextCapture Master 倾斜摄影测量实景三维建模技术应用 目录 第一部分、倾斜摄影测量原理及应用领域 第二部分、倾斜摄影测量数据采集方法 第三部分、CC支持数据类型及导入数据方法 第四部分、CC空三计算参数设置及数据处理方法 第五部分、CC控制…

电气电工相关专业知识及名词解释

一、电流电压 火线、零线、地线&#xff1a;火线和零线的区别就是&#xff1a;火线带电&#xff0c;零线不带电。火线是传电流的&#xff0c;而零线是回流的。 红色是火线&#xff0c;零线一般是绿色的&#xff0c;通常可用电笔来测。电笔一头亮了是火线&#xff0c;不亮的则…

Python使用CV2库捕获、播放和保存摄像头视频

Python使用CV2库捕获、播放和保存摄像头视频 特别提示&#xff1a;CV2指的是OpenCV2&#xff08;Open Source Computer Vision Library&#xff09;&#xff0c;安装的时候是 opencv_python&#xff0c;但在导入的时候采用 import cv2。 若想使用cv2库必须先安装&#xff0c;P…

InnoDB 引擎 底层逻辑

目录 0 课程视频 1 逻辑存储结构 1.1 结构图 1.2 表空间 -> 记录 索引 存储记录 等数据 1.2.1 储存在 cd/var/lib/mysql -> ll -> 目录 mysql.ibd 1.3 段 -> 索引 存储记录 具体存储 1.3.1 数据段 b树 叶子节点 1.3.2 索引段 b树的 非叶子节点 1.3.3 回滚段…

ChatGPT来了不用慌,广告人还有这个神器在手

#ChatGPT能取代广告人吗&#xff0c;#ChatGPT会抢走你的工作吗&#xff1f;#ChatGPT火了&#xff0c;会让营销人失业吗&#xff1f;自ChatGPT爆火以来&#xff0c;各种专业or非专业文章不停给广告人强加焦虑&#xff0c;但工具出现的意义&#xff0c;更多在于提效而非替代&…

【技术分享】防止根据IP查域名,防止源站IP泄露

有的人设置了禁止 IP 访问网站&#xff0c;但是别人用 https://ip 的形式&#xff0c;会跳到你服务器所绑定的一个域名网站上 直接通过 https://IP, 访问网站&#xff0c;会出现“您的连接不是私密连接”&#xff0c;然后点高级&#xff0c;会出现“继续前往 IP”&#xff0c;…

简单分享微信小程序上的招聘链接怎么做

招聘小程序的主要用户就是企业招聘端和找工作人员的用户端,下面从这两个端来对招聘小程序开发的功能进行介绍。 企业端功能 1、岗位发布:企业根据自身岗位需求,在招聘app上发布招聘岗位及所需技能。 2.简历筛选:根据求职者提交的简历选择合适的简历,并对公开发布的简历进行筛…

【五一创作】【Simulink】采用延时补偿的三相并网逆变器FCS-MPC

&#x1f449; 【Simulink】基于FCS-MPC的三相并网逆变器控制 上一篇博客介绍了FCS-MPC的基本操作&#xff0c;并且以三相并网逆变器为控制对象进行了Simulink仿真。 但实际仿真中没有考虑补偿延时。本篇博客将讨论为什么要考虑延时并进行补偿&#xff0c;最后对此仿真验证。 …

【Java数据结构】顺序表、队列、栈、链表、哈希表

顺序表 定义 存放数据使用数组但是可以编写一些额外的操作来强化为线性表&#xff0c;底层依然采用顺序存储实现的线性表&#xff0c;称为顺序表 代码实现 创建类型 先定义一个新的类型 public class ArrayList<E> {int capacity 10; //顺序表的最大容量int size …

【Java笔试强训 6】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;不要二 …

基于微信小程序的垃圾分类系统的研究与实现(附源码和教程)

1. 简介 本文介绍的事基于微信小程序的垃圾分类系统&#xff0c;主要实现的功能有登录、注册、垃圾分类查询、垃圾预约回收、垃圾分类功能。 2.系统设计与实现 本章节是论文的重点&#xff0c;基于上一章介绍的总体设计框架的搭建&#xff0c;详细对小程序的页面布局、流程设…

Photoshop如何使用选区之实例演示?

文章目录 0.引言1.利用快速选择工具抠图2.制作网店产品优惠券3.利用选区改变眼睛颜色4.抠取复杂的花束5.制作丁达尔光照效果6.利用选区调整图像局部颜色 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及…

MySQL基础

目标&#xff1a; 掌握MySQL的安装&#xff0c;登录&#xff0c;基础操作 掌握DDL语句 掌握DML语句 掌握DQL语句 1、数据库相关概念 以前我们做系统&#xff0c;数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果&#xff0c;当然文件存储…

Mysql为json字段创建索引的两种方式

目录 一、前言二、通过虚拟列添加索引&#xff08;Secondary Indexes and Generated Columns&#xff09;三、多值索引&#xff08;Using multi-valued Indexes&#xff09;四、官网地址 一、前言 JSON 数据类型是在mysql5.7版本后新增的&#xff0c;同 TEXT&#xff0c;BLOB …

【社区图书馆】二、LED子系统——硬件驱动层

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;嵌入式领域新星创作者 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 文章目录 1、gpio_led_probe分析1.1 相关数据结构1.1.1 gpio_led_platform_data1.1.2 gpio_leds_priv 1.2 实…