赋值表达式——Color[Color["Red"] = 0]

306 阅读1分钟

由typescript 的枚举引发的思考

截图中右侧是编译成js后的代码,在浏览器控制台中打印出来结果,Color居然是 {0: "Red", Red: 0}

一句 Color[Color["Red"] = 0] = “Red” ,对Color设置了两个属性’0’,’Red’🔥,经过查找定位到【 赋值表达式】

参考 由ES规范学JavaScript(二):深入理解“连等赋值”问题 这篇文章找到些思路

套用文章中描述的js引擎计算赋值表达式的步骤,注意步骤4 是思路来源重点:

  1. 先从左侧表达式 Color[Color["Red"] = 0] 入手
  2. 计算左侧表达式中的Color["Red"] = 0,(根据截图步骤4)运算后会返回 0;同时此时 Color 为 { Red: 0 }
  3. 左值外层为 Color[0] (0为上一步返回的结果)
  4. 计算右侧表达式结果为’Red’
  5. 将’Red’ 赋给 Color[0],所以最终为 {0: "Red", Red: 0} 🥳