《JS运算符 — 位运算符》由会员分享,可在线阅读,更多相关《JS运算符 — 位运算符(4页珍藏版)》请在金锄头文库上搜索。
1、JS 运算符 位运算符一. 按位与运算符&/ 运算数均为整型/ 运算数可以被转换为整型alert(9 & ”9”); / 9alert(9 & ”10”); / 8alert(1.25 & 3.25); / 1/ 一个或两个运算数均无法被转换整型alert(Infinity & Infinity); / 0alert(NaN & Infinity); / 0 alert(null & null); / 0 alert(undefined & undefined); / 0alert(null & undefined); / 01. 该运算符对它的运算数逐位执行布尔 AND 操作,只有两个运算数
2、中相应的位都为 1 时,结果中的这一位才为 1,它要求其运算数为整型,假设运算数不是整型,那么会尝试将其转换为 32 位整型,假设无法转换,就返回 NaN。alert(9&9); / 9alert(9&10); / 8alert(1&3); / 1alert(1 & ”a”);/0alert( & /d/);/0alert(NaN & NaN);/0二. 按位或运算符|/ 运算数均为整型1. 该运算符对它的运算数逐位执行布尔 OR 操作,假设其中一个运算数中相应位为 1 或者两个运算数中的相应位都为 1,结果中的这一位就为 1,它要求其运算数为整型,假设运算数不是整型,那么会尝试将其转换为 3
3、2 位整型,假设无法转换,就返回 NaN。alert(9|9); / 9alert(9|10); / 11alert(1|3); / 3alert(1 | ”a”);/1alert(10 | null);/10alert(100 | NaN);/100/ 运算数可以被转换为整型alert(9 | ”9”); / 9alert(9 | ”10”); / 11alert(1.25 | 3.25); / 3/ 一个运算数无法被转换整型/ 两个运算数均无法被转换成整型alert( | /d/); / 0 alert(NaN | NaN); / 0alert(Infinity | Infinity);
4、/ 0 alert(NaN | Infinity); / 0 alert(null | null); / 0 alert(undefined | undefined); / 0alert(null | undefined); / 0三. 按位非运算符alert(5); / 相当于-5 - 1 = -6alert(); / -1alert(); / -1alert(undefined); / -1alert(Infinity); / -1alert(NaN); / -1alert(null); / -1 alert(function() ); / -11. 该运算符的作用,相当于转变运算数的符号
5、并减 1。它要求其运算数为整型,假设运算数不是整型, 那么会尝试将其转换为 32 位整型,假设无法转换,就返回 NaN。alert(10);/-11alert(”10”);/-11alert(”aa”);/-1alert(/d/);/-1/ 网上有个老外对的运算原理做了分析,他的分析如下以foo 为例,foo 是经过整型转换后的结果:2. 的运算原理typeof foo = ”number” & !isNaN(foo) & foo != Infinity? foo 0 ? Math.floor(foo) : Math.ceil(foo) : 0;/ 基于老外的分析,的运算原理可以想象为这样:t
6、ypeof foo = ”number” & !isNaN(foo) & foo !=Infinity ? foo 0 ? -(Math.floor(foo) + 1) : -(Math.ceil(foo) + 1) : -1;alert(function()alert(20);(); / 先输出 20,然后输出-1,why?/ 分析:(1) “()“的优先级要高于“,所以 function()alert(20);会先与()结合,再与结合;(2) 会执行其后的语句,但执行结果不会成为运算数,即function()alert(20);()不会成为20;(3) 还会对其后的语句进展求值运算,我们通
7、过模拟来验证一下: var func = function() alert(1);func.valueOf = function() return 10; alert(function() alert(1);); / -1alert(func); / -113. 一个较特别的例子四. 左移运算符/ 运算数均为整数alert(1 2); / 4/ 运算数可以被转换为整数alert(1 “2“); / 41. 该运算符有两个运算数:ab,将 a 左移b 位相当于 a 乘以 2 的 b 次方;两个运算数都要求是整数,或可以被转换为整数。alert( 2); / 0alert(NaN 2); / 0a
8、lert(Infinity 2); / 0alert(function() 2); / 0alert(undefined 2); / 0alert(null 2); / 02. 当运算数 a 无法被转换为整数时,运算结果为 0。alert(2 ); / 23. 当运算数 b 无法被转转换为整数时,运算结果为运算数 a,相当于 a0。alert(20 NaN); / 20 alert(10 Infinity); / 10alert(“a“ Infinity); / 0 alert(NaN / 运算数均为整数alert(7 1); / Math.floor(7/2) = 3 alert(-7 1); / Math.floor(-7/2) = -4/ 运算数无法被转换为整数alert(NaN 1); / 0 alert(NaN NaN); / 0 alert(20 NaN); 201. 该运算符有两个运算数:aalert(“a“ 2); / 0 alert(“a“ NaN); / 0 alert(20 NaN); / 201. 该运算符有两个运算数:ab,当运算数无法被转换成整数时,运算结果的状况与左移运算符一样。