Fork me on GitHub
魔芋铃

经典操作符示例

经典操作符示例

1、【~】操作符

  1. var ret = 15;

  2. console.log(ret); //15 
  3. ret = ~ret;
  4. // 00000000 00000000 00000000 00001111  这是正数15在计算机里面的原码(符号位是0)
  5. // 10000000 00000000 00000000 00001111  这是负数15在计算机里面的原码(符号位是1)
  6. // 10000000 00000000 00000000 00010000  减去1后(相当于加负数1)
  7.  
  8. console.log(ret); //-16
  9.  

2+】转number操作

 

  1. var s ='50';
  2. console.log(typeof s);//string
  3. console.log(s===+s);
  4. //false
  5. s =50;
  6. console.log(s===+s);//true
 

 

3+】字符连接

 

  1. console.log(3+5);//8
  2. console.log(3+'5');// '35'
  3. console.log('2'+7);// '27'
  4. console.log(true+false);// 1
  5. console.log(3+null);// 3
 

4<<】按位左移

 

  1. var val =5;
  2. //00000000 00000000 00000000 00000101 这是正数5在计算机里面的原码(符号位是0)
  3. //00000000 00000000 00000000 00010100 ← 丢弃左边 右边补0
  4. var ret = val<<2;
  5. console.log(ret);
  6. // 20
  7. val =-5;
  8. //10000000 00000000 00000000 00000101 这是负数5在计算机里面的原码(符号位是1)
  9. //11111111 11111111 11111111 11111010 这是负数5在计算机里面的反码(符号位不变,其他位取反)
  10. //11111111 11111111 11111111 11111011 这是负数5在计算机里面的补码(反码+1)
  11. //11111111 11111111 11111111 11101100 ← 丢弃左边 右边补0
  12. //10000000 00000000 00000000 00010011 转为反码(符号位不变,其他位取反)
  13. //10000000 00000000 00000000 00010100 转为补码(反码+1)
  14. var ret = val<<2;
  15. console.log(ret);// -20
 

 

 

5>>】按位右移

  1. var val =5;
  2. //00000000 00000000 00000000 00000101 这是正数5在计算机里面的原码(符号位是0)
  3. //00000000 00000000 00000000 00000001 →[01]→丢弃→左边补0
  4. var ret = val>>2;
  5. console.log(ret);
  6. //1
  7. val =-5;
  8. //10000000 00000000 00000000 00000101 这是负数5在计算机里面的原码(符号位是1)
  9. //11111111 11111111 11111111 11111010 这是负数5在计算机里面的反码(符号位不变,其他位取反)
  10. //11111111 11111111 11111111 11111011 这是负数5在计算机里面的补码(反码+1)
  11. //11111111 11111111 11111111 11111110 →[11]→丢弃→左边补1
  12. //10000000 00000000 00000000 00000001 转为反码(符号位不变,其他位取反)
  13. //10000000 00000000 00000000 00000010 转为补码(反码+1)
  14. var ret = val>>2;
  15. console.log(ret);// -2
 

6>>>】按位无符号右移

 

  1. var val =5;
  2. //00000000 00000000 00000000 00000101 这是正数5在计算机里面的原码(符号位是0)
  3. //00000000 00000000 00000000 00000001 →[01]→丢弃→左边补0
  4. var ret = val>>>2;
  5. console.log(ret);
  6. //1
  7. val =-5;
  8. //10000000 00000000 00000000 00000101 这是负数5在计算机里面的原码(符号位是1)
  9. //11111111 11111111 11111111 11111010 这是负数5在计算机里面的反码(符号位不变,其他位取反)
  10. //11111111 11111111 11111111 11111011 这是负数5在计算机里面的补码(反码+1)
  11. //00111111 11111111 11111111 11111110 →[11]→丢弃→左边补0
  12. var ret = val>>>2;
  13. console.log(ret);// 1073741822
 

 

