Javascript-中常用运算符

发布时间:2024年01月24日

目录

数据类型

常见运算

算术运算符

比较运算符

逻辑运算符

赋值运算符

自增/减运算符

三目运算符

位运算符


数据类型

在 JS 中有以下两大类:

  • 基本数据类型

    • 数值类型(Number)

      • 整数 (int)

      • 浮点数(float)

    • 布尔类型(Boolean),有两个值:true 和 false

    • 字符串(String),它可以是单引号包裹的数据,也可以是双引号包裹的数据。在 JS 推荐使用单号

    • 空(null),表示不存在

    • 未定义(undefined),表示变量定义了,但是没有给它赋值就使用这个变量。

    • 不是数字(NaN - Not a Number),判断是否为数字,如果不是返回 true, 如果是返回 false

  • 引用数据类型

    • 数组(Array),它是用于存储一组相同类型的数据

    • 对象(Object),在 JS 万物皆对象

判断数据类型我们在 JS 中是通过typeof 运行符来实现的。

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>数据类型</title>
</head>
<body>
<script>
 ? ?// 1. 定义一个整数类型的变量
 ? ?let num = 10
 ? ?console.log(num, typeof num); // 在控制台中输出变量的值以及变量的类型
?
 ? ?// 2. 定义一个浮点类型的变量
 ? ?let money = 10000.5
 ? ?console.log(money, typeof money);
?
 ? ?// 3. 定义一个布尔类型的变量
 ? ?let bool = false
 ? ?console.log(bool, typeof bool);
?
 ? ?// 4. 定义一个字符串类型的变量
 ? ?let str1 = "hello"
 ? ?console.log(str1, typeof str1);
 ? ?let str2 = 'world'
 ? ?console.log(str2, typeof str2);
?
 ? ?// 5. 空值类型,它只有一个值 null
 ? ?let nullVal = null
 ? ?console.log(nullVal, typeof nullVal);
?
 ? ?// 6. 未定义
 ? ?let age
 ? ?console.log(age, typeof age)
?
 ? ?// 7. 判断是否为数字
 ? ?let n = 'a'
 ? ?console.log(isNaN(n), typeof isNaN(n))
</script>
</body>
</html>

常见运算

算术运算符

在 JS 算术运算符包含 加、减、乘、除、取模等。

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>算术运算数</title>
</head>
<body>
<script>
 ? ?// 数值类型的算术运算
 ? ?let a = 10
 ? ?let b = 2
 ? ?// 加法运算
 ? ?let r = a + b
 ? ?console.log(r);
 ? ?// 减法运算
 ? ?r = a - b
 ? ?console.log(r);
 ? ?// 乘法
 ? ?r = a * b
 ? ?console.log(r);
 ? ?// 除法
 ? ?r = a / b
 ? ?console.log(r);
 ? ?// 取模,得到除法的余数
 ? ?r = a % b
 ? ?console.log(r);
 ? ?// 幂运算
 ? ?r = a ** b
 ? ?console.log(r)
?
 ? ?console.log('-----------------------------')
?
 ? ?// 布尔类型的算术运算
 ? ?let b1 = true
 ? ?let b2 = true
 ? ?r = b1 + b2
 ? ?console.log(r) ?// 当两个布尔值进行加法运算时,会把 true 变为 1,false 变为 0 后再作运算
 ? ?r = b1 - b2
 ? ?console.log(r)
 ? ?r = b1 / b2
 ? ?console.log(r)
 ? ?r = b1 * b2
 ? ?console.log(r)
?
 ? ?// 字符串的算术运算
 ? ?let s1 = '30'
 ? ?let s2 = '20'
 ? ?r = s1 + s2
 ? ?console.log(r) ? // 字符串作加法操作其实就是进行字符串拼接操作
 ? ?r = s1 - s2
 ? ?console.log(r, typeof r) ?// 当字符串作减法操作时,它会看这个字符串能不能转换为数字,如果能则转换后再计算,如果不能则输出 NaN
 ? ?r = s1 * s2
 ? ?console.log(r, typeof r) // 当字符串作乘法时,也会先看这个字符串能不能转换为数字,如果能则按数值进行计算,否则输出 NaN
?
 ? ?console.log('-----------------------------')
?
 ? ?// 空值
 ? ?let n1 = null
 ? ?let n2 = null
 ? ?r = n1 + n2
 ? ?console.log(r, typeof r)
?
 ? ?let n3 = 5
 ? ?r = n1 + n3
 ? ?console.log(r, typeof r) ?// 当空值进行算术运算时,它会转换为数值 0,然后再作计算
