首页 > 其他分享 >【JS】JS笔记

【JS】JS笔记

时间:2023-09-05 23:35:20浏览次数:35  
标签:arr console log 笔记 JS num var alert

JS笔记

初识JS

浏览器执行JS简介

浏览器分为:

  • 渲染引擎:用来解析HTML和CSS,俗称内核。比如chrome的blink
  • JS引擎:也成为JS解释器,用来读取JS代码并对其进行后台处理。比如chrome的V8

JS的组成

  • ECMAScript: JavaScript语法,规定了JS的编程语法和基础核心知识,是所有浏览器厂商共同遵循的一套JS语法工业领域
  • DOM:页面文档对象类型,可以通过DOM提供的接口对页面上的各种元素进行操作(大小位置颜色等)
  • BOM:浏览器对象模型,通过BOM可以操作浏览器窗口

JS的三种书写方式

  • 行内式

    特殊情况下使用。更推荐使用单引号

  • 内嵌式

    学习时常用

  • 外部JS

    <script src="./test.js"></script>
    script中间不允许有代码
    

    适合JS代码量大的场合

<!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>
    <!-- 内嵌式JS -->
    <script>
        // 单行注释 ctrl+/
        /* 多行注释 
        shift+alt+a */
        alert("Liella!")
    </script>

    <!-- 外部JS -->
    <script src="./test.js"></script>
</head>

<body>
    <!-- 行内式js 直接写到元素内部 -->
    <!-- <input type="button" value="Liella!" onclick="alert('LoveLive! SuperStar')"> -->
</body>

</html>

输入输出

// 输入框 用户可输入
prompt('input your age:')
// alert 弹出警示框
alert('result is:')
// console 控制台输出
console.log('hello world')

变量

//声明变量
var 变量名;
//赋值
变量名 = 数值;
//声明变量并赋值(变量的初始化)
var 变量名 = 数值;

获取输入框(prompt)的信息

var usrName = prompt('请输入姓名:');

声明多个变量

var age = 14,
    usrName = 'jack';

声明变量特殊情况

  • 只声明不赋值

    输入显示为undefined

  • 不声明不赋值

    能运行,运行到这一行会报错

  • 只赋值不声明

    能运行,不报错,正确,但是不提倡用

命名规范

  • 由字母、数字、下划线、美元符号组成,如usrAge,num01,_name
  • 严格区分大小写
  • 不能以数字开头
  • 不能是关键字
  • 变量命名必须有意义
  • 遵循驼峰命名法,首字母小写,后边单词的首字母大写,如myFirstName
  • 尽量不要使用name作为变量名

数据类型

JS的数据类型是只有在程序运行的过程中,根据等号右边的值来确定的。

一个变量的数据类型可以变

var x = 12;
x = 'a';

分类

  • 简单数据类型:Number,String(默认""),Boolean(默认false),Undefined,Null
  • 复杂数据类型:object

数字型

包含整型和浮点数型,默认0

八进制:数字前加0就表示八进制

var num01 = 010;
console.log(num01);
//8

十六进制:数字前加0x就表示十六进制

var num02 = 0x11;
console.log(2);
//17

最大值和最小值

console.log(Number.MAX_VALUE);
console.log(Number.MIN_VALUE);
//1.7976931348623157e+308
//5e-324

三个特殊值

// 三个特殊值
// 无穷大
alert(Infinity);
console.log(Number.MAX_VALUE * 2);
// 负无穷
alert(-Infinity);
console.log(-Number.MAX_VALUE * 2);
// 非数值
alert(NaN);
console.log('num' - 100);

isNaN

// isNaN 如果是数字则返回false 不是数字返回true
console.log(isNaN(12));
console.log(isNaN('num'));
//注:这里若是console.log(isNaN('12'));则也返回false

字符串型

一般推荐单引号,当字符串内部也需要单引号的时候,使用外双内单或者外单内双。

转义符(表格中\后均不应带空格)

转义符 说明
\ n 换行
\ \ 斜杠\
\ ' 单引号
\ " 双引号
\ t tab缩进
\ b 空格

获取字符串长度

var str = 'abcdefg';
console.log(str.length);
//7

字符串的拼接

var newStr = 'xyz';
console.log(str + newStr);
//abcdefgxyz
console.log(str + 7);
//abcdefg7
console.log(7 + 7);
//14
console.log('7' + 7);
//77

布尔型

true参加运算当1来看

false参加运算当0来看

flag = true;
flag1 = false;
console.log(flag + 1);
//2
console.log(flag1 - 1);
//-1
console.log(flag / 1);
//1
console.log(flag1 * 1);
//0

