viowan
V2EX  ›  问与答

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

  •  
  •   viowan · Aug 7, 2014 · 2673 views
    This topic created in 4481 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
    66450146
    Aug 7, 2014
    1
    Javascript 一向奇葩

    比如

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