viowan
V2EX  ›  问与答

[Javascript]赋值为 false,执行++运算,返回值为什么是 0

  •  
  •   viowan · Aug 7, 2014 · 2587 views
    This topic created in 4385 days ago, the information mentioned may be changed or developed.
    今天有去一家公司面试,有个题目还是很有意思的。具体是这样:
    var a = 'x';
    var b= false;
    var c = 0;
    var d = {valueOf:function(){return -1}};
    a++;
    b++
    c++;
    d--;
    求四个值,反正我当时是写错了,回家一算应该是这四个结果。
    NaN;
    0;
    1;
    -1;
    求解大神,Why?
    7 replies    2014-08-07 21:22:43 +08:00
    66450146
        1
    66450146  
       Aug 7, 2014
    Javascript 一向奇葩

    比如

    > [] == false
    true
    > ![] == false
    true (WTF!)
    viowan
        2
    viowan  
    OP
       Aug 7, 2014
    @66450146 其实你这个还好,应该是做了类型转换才这样。javascript里面双等本来就比较危险,换成这样结果是正常的
    [] === false
    false
    ![] === false
    true
    kfll
        3
    kfll  
       Aug 7, 2014 via Android
    …其实没什么意思,ecma 262 里面都写得很详细了。
    iwege
        4
    iwege  
       Aug 7, 2014   ❤️ 1
    貌似楼主的b d的结果都错了...在chrome下面得到是预想的结果。b = 1 ,d = -2
    viowan
        5
    viowan  
    OP
       Aug 7, 2014
    @iwege 刚刚又去试了下!真的又正常了!看来写表达式的返回值,和console.log()的值还是有差别的!
    iwege
        6
    iwege  
       Aug 7, 2014
    @viowan ++表达式直接返回的值貌似是本身的值,这个在c=0 c++的时候可以看出来,a b 返回的是转化之后++之前的值。
    viowan
        7
    viowan  
    OP
       Aug 7, 2014
    @iwege 对的 所以答案就和之前预想的一样
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3268 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:08 · PVG 19:08 · LAX 04:08 · JFK 07:08
    ♥ Do have faith in what you're doing.