Undefined和Null

var v = undefined;
var space = null;
console.log(v + 'number');
//undefinednumber
console.log(space + 'number');
//nullnumber
console.log(v + 1);
//NaN
console.log(space + 1);
//1

检测数据类型

var num01 = 12;
console.log(typeof num01);
//number
//null的类型检测出来会是object
var space = null;
console.log(typeof space);
//object

数据类型转换

  • 转换为字符串类型
  • 转换为数字型
  • 转换为布尔型

转换为字符串类型

方式 说明 案例
toString() 转成字符串 var num=1; alert(num.toString());
String()强制转换 转成字符串 var num=1; alert(String(num));
加号拼接字符串(隐式转换) 和字符串拼接的结果都是字符串 var num=1; alert(num+'');

转换为数字型

方式 说明 案例
parseInt(string)函数 将string转换为整数数值型 parseInt('78')
parseFloat(string)函数 将string转换为浮点数数值型 parseFloat('78.21')
Number()强制转换 将string转换为数值型 Number('12')
js隐式转换(- * /) 利用算术运算隐式转换为数值型 '12'-0
  • 前两个转换时只会把这段字符串前一个符合格式的数字转换为数字型

    如:parseInt(12.22.1) 为12 parseFloat(12.22.1) 为12.22

    parseInt(12.2aaaaa2.1) 为12 parseFloat(12.2aaaaa2.1) 为12.2

    而Number()则是必须整个字符串必须是符合格式的数字

    如:Number('12.22.1') 为NaN

小案例

 var bYear = prompt("请输入您的出生年:");
 var date = new Date();
 var tYear = date.getFullYear();
 console.log(tYear);
 //隐式转换
 var age = tYear - bYear;
 alert("您今年" + age + "岁");
 var a = prompt("请输入第一个值");
 var b = prompt("请输入第二个值");
 if (!isNaN(a) && !isNaN(b)) {
     var sum = (a - 0) + (b - 0);
     // var sum = parseFloat(a) + parseFloat(b);
     alert("两数之和为:" + sum);
 }
 else {
     alert("请输入数字!");
 }

转换为布尔型

方式 说明 案例
Boolean()函数 其他类型转成布尔值 Boolean("true");
  • 代表空和否定的值会被转换为false,如''、0、NaN、null、undefined
  • 其余值都会被转换成true

案例

<!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>
        var usrName = prompt('请输入姓名:');
        var usrAge = prompt('请输入年龄:');
        var usrSex = prompt('请输入性别:');
        alert('您的姓名是:' + usrName +
            '\n您的年龄是:' + usrAge +
            '\n您的性别是:' + usrSex);
    </script>
</head>

<body>

JS运算符

算术运算符

%取模(余数)

console.log(5 % 3);
//2

浮点数算术运算会有问题(精度问题),避免用浮点数直接运算

不要直接拿着运算后的浮点数和浮点数比较是否相等

var num = 0.2 + 0.1;
console.log(num == 0.3);
//false

递增递减运算符

  • 前置递增运算符:

    ++num,自加1,先自加再返回值

  • 后置递增运算符:

    num++,自加1,先返回值再自加

// 前置递增运算符 先自加再返回值
var p = 10;
console.log(++p + 10);//21
// 后置递增运算符 先返回值再自加
p = 10;
console.log(p++ + 10);//20
//1.p++ = 11 但是返回10
//2.++p = 12
p = 10;
console.log(p++ + ++p);//22

比较运算符

//==可以把字符串型转换为数字型
console.log(18 == '18');//true
console.log(18 === '18');//false

逻辑运算符

逻辑运算符 说明 案例
&& 逻辑与 and true&&false
|| 逻辑或 or true||false
! 逻辑非 not !true

逻辑中断(短路运算)

  • &&逻辑中断

    表达式1&&表达式2,若表达式1为真则返回表达式2,若表达式1为假则返回表达式1

    console.log(123 && 456);//456
    console.log(0 && 456);//0
    console.log(0 && 456 && 78945);//0
    
  • ||逻辑中断

    表达式1||表达式2,若表达式1为真则返回表达式1,若表达式1为假则返回表达式2

    console.log(123 || 456);//123
    console.log(0 || 456);//456
    console.log(0 || 456 || 2367);//456
    console.log(0 || 0 || 2367);//2367
    

赋值运算符

赋值运算符 说明 案例
= 直接赋值 var usrName = 'Jack';
+=、-= 加、减一个数后再赋值 var age = 10; age += 5;//15
*=、/=、%= 乘、除、取模后再赋值 var age = 10; age *= 5;//50

