Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何控制台记录变量/函数的名称?_Javascript - Fatal编程技术网

Javascript 如何控制台记录变量/函数的名称?

Javascript 如何控制台记录变量/函数的名称?,javascript,Javascript,我想这样做:log(variableOrFunction) 并且能够生成:变量或函数:actualValue 我试过这个: export const log = (value) => { console.log('' + value + ':', value) console.log(value) } 但我得到的却是:[object]: 这样做的正确性是什么?该“值”属于Object类型。使用JSON.stingify查看详细信息 export const log = (valu

我想这样做:
log(variableOrFunction)

并且能够生成:
变量或函数:actualValue

我试过这个:

export const log = (value) => {
  console.log('' + value + ':', value)
  console.log(value)
}
但我得到的却是:
[object]:

这样做的正确性是什么?

该“值”属于Object类型。使用JSON.stingify查看详细信息

export const log = (value) => {
  console.log('' + value + ':', JSON.stringify(value))
  console.log(JSON.stringify(value))
}

如果“值”是对象类型。您可以尝试console.dir(value)而不是long console.log,并且应该能够在控制台中以更好的格式查看对象树键:值对

function someFunction(){};
const someOtherFunction=()=>{};
常数someValue=9;
log({someFunction});
log({someOtherFunction});
log({someValue});
const=someFunction;

log({重命名})
您无法在JS解释器中以您描述的方式实现这一点。无法获取日志函数中变量的名称

您只能在日志函数的调用者内部执行此操作,方法是将调用函数转换为字符串,解析代码并获取传递给日志函数的变量名


您可以尝试获取log函数的调用者并执行我所描述的操作,但我不建议这样做。

这对您有用吗

const log = function() {
  const key = Object.keys(this)[0];
  const value = this[key];
  console.log(`${key}:${value}`);
}

let someValue = 2;

log.call({someVlaue}); //someValue:2
也适用于函数,甚至是函数本身

log.call({log});

// It would return the following
log:function() {
  const key = Object.keys(this)[0];
  const value = this[key];
  console.log(`${key}:${value}`);
}

基于@CRice-answer:

const arr=[10,20,30,40,50]
const obj={a:10,b:20,c:30,d:{e:40}
const str=“abcdef”
功能定位(obj){
Object.entries(obj.forEach(([key,value])=>console.log(key+“:”,value))
}
努力({arr})//arr:[10,20,30,40,50]
slog({obj})//obj:{a:10,b:20,c:30,d:{e:40}
slog({str})//str:abcdef

可能重复@drkibitz这是es6的一项功能,因此它应该可以在任何支持es6的地方工作。您能否澄清一下,您的意思是,某些浏览器一般不支持es6,还是不支持此功能?不支持此特定es6feature@CRice我认为几乎每个项目都有一个ES6解析器(例如Webpack)。天才解决方案谢谢!(有趣的是,很多人说这是不可能的。我猜JavaScript没有什么是不可能的。)在我的回答中,我没有说“不可能”,我说不可能的方式和你一样described@CRice哦,我刚刚意识到它不可能是函数:
export const log=(value)=>{console.log({value}}}
它将始终返回
{value:…}