首页 > 其他分享 >02. 运算符

02. 运算符

时间:2023-01-09 20:33:07浏览次数:34  
标签:02 console log -- 运算符 false true

一、运算符

  运算符也称为操作符,它是完成一系列操作的符号。运算符用于将一个或几个值进行计算而生成一个新的值,对其进行计算的值称为操作数,操作数可以是常量或变量。

  JS 中的运算符按操作的 个数 可以分为 单目运算符、双目运算符 和 三目运算符。按操作的 功能 可以分为 算术运算符、自增自减运算符、比较运算符、赋值运算符、字符串运算符、逻辑运算符、条件运算符 和 其它运算符;

二、算术运算符

  算术运算符用于在程序中进行 加、减、乘、除、取余等运算。

算术运算符 描述 示例 结果
+ 加运算符 1 + 2 3
- 减运算符 5 - 2 3
* 乘运算符 2 * 3 6
/ 除运算符 3 / 2 1.5
% 求模运算符 3 % 2 1
** 幂运算 2 ** 3 8
let a = 1 + 2;
console.log(a);

a = 5 -2;
console.log(a);

a = 2 * 3;
console.log(a);

a = 3 / 2;
console.log(a);

a = 3 % 2;
console.log(a);

a = 2 ** 3;
console.log(a);

// 3 - '1' --> 3 -1
a = 3 - '1';
console.log(a);

// 3 + true --> 3 + 1
a = 3 + true;
console.log(a);

// 3 + null --> 3 + 0
a = 3 + null;
console.log(a);

// 3 + undefined --> 3 + NaN
a = 3 + undefined;
console.log(a);

a = 3 + '2';
console.log(a);
console.log(typeof a);

JS 是一门弱类型语言,当进行运算时会通过自动的类型转换类完成运算;

算数运算时,除了字符串的加法,其它运算的操作数是非数值时,都会转换为数值,然后再进行运算;

当任意一个值和字符串做加法运算时,它会将它值转换为字符串,然后再做拼串操作;

三、自增自减运算符

  ++ 和 -- 即可以放在变量的前面,也可以放在变量的后面;++ 和 -- 无论是放在变量的前面还是后面,单独写一行的结果是一样;如果 前++前-- 参与运算的话,那 先用后加(减) ;如果 后++后-- 参与运算的话,那 先加(减)后用

自增自减运算符 描述 示例 结果
++ 变量的值加1 a = 2; b = ++a;
a = 2;b = a++;
a = 3; b = 3;
a = 3; b = 2;
-- 变量的值减1 a = 2; b = --a;
a = 2; b = a--;
a = 1; b = 1;
a = 1; b = 2;
let a = 2;
let b = 2;
b = a++;
console.log('b = a++:');
console.log('a = ' + a);
console.log('b = ' + b);

a = 2;
b = 2;
b = ++a;
console.log('b = ++a:');
console.log('a = ' + a);
console.log('b = ' + b);

a = 2;
b = 2;
b = a--;
console.log('b = a--:');
console.log('a = ' + a);
console.log('b = ' + b);

a = 2;
b = 2;
b = --a;
console.log('b = --a:');
console.log('a = ' + a);
console.log('b = ' + b);

四、赋值运算符

  赋值运算符用来将一个值赋值给一个变量,是把右侧的值赋值给左边的变量。

赋值运算符 描述 示例 结果
= 将右边表达式的值赋值给左边的变量 a = 3 将 3 赋值给变量a
+= 将运算符左边的变量加上右边表达式的值赋值给左边的变量 a += b 将 a + b 的值给 a
-= 将运算符左边的变量减去右边表达式的值赋值给左边的变量 a -= b 将 a - b 的值给 a
*= 将运算符左边的变量乘以右边表达式的值赋值给左边的变量 a *= b 将 a * b 的值给 a
/= 将运算符左边的变量除以右边表达式的值赋值给左边的变量 a /= b 将 a / b 的值给 a
%= 将运算符左边的变量用右边表达式的值求模,并将结果赋值给左边的变量 a %= b 将 a % b 的值给 a
**= 将运算符左边的变量用右边表达式的值进行幂运算,并将结果赋值给左边的变量 a **= b 将 a ** b 的值给 a
??= 只有当变量的值为 null 或 undefined 时,才会赋值成功 a ??= 100 如果 a 的值为 null 或 undefined,则 a = 100;
否则 a 为原来的值;
let a = 3;
let b = 2;
console.log('a = ' + a);
console.log('b = ' + b);

