JavaScript字典遍历返回值含undefined问题咨询
解答:为什么你的字典遍历代码会同时返回值和undefined?
首先我先把你的代码贴出来方便分析:
var dict = {"Cost":"16","Description":"dkjfdkljskjf"}; var keys = Object.keys(dict); console.log(keys) for(var i = 0;i < keys.length;i++){ console.log(dict[keys[i]]); }
1. 谁返回了undefined?
这个undefined不是你代码里的console.log输出的,而是浏览器/Node.js的控制台自动输出的——它是你这段代码执行完之后,整个代码片段的返回值。
2. 这个undefined代表什么?
在JavaScript里,任何没有明确返回值的语句/代码块,默认都会返回undefined。你的代码最后一行是一个for循环,而for循环本身没有返回值,所以整个代码片段执行完毕后,返回的就是undefined,控制台会自动把这个返回值打印出来。
3. 为什么会同时出现值和undefined?
你看到的输出顺序是这样的:
- 首先是
console.log(keys)输出的数组:["Cost", "Description"] - 然后是
for循环里两次console.log输出的字典值:"16"和"dkjfdkljskjf" - 最后是控制台自动输出的整个代码片段的返回值:
undefined
简单说,前三个输出是你主动用console.log打印的,最后一个undefined是控制台帮你打印的代码执行结果。
怎么验证?
如果你把代码放在一个函数里,调用函数时也能看到同样的现象:
function logDictValues() { var dict = {"Cost":"16","Description":"dkjfdkljskjf"}; var keys = Object.keys(dict); console.log(keys); for(var i = 0;i < keys.length;i++){ console.log(dict[keys[i]]); } } // 调用函数时,控制台会先打印你主动输出的内容,然后打印函数的返回值undefined logDictValues();
如果不想看到这个undefined,你可以在代码最后加一个明确的返回值,比如return null;,不过一般来说这个undefined不影响代码功能,只是控制台的默认行为而已。
内容的提问来源于stack exchange,提问作者Dylan Ong
相关产品推荐
相关产品推荐

