今天学习javascript的位操作符,对按位非的操作符(~)产生了疑问,因为以前学的非都是(!)就疑问是我自己记错了还是我买的书本版本太旧了。去百度后发现两者不一样,一个是按位非(~),一个是逻辑非(!)。打算写一篇文章来总结一下他俩的区别,并加深一下记忆。
按位与或非和逻辑与或非的区别
定义:
按位与或非是对计算机位的操作,属于计算机二进制运算的操作。——位操作符
逻辑与或非是对boolean(布尔)值的操作。——布尔操作符
操作符:
按位 与(&) 或(|) 非(~). 逻辑 与(&&) 或(||) 非(!)
简述一下这些操作符
按位与(&):
按位与操作是将两个数值的每一位对齐,然后两个数值对应位都是1时返回1,任何一位是0结果都是0。
举个栗子:
var result =25 & 3; alert(result);
//结果为1
分析 :
25的二进制码1 1 0 0 1
3的二进制码0 0 0 1 1
—————————
& =0 0 0 0 1
按位或(|) :
按位或操作是有一位是1的情况下就返回1,只有在两位都是0的情况下才返回0。
继续用刚才的栗子:
var result =25 | 3; alert(result);
〃结果为27
分析:
25 = 1 1 0 0 1
3 = 0 0 0 1 1
—————————
或 = 1 1 0 1 1
按位非(~):
按位非的结果就是返回数值的反码(反码就是0变1 1变0)
举个栗子:
var num1 = 25; var num2 = ~num1; alert(num2);
// 结果为-26。
哎哎哎,忘了一个按位异或,操作符由一个插入符号(^)来表示。
按位异或(^):
按位异或这个操作在两个数值对应位上只有一个 1时才返回1(画圈圈,重点,只有一个1的时候)如果对应的两位都是0或都是1的话返回0。
接下来就是布尔操作符了,布尔操作符一共有三个,那就是逻辑与逻辑或逻辑非
逻辑非(!): 逻辑非操作符将操作数转化为一个布尔值,然后对齐求反。
规则:
如果操作数是一个对象, 返回false;
如果操作数是一个空字符串,返回true;
如果操作数是一个非空字符串,返回false;
如果操作数是数值0,返回true;
如果操作数是任意非0数值(包括Infinity),返回false;
如果操作数是null,返回true;
如果操作数是NaN,返回true;
如果操作数是undefined,返回true。
举几个书上的栗子:
alert(! false) ; 〃true
alert(! “blue”) ; 〃false
alert(!0) ; 〃true
alert(!NaN) ; 〃true
alert(!””) ; 〃true
alert(!12345) ; 〃false
滴滴:如果说一个逻辑非操作符是对齐求反,那么,两个逻辑非操作符就可以得到真正的布尔值。
逻辑与(&&):
var result = true && false;
真值表:
第一个操作符 第二个操作符 结果
true true true
true false false
false true false
false false false
== 逻辑与操作符是一个短路操作符 ==
逻辑或(||):
var result = true || false;
真值表:
第一个操作符 第二个操作符 结果
true true true
ture false true
false true true
false false false
规则:
如果第一个操作数是对象,则返回第一个操作数 ;
如果第一个操作数的求值结果为false,则返回第二个操作数;
如果两个操作数都是对象,则返回第一个操作数;
如果两个操作数都是null,则返回null;
如果两个操作数都是NaN,则返回NaN;
如果两个操作数都是undefined,则返回undefined。
注意:逻辑与和逻辑或都是一个短路运算符
哒哒,文章到这就总结完了
嘻嘻嘻嘻嘻嘻