a = 3;
a += b;
console.log('a += b: ' + a);

a = 3;
a -= b;
console.log('a -= b: ' + a);

a = 3;
a *= b;
console.log('a *= b: ' + a);

a = 3;
a /= b;
console.log('a /= b: ' + a);

a = 3;
a %= b;
console.log('a %= b: ' + a);

a = 3;
a **= b;
console.log('a **= b: ' + a);

a = 3;
a ??= 100;
console.log('a 不为 null 或 undefined 时,a ??= b: ' + a);

a = null;
a ??= 100;
console.log('a 为 null 或 undefined 时,a ??= b: ' + a);

五、一元运算符

一元运算符 描述 示例
+ 不会改变数值的符号 +a
- 可以对数值进行符号取反 -a
let a = 10;
let b = +a;
console.log(b);

b = -a;
console.log(b);

b = '123';
b = +b;
console.log(b);

当我们对非数值类型进行正负运算时,会先将其转换为数值然后再运算;

五、关系运算符

  关系运算符 也被称为 比较运算符;关系运算符的结果都是 boolean 型,其结果要么是 true 要么是 false;

关系运算符 描述 示例 结果
< 小于 3 < '5' true
> 大于 3 > '5' false
<= 小于等于 3 <= '5' true
>= 大于等于 3 >= '5' false
== 等于,只根据表面值进行判断,不涉及数据类型 3 == '3' true
=== 绝对等于,根据表面值和数据类型同时进行判断 3 === '3' false
!= 不等于,只根据表面值进行判断,不涉及数据类型 3 != '3' false
!== 不绝对等于,根据表面值和数据类型同时进行判断 3 !== '3' true
console.log('3 < "5": ' + (3 < '5'));
console.log('3 > "5": ' + (3 > '5'));
console.log('3 <= "5": ' + (3 <= '5'));
console.log('3 >= "5": ' + (3 >= '5'));

console.log('3 == "3": ' + (3 == '3'));
console.log('3 === "3": ' + (3 === '3'));
console.log('3 != "3": ' + (3 != '3'));
console.log('3 !== "3": ' + (3 !== '3'));

console.log('"abc" < "b": ' + ('abc' < 'b'));
console.log('"12" < "2": ' + ('12' < '2'));

// null和undefined进行相等比较时返回true
console.log('null == undefined: ' + (null == undefined));
console.log('null === undefined: ' + (null === undefined));

// NaN不和任何值相等,包括它自身
console.log('NaN == NaN:' + (NaN == NaN));

当对非数值进行关系运算时,它会先将其转换为数值,然后再比较;

当关系运算符的两端都是字符串时,它不会将字符串转换为数字,而是逐位的比较字符的 Unicode编码。

使用相等运算符(==)比较两个不同类型的值时,它会将其转换为相同的类型(通常转换为数值),然后再比较类型转换之后值相同也会返回 true;

null 和 undefined 进行相等比较时返回 true;

NaN 不和任何值相等,包括它自身;

全等运算符(===)用来比较两个值是否全等,它不会进行自动的类型转换,如果两个值的类型不同直接返回 false;

六、逻辑运算符

逻辑运算符 描述 示例
&& 逻辑与,当运算符左右两边表达式都为真时,结果为真 a && b
|| 逻辑或,只要运算符任意一边的表达式为真,结果为真 a|| b
! 逻辑非,对表达式的结果取反 !a
// 逻辑与,当运算符左右两边表达式都为真时,结果为真
console.log('true && true: ' + (true && true));
console.log('true && false: ' + (true && false));
console.log('false && true: ' + (false && true));
console.log('false && false: ' + (false && false));

// 逻辑或,只要运算符任意一边的表达式为真,结果为真
console.log('true || true: ' + (true || true));
console.log('true || false: ' + (true || false));
console.log('false || true: ' + (false || true));
console.log('false || false: ' + (false || false));

// 逻辑非,对表达式的结果取反
console.log('!true: ' + (!true));
console.log('!false: ' + (!false));

// 短路与
let a = 3;
false && (--a);
console.log(a);

// 短路或
a = 3;
true || (++a);
console.log(a);

// 对非布尔值进行逻辑与
let result = 1 && 2;
console.log(result);

