Javascript 为什么函数变量(登录控制台时)不显示整个函数体?
我想知道为什么函数变量(登录控制台时)不显示整个函数体,而toString()方法显示整个函数体Javascript 为什么函数变量(登录控制台时)不显示整个函数体?,javascript,tostring,console.log,Javascript,Tostring,Console.log,我想知道为什么函数变量(登录控制台时)不显示整个函数体,而toString()方法显示整个函数体 function person(name) { this.f_name = name; return function print_name (){ alert("Your Name Is: " + this.f_name); } } var myfunc = person('James'); console.log(myfunc
function person(name) {
this.f_name = name;
return function print_name (){
alert("Your Name Is: " + this.f_name);
}
}
var myfunc = person('James');
console.log(myfunc); //-> function print_name()
console.log(myfunc.toString()); // ->"function print_name(){
alert("Your Name Is: " + this.f_name);
}"
所有不能打印的
console.log
都会调用相应的toString
方法,以便仍然能够表示/总结有关函数的最重要细节
正如你在这里看到的:-特别是这句话:
toString方法返回中对象的字符串表示形式
函数声明的形式。也就是说,toString反编译
函数,返回的字符串包括函数关键字
参数列表、大括号和函数体的源[1]
这基本上意味着您不需要知道要调试的内部构件,因为您可以查看其源代码(在devtools或编辑器中),因此不需要打印所有内容—只需要程序员当时需要/方便知道的内容
[1] -我不知道为什么会有这句话,或者我误解了。(如以下评论中所述)
我在一些浏览器的开发工具中运行了以下代码以进行比较:
console.log(函数(a,b){返回a+b;})代码>
输出:
- Firefox:
函数()
-不带参数,但单击可查看更多信息
- Chrome:
function(a,b){returna+b}
w/arguments,单击它会将您带到devtools中包含函数源的窗格
- Safari:
函数(a,b){返回a+b;}
,带参数,单击不做任何操作
由于我在Mac电脑上,我无法在IE中测试这一点,但输出很有趣。
开发人员更喜欢在哪个浏览器中开发,因为这只是一个开发API,而不是跨浏览器一致的东西。因为这是toString
的明确功能,而不是控制台的明确功能。。。!?您使用的浏览器和版本是什么<代码>控制台
实现各不相同您是说控制台应该调用.toString
,它应该包含函数体,但事实并非如此@deceze感谢您指出这一点,似乎文档中存在错误,或者我们误解了“函数体的来源”嗨,我在Chrome中尝试了上述方法,是的console.log(myfunc)
输出了与Firefox不同的整个func定义。我怀疑我的理解,我在理解JS时遗漏了一点(我是一个初学者),但事实证明是浏览器控制台造成了混乱。下次我将使用alert()
进行测试输出,我认为这是跨浏览器的。@sapnakoramagirialert()
和console.log()
有非常不同的用途,如果您有一个大数据结构(包含大量嵌套对象或数组或w/e的对象),那么console.log()
将取代alert()
无论采用哪种方法,只要试一下,看看哪种方法效果最好。我个人觉得alert()
很烦人,因为它会在浏览器提示中显示文本,你必须点击离开,console.log()
只会登录到控制台,如果你忘记删除一个控制台,它不会意外地在一个实时网站上弹出^