关于“ | ”、“ & ”、“ || ”、“ && ”棍子肉丸
2017-10-14 本文已影响0人
Primers
这几个符号,是Js中的运算符号,插入到代码中,会进行相对的运算。
首先做一个区分,
“ | ”和“ || ”,在中文中可以理解成“或”,左边或右边成立,就成立。
“ & ”和“ && ”,在中文中可理解成“且”,左边且右边成立,才成立。
“ | ”和“ & ”进行的是位运算,是针对数值进行的,会把条件转化成数值来运算,返回的结果也是数值。即使运算的条件和结果是true或者false,结果也会对应的变成1或0。
“ || ”和“ && ” 进行的是逻辑运算,即对语句进行判断,其返回的结果是true或false。并且具有短路性质:只要一边成立(或不成立)的情况下,可直接忽略另一边,不再进行计算,而产生结果。
下面举个栗子。借用一下chelseayin的图片哈哈。
-
第一个栗子,“ 4 | 5” 和 “ 4 & 5 ” 。
由于是位运算,所以两边的语句会转化成二进制,像数字4就会转化成100,数字5就会转化成101,而且true和1、false和0是互相转换的。
第三位 | 第二位 | 第一位 | |
---|---|---|---|
4转成二进制→ | 1 | 0 | 0(false) |
5转成二进制→ | 1 | 0 | 1(true) |
“ | ” 运算→或 | 1 | 0 | 1(true) |
“ & ” 运算→且 | 1 | 0 | 0(false) |
由上面可见“ | ”运算的结果为101,转换回十进制就是5,所以结果输出5。
而“ & ”的运算结果是100,转换回十进制的结果是4,所以输出结果是4。
、
-
栗子二号,“ || ”和“ && ”,没错其实并没有栗子
但是,他们两个有短路性,即:- 在“ || ”“ 或 ”判断中,只要从左开始遇到一个语句成立,整个判断的结果就是成立,不必判断后面的语句,当左边不成立时才接着往下判断。
- 在“ && ”“ 且 ”判断中,只要从左开始遇到一个语句不成立,整个判断结果就是不成立,不必判断后面的语句,当左边成立时才接着往下判断。
Wait me Back