1. var a = "10" | 0;
  2. alert(a);
  3. alert (typeof a);

结果为10,number。

这就是说这条语句可以将字符串转化为number。

如果:

  1.  
  2. var a = "sss" | 0;
  3. alert(a);

结果为0

parseInt("sss")的话,会返回NaN。

这个太强大了,就是说不管是啥都能转换为number。。。

比如:

  1.  
  2. (function (){})| 0;
  3. ({})| 0;
  4. ([])| 0;

我了个去……变态啊。

这玩意绝对不不合常理啊。

位运算是按操作符两边内容的二进制值计算的。

就拿String来说,字符串“1”和数值1的二进制难道是一样的?觉没可能!!

那function和object就更没法解释了。

我了个去……还是搞出java来看看吧。

  1. public class aaa {
  2.  
  3. public String toBinary(String str){
  4. char[] strChar = str.toCharArray();
  5. String result = "";
  6. for(int i = 0; i
  7.  
  8. 输出结果:
  9. 1010
  10. 110001 110000
  11.  
  12. 说明1的二进制值是1010,“1”的是110001110000

  13. 显然他们按位或运算后转换成二进制值完全不同。

  14. 运行再次还原回number后结果必然会不同。

  15. js的内核又是怎么实现的呢?

  16. 这里仅作猜测,可能为如下方式:

  17. public class aaa {
  18.      private int _OR_ (String s1, String s2){
  19.         int result1,result2;
  20.         try {
  21.             result1 = Integer.parseInt(s1);
  22.         }catch(Exception e){
  23.             result1 = 0;
  24.         }
  25.         try {
  26.             result2 = Integer.parseInt(s2);
  27.         }catch(Exception e){
  28.             result2 = 0;
  29.         }
  30.         return result1 | result2;
  31.     }
  32.     private int _OR_ (String s1, int s2){
  33.         int result1,result2;
  34.         try {
  35.             result1 = Integer.parseInt(s1);
  36.         }catch(Exception e){
  37.             result1 = 0;
  38.         }
  39.         return result1 | s2;
  40.     }
  41.     private int _OR_ (int s1, String s2){
  42.         int result2;
  43.         try {
  44.             result2 = Integer.parseInt(s2);
  45.         }catch(Exception e){
  46.             result2 = 0;
  47.         }
  48.         return s1 | result2;
  49.     }
  50.     private int _OR_ (int n1, int n2){
  51.         return n1 | n2;
  52.     }
  53.     public static void main(String[] args) {
  54.         System.out.println(new aaa()._OR_("10","1"));
  55.     }
  56. }
  57.  
  58. 由于在强类型语言中,位运算符仅能用在intlong类型中。

  59. 如果猜测没错,js是弱类型,所有内容在位运算操作前需要在js引擎实现内部统一转换为intlong

  60. 如果无法转换则默认为赋值为0。最后再经行位运算操作。由此也就产生了这个"变态"现象。

  61. javascript 的位操作符转换推断的更多相关文章

      1. javascript按位操作符操作以及用途
      1. 所有的按位操作符的操作数都会被转成补码(two's complement)形式的有符号32位整数.正数的补码是自己本身,负数的补码是取反后加一,所以经过操作运算后的值是补码形式. 描述 按位与( AN ...

      1. 【JavaScript】进制转换&位运算,了解一下?
      1. 前言 在一般的代码中很少会接触到进制和位运算,但这不代表我们可以不去学习它.作为一位编程人员,这些都是基础知识.如果你没有学过这方面的知识,也不要慌,接下来的知识并不会很难.本文你将会学习到: 进制转 ...

      1. 浅谈JavaScript位操作符
      1. 因为ECMAscript中所有数值都是以IEEE-75464格式存储,所以才会诞生了位操作符的概念. 位操作符作用于最基本的层次上,因为数值按位存储,所以位操作符的作用也就是操作数值的位.不过位操作符 ...

      1. 为什么不要在 JavaScript 中使用位操作符?
      1. 如果你的第一门编程语言不是 JavaScript,而是 C++ 或 Java,那么一开始你大概会看不惯 JavaScript 的数字类型.在 JavaScript 中的数字类型是不区分什么 Int,F ...

      1. javascript运算符——位运算符
      1. × 目录 [1]二进制 [2]非 [3]与[4]或[5]异或[6]左移[7]右移[8]>>>[9]应用 前面的话 位运算符是非常底层的运算,由于其很不直观,所以并不常用.但是,其速度 ...

      1. system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)
      1. 类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型 ...

      1. JavaScript 32位整型无符号操作
      1. 在 JavaScript 中,所有整数字变量默认都是有符号整数,这意味着什么呢? 有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数. 数值范围从 -2^ ...

      1. ECMAScript位操作符
      1. 在ECMAScript中,有少数的几个操作符可以对二进制位进行直接操作,这几个操作符本身直接对二进制进行操作,所有它们的本身是非常效率的,学习这一段有助于以后的优化以及理解. ECMAScript中采 ...

      1. 原码、反码、补码及位操作符,C语言位操作
      1. 计算机中的所有数据均是以二进制形式存储和处理的.所谓位操作就是直接把计算机中的二进制数进行操作,无须进行数据形式的转换,故处理速度较快. 1.原码.反码和补码 位(bit) 是计算机中处理数据的最小单 ...

    1.  
    2. 随机推荐

        1. 使用Log.isLoggable方法
        1. 在Audio Debug过程中想打开AudioService.java文件中的log,比如想打开setmode这段log: if (DEBUG_MODE) { Log.v(TAG, "set ...

        1. 服务器进程为何通常fork()两次
        1. 首先,要了解什么叫僵尸进程,什么叫孤儿进程,以及服务器进程运行所需要的一些条件.两次fork()就是为了解决这些相关的问题而出现的一种编程方法. 孤儿进程 孤儿进程是指父进程在子进程结束之前死亡(re ...

        1. Git 常用操作。
        1. 1.本地文件被修改后,却想要撤销所有的修改. SVN中可以简单地将被修改的文件直接删除,重新Update一下. Git中本以为可以将文件直接删除然后pull一下,然而却是不行的. 可以使用Revert ...

        1. dom 左右两侧得广告(兼容IE FF)
        1. <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

        1. DD_belatedPNG,解决 IE6 不支持 PNG-24 绝佳解决方案
        1. png24在ie下支持透明.终于找到下面的可行办法: 我们知道 IE6 是不支持透明的 PNG-24 的,这无疑限制了网页设计的发挥空间. 然而整个互联网上解决这个 IE6 的透明 PNG-24 的方 ...

        1. 第二百三十六天 how can I 坚持
        1. 太冷了,羽绒服没帽子,冻的耳朵疼. 她今天没有上班,原来是调休了. 其实应该是想到点啥,就应该写下,到晚上写就又忘了,什么都不记得了,这就是个需求吧. 睡觉.

        1. C# Common Keyword
        1. [C# Common Keyword] 1.abstract Use the abstract modifier in a class declaration to indicate that a c ...

        1. POJ 1160Post Office
        1. POJ 1160    Post Office 我不知道优化,我只知道最暴力的方法,O(V^3),居然100ms不到的过了 设DP[i][j][k]表示考虑前i个小镇,放了j个邮局,最后一个邮局的所在 ...

        1. UVA 11983 Weird Advertisement(线段树求矩形并的面积)
        1. UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...

        1. HDU 4599 Dice (概率DP+数学+快速幂)
        1. 题意:给定三个表达式,问你求出最小的m1,m2,满足G(m1) >= F(n), G(m2) >= G(n). 析:这个题是一个概率DP,但是并没有那么简单,运算过程很麻烦. 先分析F(n ...