运算符优先级

优先级 运算符 顺序
1 小括号 ()
2 一元运算符 ++ -- !
3 算术运算符 先*/%后+-
4 关系运算符 > >= < <=
5 相等运算符 == != !== ===
6 逻辑运算符 先&&后||
7 赋值运算符 =
8 逗号运算符 ,

流程控制

案例1:判断闰年

<!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>
        var year = prompt('请输入年份:');
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            alert(year + '是闰年');
        }
        else {
            alert(year + '是平年');
        }
    </script>
</head>

<body>
</body>
</html>

案例2:判断成绩

<!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>
        var score = prompt('请输入成绩:');
        //从大到小写可以节省代码,不用再写上限
        if (score >= 90) {
            alert('A');
        }
        else if (score >= 80) {
            alert('B');
        }
        else if (score >= 70) {
            alert('C');
        }
        else if (score >= 60) {
            alert('D');
        }
        else {
            alert('E');
        }
    </script>
</head>

<body>
</body>
</html>

案例3:三元表达式(相当于一个if else语句)

<!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>
        var year = prompt("请输入年份:");
        //条件表达式?表达式1:表达式2
        //条件表达式为真则返回表达式1,为假则返回表达式2
        //alert(year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? '是闰年' : '是平年');
        var result = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? '是闰年' : '是平年';
        alert(result);
    </script>
</head>

<body>
</body>

</html>

案例4:查询水果

<!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>
        var fName = prompt('请输入名称:');
        //switch语句匹配必须是全等(===)
        switch (fName) {
            case '苹果':
                alert('3.5rmb/kg');
                break;
            case '西瓜':
                alert('13.5rmb/kg');
                break;
            case '橘子':
                alert('6.5rmb/kg');
                break;
            case '香蕉':
                alert('2.5rmb/kg');
                break;
            default:
                alert('没有此水果');
        }
    </script>
</head>

<body>
</body>
</html>

有判断固定值用switch,有判断范围用if esle if

循环

案例1:求和

<!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>
        var sum = 0;
        // 求1-100之间所有整数的和
        for (var i = 1; i <= 100; i++) {
            // sum = sum + i;
            sum += i;
        }
        console.log(sum);
        // 求1-100之间所有整数的平均值
        var avg = sum / 100;
        console.log(avg);
        // 求1-100之间所有奇数和偶数的和
        sum1 = 0;
        sum2 = 0;
        for (var i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                sum1 += i;
            }
            else if (i % 2 == 1) {
                sum2 += i;
            }
        }
        console.log(sum1);
        console.log(sum2);
        // 求1-100之间所有能被3整除的数字的和
        sum = 0;
        for (var i = 1; i <= 100; i++) {
            if (i % 3 == 0) {
                sum += i;
            }
        }
        console.log(sum);
    </script>
</head>

<body>
</body>
</html>

案例2:求学生成绩

<!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>
        var sum = 0, avg = 0, num = prompt('请输入班级人数:');
        for (var i = 1; i <= num; i++) {
            score = Number(prompt('请输入第' + i + '个学生的成绩:'));
            sum += score;
        }
        avg = sum / num;
        alert('该班级的总成绩为:' + sum + '\n平均成绩为:' + avg);
    </script>
</head>

<body>
</body>
</html>

案例3:输出星星金字塔

<!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>
        var num = prompt('请输入要打印星星的行数:');
        var str = '';
        for (var i = num; i > 0; i--) {
            for (var j = i; j > 0; j--) {
                str = str + '⭐';
            }
            str = str + '\n';
        }
        console.log(str);
    </script>
</head>

<body>
</body>

</html>

案例3:输出九九乘法表

<!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>
        var str = '';
        for (var i = 1; i <= 9; i++) {
            for (var j = 1; j <= i; j++) {
                str = str + j + '×' + i + '=' + Number(i) * Number(j) + '\t'
            }
            str = str + '\n';
        }
        console.log(str);
    </script>
</head>

<body>
</body>
</html>

案例4:while循环

<!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>
        var i = 1;
        while (i <= 100) {
            console.log(i + '岁');
            i++;
        }
        // 求1-100之间所有整数的和
        var sum = 0, num = 0;
        while (num <= 100) {
            sum += num;
            num++;
        }
        console.log(sum);        
        var love = prompt('你爱我吗?');
        while (love != '我爱你') {
            love = prompt('你爱我吗?');
        }
    </script>
</head>

<body>
</body>

</html>

案例5:do while循环

