検索

ホームページ  >  に質問  >  本文

javascript - 这道JS题想考察什么?该怎样解?

题目:
表达式 []+(-~{}-~{}-~{}-~{})+(-~{}-~{}) 的运算结果是?

自己测试出来的结果为: "42"。
但是解题过程没思路,考的是JS的正则吗? 求解。

ringa_leeringa_lee2896日前246

全員に返信(4)返信します

  • 黄舟

    黄舟2017-04-10 15:23:49

    又先占一坑,让我娓娓道来...

    []+(-~{}-~{}-~{}-~{})+(-~{}-~{})

    推理过程:

    因为:

    [].toString() => ''

    -~{} => -(~parseInt({})) => -(~NaN) => -(-1) => 1

    所以:

    []+(-~{}-~{}-~{}-~{})+(-~{}-~{})
    = '' + (-(-1)-(-1)-(-1)-(-1)) + (-(-1)-(-1))
    = '' + 4 + 2
    = '4' + 2
    = '42'

    以上,完毕!

    =========分隔线==========

    有同僚提出
    1. -~{} => -(~parseInt({})) 这一步是怎么推出来的?
    2. ~NaN => -1 这值是如何计算出的?

    第二个问题,多谢 @Foolyou 提示,再仔细查找资料得:根据ES5规范对于NaN,-0,+0,+∞,-∞这些值在转换为Number类型时,将返回+0

    第一问题,~这是按位取反运算符,它右边的运算对象应该是数值,当不是数值时,javascript会尝试类型转换,所以~{}就等同于~(parseInt({}))

    返事
    0
  • ringa_lee

    ringa_lee2017-04-10 15:23:49

    '' + (1 + 1 + 1 + 1) + (1 + 1)

    返事
    0
  • 迷茫

    迷茫2017-04-10 15:23:49

    这种题目就是在瞎比折腾。利用js的隐式类型转换作文章。然而实际使用中并不会写这种代码(不然你的code reviewer打不死你)。

    这让我想起了,以前会考在C语言中连续书写各种运算符,让人脑跟机器去比较对运算符优先级和结合性的解析能力。我干嘛不加上括号呢?

    返事
    0
  • PHP中文网

    PHP中文网2017-04-10 15:23:49

    jother编码之谜

    返事
    0
  • キャンセル返事