7【in】判断属性的归属

  1. var obj ={ x:20, y:30}; 
  2. console.log('x' in obj); //true 注意必须加引号
  3. console.log('y' in obj); //true 注意必须加引号
  4. console.log('z' in obj); //false 注意必须加引  var arr = [2,'a',5];//该数组的索引是:0、1、2 
  5. console.log(0 in arr);   //true  
  6. console.log('0' in arr); //true 
  7. console.log(1 in arr);   //true  
  8. console.log('1' in arr); //true 
  9. console.log(2 in arr);   //true  
  10. console.log('2' in arr); //true  
  11. console.log(5 in arr);   //false 因为没有5这个索引
  12. console.log('5' in arr); //false 因为没有5这个索引
 

8==】和【===

 //思考一下,它如何比较? 

//如果以布尔型比较,则两个操作数都需要转换 

//如果以字符型比较,则只需要把0转换为'0'即可,发现不可能 

//如果以数字型比较,则只需要吧''转换为0即可。

 //通过对象,它是以数字型去比较。 

  1. console.log(0=='');//true 
  2. //不转型,直接比较 
  3. console.log(0==='');//false
  4.  
  5. console.log(null==undefined);//true 【==】操作符先把null和undefined都转型为false后才比较。
  6. console.log(null===undefined);//false 【===】操作符直接比较,不做转型。
  7. //无论如何比较,NaN都不等于它本身。
  8. console.log(NaN==NaN);//false  
  9. console.log(NaN===NaN);//false //怎么理解?//你可以把NaM它想象为字面量对象,//每当你写下一个字面量对象的时候,//它都是世界上独一无二的!
  10. console.log({x:1,y:2}=={x:1,y:2}); //false
  11. console.log({x:1,y:2}==={x:1,y:2});//false
 

9、三元运算

 

  1. //当第一个表达式是真值的时候,
  2. //返回表达式2,否则返回表达式3
  3. var rs =0?'真值':'假值';
  4. console.log(rs);// '假值'
 

 

 

10delete操作符

  1. //示例:删除对象属性
  2. var obj ={ a:2, b:3, c:4, d:5};
  3. console.log(obj);
  4. //Object {a: 2, b: 3, c: 4, d: 5}
  5. var rt =delete obj['c'];
  6. // 或者这样:delete obj.c;
  7. console.log(obj);//Object {a: 2, b: 3, d: 5}
  8. var rs ='c' in obj;
  9. console.log(rs);//false
  10. //示例:删除数组元素
  11. var arr =['a','b','c',4,5,6];
  12. console.log(arr);// ["a", "b", "c", 4, 5, 6]
  13. var rs =delete arr[2];//删除第三个元素,即c元素
  14. console.log(arr);// IE:a,b,,4,5,6 chrome:["a", "b", 3: 4, 4: 5, 5: 6]
 

11debugger

 

  1. function fn(a){
  2. if(!a){
  3. debugger;
  4. //相当于在这一行手动打了个断点
  5. var a,b=3;
  6. console.log(b);
  7. }}
  8. fn(0);

 


  1. publicclass A{
  2. publicstaticvoid main(String[] args){
  3. int a=10;
  4. System.out.println(~a);
  5. }
  6. }
  7. //输出结果为-11(~是按位取反操作符)
 

此题输出结果为什么是-11呢?要解决此问题,

       得明白整型在计算机是怎么存储的,

       它是以二进制补码形式存储的,占4个字节即32位。

  10二进制表示为: 00000000 00000000 00000000 00001010 (第一位代表符号位,0为正,1为负)

  10补码保持不变: 00000000 00000000 00000000 00001010

~10二进制表示为: 11111111 11111111 11111111 11110101

~10补码取反加1为:10000000 00000000 00000000 00001011(负数第一位符号位保留)

 即结果为-11





posted @ 2015-11-17 10:40  魔芋铃  阅读(225)  评论(0编辑  收藏  举报