<!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>
        var i = 1;
        do {
            console.log(i + '岁');
            i++;
        }
        while (i <= 100)
        // 求1-100之间所有整数的和
        var sum = 0, num = 0;
        do {
            sum += num;
            num++;
        } while (num <= 100)
        console.log(sum);
        do {
            var love = prompt('你爱我吗?');
        } while (love != '我爱你')
    </script>
</head>

<body>
</body>

</html>

案例6:continue和break

<!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>
        //遇到坏包子扔掉继续吃
        var sum = 0;
        var bao = ['正常', '正常', '坏了', '正常', '正常'];
        for (var i = 0; i < 5; i++) {
            if (bao[i] == '坏了') {
                continue;
            }
            var num = i + 1;
            console.log('正在吃第' + num + '个包子');
            sum++;
        }
        console.log('一共吃了' + sum + '个包子');
        //遇到坏包子就不继续吃了
        sum = 0;
        for (var i = 0; i < 5; i++) {
            if (bao[i] == '坏了') {
                break;
            }
            var num = i + 1;
            console.log('正在吃第' + num + '个包子');
            sum++;
        }
        console.log('一共吃了' + sum + '个包子');
        //求1-100不可以被7整除的数字之和
        sum = 0;
        for (var i = 1; i <= 100; i++) {
            if (i % 7 == 0) {
                continue;
            }
            sum += i;
        }
        console.log(sum);
        //1-100除去个位是3的数的和
        var sum = 0;
        for (var i = 1; i <= 100; i++) {
            if (i % 10 == 3) {
                continue;
            }
            sum += i;
        }
        console.log(sum);
    </script>
</head>

<body>
</body>

</html>

案例7:简易ATM

<!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>
        var num = prompt('请输入你要的操作编号:\n' +
            '1.存钱\n' +
            '2.取钱\n' +
            '3.显示余额\n' +
            '4.退出');
        var total = 100;
        while (num != '4') {
            switch (num) {
                case '1':
                    var add = parseFloat(prompt('请输入存款数:'));
                    total += add;
                    alert('存款成功!目前余额为' + total);
                    break;
                case '2':
                    var reduce = parseFloat(prompt('请输入取款数:'));
                    if (reduce <= total) {
                        total -= reduce;
                        alert('取款成功!目前余额为' + total);
                    }
                    else {
                        alert('余额不足!目前余额为' + total);
                    }
                    break;
                case '3':
                    alert('目前余额为' + total);
                    break;
                default:
                    alert('请输入正确编号!');
            }
            num = prompt('请输入你要的操作编号:\n' +
                '1.存钱\n' +
                '2.取钱\n' +
                '3.显示余额\n' +
                '4.退出');
        }
        alert('已退出!');
    </script>
</head>

<body>
</body>

</html>

数组

创建

//用new创建
var arr = new Array();
//创建空数组
var arr = [];
//创建带初始值的数组
var arr = [1,2,3,4];

获取数组元素

console.log(arr[0]);

遍历数组:

