javascript的变态位运算

var a = "10" | 0;
 alert(a);
 alert (typeof a);
结果为10,number。

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

如果:
var a = "sss" | 0;
alert(a);
结果为0.
parseInt("sss")的话,会返回NaN。
这个太强大了,就是说不管是啥都能转换为number。。。

比如:
(function (){})| 0;
({})| 0;
([])| 0;

我了个去……变态啊。

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

位运算是按操作符两边内容的二进制值计算的。
就拿String来说,字符串“1”和数值1的二进制难道是一样的?觉没可能!!
那function和object就更没法解释了。

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

public class aaa {

public String toBinary(String str){
        char[] strChar = str.toCharArray();
        String result = "";
        for(int i = 0; i < strChar.length; i++){
            result += Integer.toBinaryString(strChar[i]);
        }
        return result;
        }
  
    public static void main(String[] args) {
        String s = "1";
        int n = 1;
        System.out.println(Integer.toBinaryString(n));
        System.out.println(new aaa().toBinary(s));
    }
输出结果:
1010
110001 110000

说明1的二进制值是1010,“1”的是110001110000。

显然他们按位或运算后转换成二进制值完全不同。
运行再次还原回number后结果必然会不同。
那js的内核又是怎么实现的呢?
这里仅作猜测,可能为如下方式:

public class aaa {
     private int _OR_ (String s1, String s2){
        int result1,result2;
        try {
            result1 = Integer.parseInt(s1);
        }catch(Exception e){
            result1 = 0;
        }
        try {
            result2 = Integer.parseInt(s2);
        }catch(Exception e){
            result2 = 0;
        }
        return result1 | result2;
    }
    private int _OR_ (String s1, int s2){
        int result1,result2;
        try {
            result1 = Integer.parseInt(s1);
        }catch(Exception e){
            result1 = 0;
        }
        return result1 | s2;
    }
    private int _OR_ (int s1, String s2){
        int result2;
        try {
            result2 = Integer.parseInt(s2);
        }catch(Exception e){
            result2 = 0;
        }
        return s1 | result2;
    }
    private int _OR_ (int n1, int n2){
        return n1 | n2;
    } 
    public static void main(String[] args) {
        System.out.println(new aaa()._OR_("10","1"));
    }
}

由于在强类型语言中,位运算符仅能用在int和long类型中。
如果猜测没错,js是弱类型,所有内容在位运算操作前需要在js引擎实现内部统一转换为int或long。
如果无法转换则默认为赋值为0。
最后再经行位运算操作。

由此也就产生了这个"变态"现象。我了个去………

javascript的变态位运算的更多相关文章

  1. javascript中的位运算,

    罗浮宫群里又有讨论位运算符号|了,做过一段时间php,数据库保存布尔值数据经常用到,比如100110 就表明了六个属性的是与否,极大减少了数据量..] ECMAScript 中位运算跟其他语言一样的. ...

  2. javascript位运算

    javascript作为一门高级语言,他尽量让开发人员减少思考底层的硬件工作原理,而将精力集中在逻辑开发的层面.不过,不论这门语言多么高级,我们必须知道数据依然以bits的形式存储,有时候我们会直接与 ...

  3. JavaScript 位运算总结&拾遗

    最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识. 把一个数变为大于等于该数的最小的2的幂 一个 ...

  4. 【JavaScript】进制转换&位运算,了解一下?

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

  5. javascript 位运算

    位运算博大精深,本文总结下基本的位运算的概念. 1.整数的二进制码 位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值.ECMAScript中的所有数值都以IEEE-754 64位格式存储 ...

  6. javascript中的类型转换(进制转换|位运算)

    1:parseInt(string) : 这个函数的功能是从string的开头开始解析,返回一个整数 parseInt("123hua"); //输出 123 parseInt(& ...

  7. js中的位运算

    按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...

  8. leetcode - 位运算题目汇总(下)

    接上文leetcode - 位运算题目汇总(上),继续来切leetcode中Bit Manipulation下的题目. Bitwise AND of Numbers Range 给出一个范围,[m, ...

  9. Javascript中的位运算符和技巧

    ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数).在 ECMAScript 中,所有整数字面量默认都是有符号整数,这意味着什么呢? 有符号整数使用 3 ...

随机推荐

  1. CentOS禁用root本地或远程ssh登录

    有些特殊的情况我们需要禁止root在本地或远程使用ssh登录,以增加安全性. 禁止root本地登录 修改/etc/pam.d/login文件增加下面一行auth required pam_succee ...

  2. Linux系统文件的隐藏属性

    linux系统的文件除了有普通rwx权限外还有一种隐藏权限,例如明明有权限删除某个文件却报错了. 或者仅能为某个文件追加内容而不能减少内容,遇到这种很‘奇怪’的文件,就要怀疑是文件被设置隐藏权限了. ...

  3. spring路径通配符

    在应用Spring的工程中,使用class path的方式加载配置文件应该是最常用的做法,然而对大部分人来说,刚开始使用Spring时,几乎都碰到过加载配置文件失败的情况,除了配置上的错误外,很多时候 ...

  4. 重置mysql的root密码

    由于本人记性比较差,今天的mysql的root密码又忘记了,咋办呢?只能重置root的密码了.具体的操作步骤如下: 1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行, ...

  5. hdu1005 Number Sequence(数论)

    Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...

  6. RPC 原理的前生今世

    (如果感觉有帮助,请帮忙点推荐,添加关注,谢谢!你的支持是我不断更新文章的动力.本博客会逐步推出一系列的关于大型网站架构.分布式应用.设计模式.架构模式等方面的系列文章) 在校期间大家都写过不少程序, ...

  7. tomcat7 1000并发量配置 tomcat7配置优化

    修改tomcat/conf/server.xml配置文件. <Executor name="tomcatThreadPool" namePrefix="catali ...

  8. BZOJ 1016 星球大战starwar(逆向-并查集)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1015 题意:给出一个图.每次删掉一个点,求删掉之后连通块个数. 思路:正着做不好做,我们 ...

  9. AutoCompleteTextView与TextWatcher的结合

      /******************************************************************************************** * au ...

  10. jstl的forEach使用和jstl变量实现自增

    <c:forEach items="${reallyChooseSubjectList}" var="reallyChooseSubject"> & ...