9

次のような変数名を挿入できるログ関数を作成したいと思います。

var a = '123',
    b = 'abc';

log([a, b]);

そして、結果はconsole.logで次のようになります。

a: 123
b: abc

変数の値を取得することは問題ありませんが、変数名を取得するにはどうすればよいですか?関数は汎用である必要があるため、スコープがウィンドウであると常に想定できるとは限りません。

4

7 に答える 7

6

だから引数は変数の配列ですか?いいえ、その方法で渡されると、元の変数名を取得する方法はありません。受信側では、次のようになります。

["123","abc"];

そしてそれ以上は何もありません


次のように、変数の名前と変数が含まれるスコープを関数に指定できます。

function log(arr,scope){
    for(var i=0;i<arr.length;i++){
        console.log(arr[i]+':'scope[arr[i]]);
    }
}

ただし、スコープも指定できる場合は、これが問題になります。thisコードの特定の領域に何があるかについては、多くの問題があります。

  • 非厳密関数の場合thiswindow
  • 厳密な機能の場合thisundefined
  • コンストラクター関数の場合、thisは構築されたオブジェクトです
  • オブジェクトリテラル内でthis、すぐに囲むオブジェクトです

thisしたがって、スコープとして渡すことに依存することはできません。スコープを提供できない限り、これは別の行き止まりです。


それらをオブジェクトとして渡すと、元の変数名ではなく、オブジェクトとその「キー」を反復処理できます。ただし、この場合、これは治療よりも大きなダメージです。

于 2012-04-23T07:14:38.867 に答える
2

私はあなたがいくつかのキーストロークを保存したいことを知っています。私も。ただし、私は通常、ここで他の人がすでに提案しているように、変数の名前と値をログに記録します。

console.log({a:a, b:b});

すでに説明した形式が本当に必要な場合は、次のように実行できます。

function log(o) {
    var key;
    for (key in o) {
        console.log(key + ":", o[key]);
    }
}

var a = '1243';
var b = 'qwre';
log({
    a:a,
    b:b
});

いずれにせよ、変数名を表示したい場合は、ロギングリクエストに変数名を含める必要があります。ガレスが言ったように、呼び出された関数の内部から変数名を見るのはオプションではありません。

于 2012-04-23T07:28:16.190 に答える
1

このような何かがあなたが探していることをするでしょう:

function log(logDict) {
    for (var item in logDict) {
        console.log(item + ": " + logDict[item]);
    }
}

function logSomeStuff() {
    var dict = {};
    dict.a = "123";
    dict.b = "abc";
    log(dict);
}

logSomeStuff();
于 2012-04-23T07:07:31.560 に答える
0

これがJSで実際に機能するかどうかはわかりませんが、名前と値を格納できるオブジェクトを使用できます。

  function MyLogObject(name, value) {
    this.name = name;
    this.value = value;
  }


  var log = [];
  log.push(new MyLogObject('a', '123'));
  log.push(new MyLogObject('b', 'abc'));

  for each (var item in log) {
    if (item.value != undefined)
      alert(item.name + "/" + item.value);       
  }

次に、このオブジェクトをループして、名前と値を取得できます

于 2012-04-23T07:02:44.543 に答える
0

配列を使用して変数名にアクセスすることはできません。できることは、オブジェクトを使用するか、変数名を文字列として渡すことです。

var x = 7;
var y = 8;

function logVars(arr){
    for(var i = 0; i < arr.length; i++){
        alert(arr[i] + " = " + window[arr[i]]);
    }
}

logVars(["x","y"]);
于 2012-04-23T07:04:51.890 に答える
0

私はやや似たような問題を抱えていましたが、理由は異なります。

私が見つけた最善の解決策は次のとおりです。

MyArray = ["zero","one","two","three","four","five"]; 
MyArray.name="MyArray";

したがって、次の場合:

x=MyArray.name;

それで:

X=="MyArray"

私が言ったように、それは私のニーズに合っていましたが、これがあなたのためにどのように機能するかはわかりません。必要だったのはばかげていますが、必要でした。

于 2016-02-08T07:48:18.793 に答える
-2

これをテストします。

var variableA="valor01"; <br>
var variableB="valor02";

var NamevariableA=eval('("variableA")');<br>
var NamevariableB=eval('("variableB")');<br>

console.log(NamevariableA,NamevariableB);

アッテ。マヌエル・レタモゾ・アルエ

于 2014-04-07T17:24:13.890 に答える