?
 ? ?// 未定义
 ? ?let un1 = undefined
 ? ?let un2 = undefined
 ? ?r = un1 + un2
 ? ?console.log(r) ? // 未定义类型不能进行算术运算
</script>
</body>
</html>

比较运算符

比较运算也中关系运算。它是用于比较两个数之间的大小,结果为一个布尔类型的值。比较运算符包含:大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)、不等于(!=)、全等于(===)。

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>比较运算符</title>
</head>
<body>
<script>
 ? ?let n1 = 10
 ? ?let n2 = 20
 ? ?r = n1 > n2
 ? ?console.log(r, typeof r)
 ? ?r = n1 < n2
 ? ?console.log(r, typeof r)
 ? ?r = n1 >= n2
 ? ?console.log(r, typeof r)
 ? ?r = n1 <= n2
 ? ?console.log(r, typeof r)
 ? ?r = n1 == n2
 ? ?console.log(r, typeof r)
 ? ?r = n1 != n2
 ? ?console.log(r, typeof r)
 ? ?console.log('-------------------------------')
 ? ?let n3 = 5
 ? ?let n4 = 5
 ? ?let n5 = '5'
 ? ?r = n3 == n4
 ? ?console.log(r)
 ? ?r = n3 === n4
 ? ?console.log(r)
?
 ? ?r = n3 == n5 ?// 使用 == 等号的方式来进行比较时,是比较的两个变量转换为数值类型后的值的大小。
 ? ?console.log(r)
 ? ?r = n3 === n5 // 使用 === 等号的方式进行比较时,比较的是值的大小以及它的类型是否相同。只两者都相同才为 true,否则为 false
 ? ?console.log(r)
?
 ? ?console.log('-----------------------------')
?
 ? ?//----------布尔类型的比较运算---------------------
 ? ?let b1 = true
 ? ?let b2 = false
 ? ?r = b1 === b2
 ? ?console.log(r) ? ?// 使用布尔值来做比较运算是没有意义的,因为比较运算的结果本身就是布尔类型的值。
?
 ? ?console.log('-----------------------------')
?
 ? ?let s1 = 'hello'
 ? ?let s2 = 'hallo'
 ? ?s1 = '100'
 ? ?s2 = '10'
 ? ?s1 = 'World'
 ? ?s2 = 'world'
 ? ?r = s1 === s2
 ? ?r = s1 > s2
 ? ?console.log(r)
</script>
</body>
</html>

逻辑运算符

逻辑运算符主要是指多个条件之间的关联关系,逻辑运算符有:与(&&)、或(||)以及非(!)这三种

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>逻辑运算符</title>
</head>
<body>
<script>
 ? ?let n1 = 5
 ? ?let n2 = 6
 ? ?let b1 = true
 ? ?let b2 = false
?
 ? ?let r = n1 && n2 && b1
 ? ?console.log(r, typeof r) // 使用与运算时,只有全部都是 true ,结果才是 true,否则结果为 false
?
 ? ?r = n1 > n2 || b1 || b2
 ? ?console.log(r) ? // 使用或运算时,只有全部为 false,结果才是 false,否则结果为 true
?
 ? ?r = !b1
 ? ?console.log(r)
 ? ?r = !b2
 ? ?console.log(r) ?// 使用非运算时,如果本身为 true 则结果为 false,如果本身为 false 则结果为 true,即取反
?
 ? ?r = n1 < n2 & b2
 ? ?console.log(r)
 ? ?r = b1 & b2
 ? ?console.log(r)
 ? ?r = b1 | b2
 ? ?console.log(r)
</script>
</body>
</html>

在逻辑运算符中,也可以使用 & 号来表示与运算,使用 | 符号来表示或运算。它们与 && 以及 || 是有区别的。

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>逻辑运算符的区别</title>
</head>
<body>
<script>
 ? ?let a = 5
 ? ?let b = 0
 ? ?let bool = false
 ? ?//r = bool && a / b
 ? ?r = bool || a / b
 ? ?console.log(r) ? // && 是具有短路效果的。|| 也是具有短路效果的
</script>
</body>
</html>

赋值运算符

