點燈坊

失くすものさえない今が強くなるチャンスよ

使用 eval() 一次從 Object 解構出多個變數

Sam Xiao's Avatar 2023-01-31

若我們想將 Object 直接解構成變數,若變數不多,可直接使用 Object Destructuring,但若變數很多,可改用 eval() 動態解構出多個變數。

Version

ECMAScript 2015

Object Destructuring

let obj = { a: 1, b: 2, c: 3, d: 4 }

let { a, b, c, d } = obj

a // ?
b // ?
c // ?
d // ?

若變數不多,直接使用 Object Destructuring 解構出變數。

eval()

let obj = { a: 1, b: 2, c: 3, d: 4 }

Object
  .keys(obj)
  .forEach(x => eval(`let ${x} = obj.${x}`))

a // ?
b // ?
c // ?
d // ?

但若變數很多,使用 Object Destructuring 將很麻煩。此時可使用 eval() 產生 code,無論變數再多也不怕。

記得 eval() 的 String 必須有 let,否則會建立 global variable

Conclusion

  • 大部分人覺得 eval() 很邪惡而不敢用,事實上 eval() 只要用對地方也是很巧妙