【JS试题】对象键排序问题的神仙试题

前言

题目如下:

const obj = {
    
     a: 0 }
obj['1'] = 0
obj[++obj.a] = obj.a++
const values = Object.values(obj)
obj[values[1]] = obj.a
console.log(obj);

在此之前需要先了解 JS 对象键的排序问题,JS会对对象的属性进行处理,把所有 Number类型数字字符串 的属性提前,然后按照数字升序排序。

如下面代码,对象键的顺序并非声明顺序

在这里插入图片描述

另一篇文章也有介绍关于对象键的排序问题:对象遍历时属性顺序与定义时不一致

分析

  • const obj = { a: 0 }

  • obj['1'] = 0

    • 此时obj为 { ‘1’: 0, a: 0 }
  • obj[++obj.a] = obj.a++

    • ++obj.a 后,左侧表达式为 obj[1] ,此时obj为 { ‘1’: 0, a: 1 }
    • obj.a++ 后,右侧表达式为1,此时obj为 { ‘1’: 0, a: 2 }
    • 然后将obj[1] 赋值为1,此时obj为 { ‘1’: 1, a: 2 }
  • const values = Object.values(obj)

    • values 为 [1,2]
  • obj[values[1]] = obj.a

    • obj[2] = obj.a ,此时obj为 { ‘1’: 1, ‘2’: 2, a: 2 }

结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/owo_ovo/article/details/142874566