在 JS 中赋值运算符有以下几种:

  • =:将它这符号右边的值赋给这个符号左边的变量

  • +=:把符号右边的值与这个变量之前的值相加后再赋给这个变量

  • -=:把符号右边的值与这个变量之前的值相减后再赋给这个变量

  • *=:把符号右边的值与这个变量之前的值相乘后再赋给这个变量

  • /=:把符号右边的值与这个变量之前的值相除后再赋给这个变量

  • %=:把符号右边的值与这个变量之前的值取模后再赋给这个变量

  • **=:把符号右边的值与这个变量之前的值幂运算后再赋给这个变量

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>赋值运算符</title>
</head>
<body>
<pre>
 =:将它这符号右边的值赋给这个符号左边的变量
 +=:把符号右边的值与这个变量之前的值相加后再赋给这个变量
 -=:把符号右边的值与这个变量之前的值相减后再赋给这个变量
 *=:把符号右边的值与这个变量之前的值相乘后再赋给这个变量
 /=:把符号右边的值与这个变量之前的值相除后再赋给这个变量
 %=:把符号右边的值与这个变量之前的值取模后再赋给这个变量
 **=:把符号右边的值与这个变量之前的值幂运算后再赋给这个变量
 ?</pre>
?
<script>
 ? ?let a = 10 ? // 使用 = 进行赋值运算,它是将等号右边的值赋给等号左边的变量
 ? ?console.log(a)
?
 ? ?a += 10 ?// 它等价于 a = a + 10
 ? ?console.log(a)
?
 ? ?a -= 10 ? // 它等价于 a = a - 10
 ? ?console.log(a)
?
 ? ?a *= 10 ? // 它等价于 a = a * 10
 ? ?console.log(a)
?
 ? ?a /= 10 ? // 它等价于 a = a / 10
 ? ?console.log(a)
?
 ? ?a %= 10 ?// 它等价于 a = a % 10
 ? ?console.log(a)
?
 ? ?a **= 10 ?// 它等价于 a = a ** 10 即 0 的 10 次方
 ? ?console.log(a)
</script>
</body>
</html>

自增/减运算符

严格来说,它是属于算术运算符中,我们在这里把单独拿出来进行讲。

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>自增自减运算符</title>
</head>
<body>
<script>
 ? ?let a = 20
 ? ?console.log(a)
 ? ?//a = a + 1
 ? ?//a += 1
 ? ?//a++ ? ? ? ? ? ? // 这就是自增,它是在原来值的基础上加 1
 ? ?++a
 ? ?console.log(a)
?
 ? ?//a -= 1
 ? ?//a-- ? ? ? ? // 这就是自减,它是在原来值的基础上减 1
 ? ?--a
 ? ?console.log(a)
</script>
</body>
</html>

问题:a++ 和 ++a 有什么区别?

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>自增两种写法的区别</title>
</head>
<body>
<script>
 ? ?let a = 10
 ? ?let b = a++ + ++a + a++ + ++a
 ? ?console.log(b, a) ? // 50  48
</script>
</body>
</html>

根据上面的代码运行的结果以及分析的过程,我们发现:++ 后是先使用它的值,然后自己再加 1,而 ++ 在前是先自己加 1 后,再把结果进行相加。

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>自增两种写法的区别</title>
</head>
<body>
<script>
 ? ?let a = 10
 ? ?//let b = a++ + ++a + a++ + ++a
 ? ?//console.log(b, a) ? // 48  14
?
 ? ?let b = ++a - a-- + --a + a++ - a--
 ? ?//  b = 11  - 11  + 9 ? + 9  - 10
 ? ?// ? ? a=11  a=10 ? a=9  a=10  a=9
 ? ?console.log(b, a) ? // 8 9
</script>
</body>
</html>

总结:++在前是先自增再运算,++在后是先运算再自增。

三目运算符

三目运算符出现的目的是为了简化 if 语句。它的语法格式为:变量 = 表达式 ? 值1 : 值2。当表达为 true 时,取值1,否则取值2。

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>三目运算符</title>
</head>
<body>
<script>
 ?let a = 100
 ?let b = 15
 ?let c ?= a > b ? 'a大于b' : 'a小于b'
 ?console.log(c)
</script>
</body>
</html>

位运算符

位运算符会涉及到二进制的计算,会有补码、原码、反码。位运算符有 & 、| 、^ 、<< 、>> 以及 >>>

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<title>位运算符</title>
</head>
<body>
<script>
 ? ?let a = 5
 ? ?let b = 6
?
 ? ?//let c = a & b  // 4
 ? ?//let c = a | b  // 7
 ? ?//let c = a ^ b ? // 3
 ? ?//let c = a << 2 ? // 20
 ? ?let c = a >> 2 ? // 1
 ? ?console.log(c)
</script>
</body>
</html>
文章来源:https://blog.csdn.net/m0_72210904/article/details/135784308
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。