LoginSignup
22
23

More than 3 years have passed since last update.

ES2015で変数名を取得する

Last updated at Posted at 2016-01-11

1: Function#nameを使う方法

ES2015では、関数式で宣言した関数が無名関数の場合、代入された変数と同じ名前になる。なので無名関数を変数に代入して、Function#nameで取得すれば変数名の文字列が取得できる。

無名関数を突っ込んでFunction#nameで取得

var v1 = () => {}
console.log(v1.name);   //v1

宣言時の変数名のみが関数名となり、別の変数に再代入しても関数名は変わらない。


var tmp = v1;
console.log(tmp.name);  //v1

この特徴を使うとある程度汎用的な変数名取得の仕組みが作れる。

変数名を取得するUtil.getValName()

class Util{
    static getValName(val){
      if(typeof val !== "function")throw TypeError();
        return val.name;
    }
}

//どこかで宣言された変数
var v2 = "hoge";

//...

//変数名を取得したい時
var v2_val = v2;    //元の変数の値を一旦取っておく
var v2 = () => {}   //無名関数を突っ込む;Babelだとvarで再宣言が必要
//この辺を関数でまとめると、変数->引数になった時点で変数名が変わるのでまとめられない

var s = Util.getValName(v2)
console.log(`${s}:${v2_val}`) //v2:hoge

ただし、この方法は現時点(2016-01-11)ではBabelなどごく一部の環境のみ。ES2015のFunction#nameは今一実装が進んでいない。

2: Class.nameを使う方法

クラス式を使ってClass.nameで取得
var v2 = class {}
console.log(v2.name);   //v2
  1. の応用。

現時点ではEdge13のみ対応

3: for(let s in {var})を使う方法

var v3;
for(let s in {v3}){console.log(s)}  //v3

オブジェクトのキー・バリューとして登録して取り出す方法。昔ながらのやり方だが、ES2015では省略記法が使える。

4: Object.keys({var})[0] を使う方法(追記)

var v4;
console.log(Object.keys({v4})[0]);    //v4

こちらの方が直接変数を取り出せるので便利。これも省略記法の活用。

22
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
23