result = 1 && 0;
console.log(result);

result = 0 && NaN;
console.log(result);

// 对非布尔值进行逻辑或
result = 1 || 2;
console.log(result);

result = 'hello' || NaN;
console.log(result);

result = NaN || 1;
console.log(result);

如果对一个非布尔值进行取反,它会先将其转换为布尔值然后取反;

与运算是短路的与,如果第一个值为 false,则不看第二个值;

与运算是找 false 的,如果找到 false 则直接返回,没有 false 才会返回 true;

对非布尔值进行与运算,它会转换成布尔值然后运算,但是最终返回原值;如果第一个值为 false,则直接返回第一个值,否则,返回第二个值;

或运算也是短路的或,如果第一个值为 true,则不看第二个值;

对于非布尔值进行或运算,它会转换成布尔值然后运算,但是最终返回原址;如果第一个值为 true,则直接返回第一个值,否则,返回第二个值;

七、条件运算符

  • 格式:
    • 条件表达式 ? 表达式1 : 表达式2
  • 执行顺序
    • 条件表达式在执行时,会先对条件表达式进行求值判断:
      • 如果结果为 true,则执行表达式1;
      • 如果结果为 false,则执行表达式2;
let a = 10;
let b = 20;

a > b ? alert('a > b') : alert('a < b');

八、运算符的优先级

  我们可以使用小括号来提升运算符的优先级;

优先级 运算符
1 .、[]、()
2 ++、--、-、!、deelete、new、typeof、void
3 *、/、%
4 +、-
5 <<、>>、>>>
6 <、>、<=、>=、in、instanceof
7 ==、!=、===、!===
8 &
9 ^
11 |
12 &&
13 ||
14 ? :
15 =
16 *=、/=、%=、+=、-=、<<=、>>=、>>>=、&=、^=、|=
17 ,

标签:02,console,log,--,运算符,false,true
From: https://www.cnblogs.com/nanoha/p/17038456.html

相关文章

  • 老黑2022秋季上课内容
    老黑2022秋季上课内容链式前向星关键代码\(N\)表示点数+10;\(M\)表示边数+10。有向边初始数组structEdge{ intnext,to,v; /* *next记录上一条边同......
  • 2023/1/9 20221321杨渝学习打卡
    Python入门学习学习链接:https://www.bilibili.com/video/BV14r4y1k7F9/?spm_id_from=333.999.0.0&vd_source=a989a1afa6cb8b6527dd9bf059d71439输入,输出,计算1.输入:在c语......
  • 2023/1/9.1
    For循环虽然所有循环结构都可以用while或者do...while表示,但Java提供了另一种语句——for循环,使一些循环循环结构变得更加简单。for循环语句是支持迭代的一种通......
  • 2023/1/9.2
    breakcontinue认识break在任何循环语句的主题部分,均可用break控制循环的流程。break用户强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)i......
  • 「Codeforces」寒假训练 2023 #3
    A.StringLCM原题链接#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e5+10;intq;strings,t;intlens,lent;int_lcm;......
  • 洛谷 P1434 [SHOI2002] 滑雪 首次markdown测试
    [SHOI2002]滑雪题目描述Michael喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来......
  • 2023新年红包,兔年HTML红包页面代码【2023新年快乐_附源码】
    一.新年红包,兔年HTML红包页面1.1资源获取和效果预览1.源码资源获取:https://download.csdn.net/download/weixin_52908342/87373505快速通道:点击跳转下载新年红包,兔年......
  • 波澜起伏的2022(身边的风景很美,可以停下来看看)
     前言  昨天晚上和女朋友聊天,突然就问起我2023年的计划拟定好了吗。是啊,恍惚之间,又是一年末尾。不禁想起2022年初的时候,总觉得是昨日的光景,还没走远。  细算......
  • 回首2022年,人间不清醒
        说一下目前的经历情况,本人java开发暖男一枚,年初开始在成都找工作,这段时间是最煎熬的,这期间收到过很多叫你面试的,每天都奔波在地铁上,不是在面试就是在面试的路......
  • C语言学生管理系统[2023-01-09]
    C语言学生管理系统[2023-01-09]学生管理系统利用数据结构的单链表的框架实现学生管理系统以下功能要求:1)学生个人信息:姓名、学号、专业、性别、年龄、联系方式、成绩。......