学习 JavaScript (四)核心概念:操作符
2021-06-30 02:04
标签:情况下 直接 不能 ++i inf 统一 com console 作用 JavaScript 的核心概念主要由语法、变量、数据类型、操作符、语句、函数组成,前面三个上一篇文章已经讲解完了。后面三个内容超级多,这篇文章主要讲解的是操作符。 什么叫做操作符? 这是一种工具,帮助我们操作字符串、数字值、布尔值,乃至对象,运用一些操作符能够让代码更简洁、计算更高效。它包括以下几种: 赋值操作符就是我们常见的 “=”,作用就是把右边的值赋给左边的变量。比如: 如果复杂一些(性能上不会有提升,看起来牛*一点而已),就是结合后面要碰到的操作符,变成这样: 记住:只对一个数值进行操作的符号叫做一元操作符,而不是指操作符自身的数量。 前置操作 ++i ,i 先自己加上 1 ,然后拿着计算后的 i 值进行下一步计算。 后置操作 i++,先进行下一步计算,然后再自己加上1。 递减操作和递增操作的规则一样,-- 符号在前面就先进行递减操作,否则就等接下来的计算进行完再递减。 前置操作 --i ,i 先自己减去 1 ,然后拿着计算后的 i 值进行下一步计算。 后置操作 i--,先进行下一步计算,然后再自己减去1。 统一记忆成:符号在前,马上加减。 前面讲的是两个相同的符号联合起来操作一个数值,而家下来介绍的这个操作符只有一个。 如果我们把操作符用在其他数据类型上,会发生怎样的情况呢?直接看例子: 而 位操作符是在最基本的、最底层的水平上对数值进行操作,也就是在内存中直接对二进制进行操作。 JavaScript 中的所有数据都是按照 64 位存储的,但是位操作符并不能直接对 64 位的数据进行操作,而是将其转换成 32 位的,操作完成后,再转换成 64 位的,所以我们真正关心的是计算机如何操作 32 位的数值。 对于有符号的整数,二进制从右往左数,32 位中的前 31 位表示整数的值,第 32 位是符号位,表示数值的符号,0 表示正数,1 表示负数。比如 数值 18 表示成二进制为: 写成简洁版的: 31 位中每一位都表示 2 的幂,所以从二进制转换成数值: 这是正数的二进制表达方式,负数的二进制需要用到二进制补码。步骤如下: 举一个例子(-18): -18 的绝对值等于 18: 求二进制反码: 反码加 1 最终得到的结果就是 11111111111111111111111111101110 。但是计算机给我们看的结果却不是这样,把 -18 转换成字符串会发现得到的结果是“-10010”,计算机隐藏了计算过程,直接展示友好的结果而已,别被骗了。 因为是底层操作,所以应用位操作的计算方式会比普通计算方式要快: 在上述位操作符中的按位非、按位与、按位或,我们已经简单介绍了一些跟布尔操作类似的用法。 总的来说,布尔操作的地位跟相等操作符(==、===)的地位是一样的,一共右三种:非(NOT)、与(AND)、或(OR)。 要点: 要点: 乘性操作符包括三种:乘法、除法、求模。在 JavaScript 中,操作数为非数值的情况下也能计算。比如: 可以看得出来,计算机自动执行了类型转换,如果参与的操作数不是数值,会先用 Number() 函数转换。 有三点需要注意: 求模就是取余数。 加法和减法都被称作是加法操作符。在这里说明一下,加性操作符也会强制转换数据类型。 需要注意的是, 减法两边的操作数和加法的区别是,无论是字符串还是对象,都应该转换成数值,再进行计算。不存在字符串相减的情况。 关系操作符就是小学的时候学过的小于()、小于或等于(=)。 JavaScript 中,使用关系操作符比较两个操作数后,返回的结果是布尔值(true、false)。 需要注意的是, 当比较的两个数都是数值时,直接比数字大小; 如果都是字符串则比较对应位置的字符编码值。比如: 任何数据类型和 NaN 比较都是返回 false。 这里有个小思考:如果 A、B 表示两个数据,有 A > B 不成立(false),则 A
JavaScript 提供两种比较方案: 相等( 严格相等( 总之,在实际使用过程种,建议是使用严格相等和严格不相等。 条件操作符也被称作是三目运算符,用法如下: 返回一个较大值,我们就可以不用谢一个 if 语句,直接按照下面这种写法就可以实现: 欢迎大家关注微信公众号:可视化技术( visteacher ) 不仅有前端和可视化,还有算法、源码分析、书籍相送 个人网站:http://blog.kurryluo.com 各个分享平台的 KurryLuo 都是在下。 用心学习,认真生活,努力工作! 学习 JavaScript (四)核心概念:操作符 标签:情况下 直接 不能 ++i inf 统一 com console 作用 原文地址:https://www.cnblogs.com/kurryluo/p/9644058.html操作符
01 赋值操作符
let a = 1;
*= ; // 乘/赋值
// 举例
let num = 10;
num = num * 10; // 和下面的用法效果一样
num *= 10;
下面的复杂赋值操作符如下:
/= ; // 除/赋值
%= ; // 模/赋值
+= ; // 加/赋值
-= ; // 减赋值
>=; // 有符号右移;
>>>= ; // 无符号右移;
02 一元操作符
递增操作:两个加号 ++
let i = 1;
let result = ++i + 20
console.log(i) // 2
console.log(result) // 22
let i = 1;
let result = i++ + 20
console.log(i) // 2
console.log(result) // 21
递减操作:两个加号 --
let i = 1;
let result = --i + 20
console.log(i) // 0
console.log(result) // 20
let i = 1;
let result = --i + 20
console.log(i) // 0
console.log(result) // 21
加和减操作符
+
或者 -
,对于数值来说,+
没有任何作用,对于 -
来说,把正数变成负数而已。let a = "01";
a = +a; // 1
let b = "1.1";
b = +b; // 1.1
let c = "z";
c = "z"; // NaN
let d = "true";
d = "true"; // 1
let e = 1.1;
e = 1.1; // 1.1
let o = {
valueOf: function(){
return -1;
}
} // 如果没有看懂这个对象的写法,不用着急,后面会针对对象做进一步的解释。
o = +o ; -1
-
操作则是在+
操作的结果前面加上负号(-)而已。其他类型的数据的转换规则依然不变。03 位操作符
0 0000000000000000000000000010010
符号位
10010
(2^4 x 1) + (2^3 x 0) + (2^2 x 0) + (2^1 x 1) + (2^0 x 0) = 18
0 0000000000000000000000000010010
1 1111111111111111111111111101101
1 1111111111111111111111111101110
~2 == -3
、~-2 == 1
、~true == -2
。
25 & 3 == 1
;
25 | 3 == 27
。
25 ^ 3 == 26
。
2 ,2 向左移动 5 位,左移不会影响操作数的符号位,即 -2 ; ,左移后的结果将会是 -64。
64 >> 5 == 2
,64 向右移动 5 位,右移不会影响操作数的符号位,即 -64 ,右移后的结果将会是 -2。
-64 >>> 5 == 134217726
。04 布尔操作符
要点:此时连用两个 “!”,则跟布尔转换函数 Boolean() 的作用是一样的,即还原了数值本身代表的布尔值。!false; //true
!true; //false
!null; //true
!{}; // false
!0; //true
!123; //false
!""; //true
!"abc"; //false
true && true; //true
true && false; //false
false && true; // fasle
false && false; // false
true || true; //true
true || false; //true
false || true; // true
false || false; // false
04 乘性操作符
"10" * 2 ; // 计算结果为 20
4 * 5
其中一个操作数是 NaN,则结果是 NaN。因为 Number() 转换非数值型字符串是 NaN,所以非数值型字符串和数字相乘就是 NaN 。其他的规则与乘法操作符类似。
44 / 11 ;等于 4
有一点需要注意:如果 Infinity 被 -Infinity 除,那么结果是 NaN。
---
26 % 5 ;等于 1
05 加性操作符
1 + 1
{} + 11; // 11
11 + {}; // "11[object,object]"
false + 1; // 1 ; 操作数可以调换位置,结果不变
true + 1; // 2 ; 同上
null + 1;// 1 ;同上
undefined + 1 ; // NaN;同上
2 - 1
06 关系操作符
"Brick"
07 相等操作符
==
)和不相等(!=
),会把操作数转换成相似的类型再比较。"5" == 5; //true
===
)和严格不相等(!==
),直接比较,不转换数据类型,使用严格相等操作符,有一丁点不相等就返回 false。"5" === 5; //false
08 条件操作符
let a = 条件语句 ? 1 :2
如果条件语句返回的是 true ,则把 1 赋值给 a,如果是 false, 则把 2 赋值给 a。
let a = (number1 > number2) ? number1 : number2