V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
viowan
V2EX  ›  问与答

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

  •  
  •   viowan · 2014-08-07 19:25:34 +08:00 · 2143 次点击
    这是一个创建于 3761 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天有去一家公司面试,有个题目还是很有意思的。具体是这样:
    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 条回复    2014-08-07 21:22:43 +08:00
    66450146
        1
    66450146  
       2014-08-07 19:28:41 +08:00
    Javascript 一向奇葩

    比如

    > [] == false
    true
    > ![] == false
    true (WTF!)
    viowan
        2
    viowan  
    OP
       2014-08-07 19:34:38 +08:00
    @66450146 其实你这个还好,应该是做了类型转换才这样。javascript里面双等本来就比较危险,换成这样结果是正常的
    [] === false
    false
    ![] === false
    true
    kfll
        3
    kfll  
       2014-08-07 20:29:04 +08:00 via Android
    …其实没什么意思,ecma 262 里面都写得很详细了。
    iwege
        4
    iwege  
       2014-08-07 20:35:31 +08:00   ❤️ 1
    貌似楼主的b d的结果都错了...在chrome下面得到是预想的结果。b = 1 ,d = -2
    viowan
        5
    viowan  
    OP
       2014-08-07 20:50:06 +08:00
    @iwege 刚刚又去试了下!真的又正常了!看来写表达式的返回值,和console.log()的值还是有差别的!
    iwege
        6
    iwege  
       2014-08-07 20:57:59 +08:00
    @viowan ++表达式直接返回的值貌似是本身的值,这个在c=0 c++的时候可以看出来,a b 返回的是转化之后++之前的值。
    viowan
        7
    viowan  
    OP
       2014-08-07 21:22:43 +08:00
    @iwege 对的 所以答案就和之前预想的一样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2714 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:35 · PVG 18:35 · LAX 02:35 · JFK 05:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.