var arr = ['red', 'blue', 'green'];
for (i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

添加数组元素

//通过改变length
var arr = [1, 2, 3, 4];
console.log('length:' + arr.length);
arr.length = 7;
console.log(arr);
//[1, 2, 3, 4, empty × 3]
//修改索引号追加元素
arr[5] = 3;
arr[7] = 1;
console.log(arr);
//[1, 2, 3, 4, empty, 3, empty, 1]

筛选数组元素(大于10的)

var arr = [2, 4, 7, 10, 23, 44, 2];
var arr1 = [];
// var num = 0;
for (var i = 0; i < arr.length; i++) {
    if (arr[i] > 10) {
        // arr1[num] = arr[i];
        // num++;
        arr1[arr1.length] = arr[i];
    }
}
console.log(arr1);

冒泡排序

动图演示:

冒泡排序

思路:

一共分两层:
外层是每一次遍历比较算一轮,一共比较数组长度-1轮(因为两两比较,可以看成最后一次比较可以一下子确定两个数)

内层是左右相互比较,左比右大则互换位置,外层每进行一轮,内层的比较个数-1,因为外层每一轮都会确定一个数的位置

<!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>
        var arr = [3, 2, 5, 1, 4];
        var tmp = 0;
        for (var i = arr.length - 1; i > 0; i--) {
            for (var j = 0; j < i; j++) {
                if (arr[j] > arr[j + 1]) {
                    tmp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = tmp;
                }
            }
        }
        console.log(arr);
    </script>
</head>

<body>
</body>

</html>

函数

声明函数

function 函数名(参数1,参数2,...){
    函数体
}

案例1:

<!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>
        function getSum(num1, num2) {
            console.log(num1 + num2);
        }
        function getTotalSum(num1, num2) {
            var min = num1, max = num2, tmp = 0, sum = 0;
            if (num1 > num2) {
                tmp = min;
                min = max;
                max = tmp;
            }
            for (var i = min; i <= max; i++) {
                sum += i;
            }
            // return sum;
            console.log('sum:' + sum);
        }
        getSum(2, 4);//6
        getTotalSum(12, 5);//68
        //如果传参个数不对不会报错,只会结果显示不正确
        //多于形参的个数会只取形参个数的实参
        //少于形参的个数会将缺少的参数自动定义为undefined
    </script>
</head>

<body>
</body>

</html>

return

  • 返回值,只能返回一个值,如果有多个值返回,只取最后一个值
  • return之后的代码不被执行
  • 没有return,函数返回undefined

标签:arr,console,log,笔记,JS,num,var,alert
From: https://www.cnblogs.com/ryukirin/p/17681162.html

相关文章

  • 【CSS】CSS笔记
    CSS笔记CSS就是美化网页的。CSS是层叠样式表(CascadingStyleSheets)的简称。有时也称为CSS样式表或级联样式表。也是一种标记语言。CSS简介选择器+声明h1{color:red;...}选择器{属性:值}CSS代码风格样式格式书写:展开格式,一个样式写一行。样式大小写:小写......
  • 笔记5-vivado IP 时钟 -单端时钟输入
     这里选MMCM进行配置    用例化来调用IP,先找到生成IP后,接口例化的地方,软件已经自动例化好,只需将下面这段拷贝到工程文件中进行调用 拷贝到led_prj.v文件中1`timescale1ns/1ps2/////////////////////////////////////////////////////////////////......
  • Go学习笔记1
    学习路线2023-Go全链路工程师课纲https://www.processon.com/view/link/63594cd97d9c0854f9ac855e一、搭建环境https://studygolang.com/dlmsi需要自己安装安装目录最好没有中文1.简单dos命令进入磁盘D:,C:查看目录结构dir进入目录......
  • 新人笔记-集合2.0
    importjava.util.ArrayList;/*publicbooleanremove(Object)删除指定的元素,返回删除是否成功publicEremove(intindex)删除指定索引处的元素,返回被删除的元素publicEset(intindex.Eelement)修改指定索引处的元素,返回被修改的元素publicEget(intin......
  • PostgreSQL JSON
    准备CREATETABLEorders( idserialNOTNULLPRIMARYKEY, infojsonNOTNULL);INSERTINTOorders(info)VALUES('{"customer":"LilyBush","items":{"product":"Diaper","qty":24}}'......
  • 《C++并发编程实战》读书笔记(4):原子变量
    1、标准原子类型标准原子类型的定义位于头文件<atomic>内。原子操作的关键用途是取代需要互斥的同步方式,但假设原子操作本身也在内部使用了互斥,就很可能无法达到期望的性能提升。有三种方法来判断一个原子类型是否属于无锁数据结构:所有标准原子类型(std::atomic_flag除外,因为它......
  • Cannot deserialize value of type `com.xx.xxxx` from Array value (token `JsonToke
    点击提交按钮的时候,直接服务器端报上面的错,意思是json不能解析。因为程序中用到了递归,就是自己引用了自己(实体类)。原因:实体类中children定义的是对象的形式,但是前端定义的是数组[]的形式。解决:前端改成对象形式,{},这样前后端一致就可以正常传值了。  上面children赋值了......
  • openGauss学习笔记-61 openGauss 数据库管理-常见主备部署方案
    openGauss学习笔记-61openGauss数据库管理-常见主备部署方案61.1单中心图1单中心部署图组网特点:单AZ部署,可以配置一个同步备一个异步备优势:三个node完全等价,故障任意一个node都可以提供服务;成本低。劣势:高可用能力较低,发生AZ级故障只能依赖节点恢复;适用性:适用于......
  • C++学习笔记
    C++:C的编译器叫gcc,C++的编译器叫g++c++最容易发生的问题是内存泄漏问题,例如释放p所指的空间时,应该是free(p);p=NULL;很多人忘记将p归零,这样下次不小心调用了p就会出现内存泄漏问题,如果要把释放内存写成函数,示例如下(两层指针)voidfree_mem(int**pp){if(pp==NULL......
  • STL学习笔记
    迭代器迭代器(iterator)是一种抽象的设计概念,现实程序语言中并没有直接对应于这个概念的实物。在<>一书中提供了23中设计模式的完整描述,其中iterator模式定义如下:提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。迭代器案例#include<ios......