function object(obj){
var theArray =[];
var i =0;
for (var k in obj){
theArray[i] = 0;
i++;
}
return theArray;
}
var car = new object("hi");
console.log(car);
答案是:[0,0]。如果我传递你好,它返回我[0,0,0,0,0]。我将一个字符串传递给一个参数它应该返回一个单一的答案为什么它会返回一个字符串的每个字符,即使函数只有 ONE 参数(obj)?该循环是如何工作的我的意思是我不是在对象中使用k而是添加i。以简单的方式解释它,所以我能理解它不会给我提示。
答案 0 :(得分:2)
执行此操作时:
for (var k in obj)
当obj
是一个字符串时,它会迭代字符串的每个索引。因此,您最终会为字符串的每个字母获取k
索引。
如果您在k
循环中记录for
的值,您会看到0
,1
等...,字符串中的每个字母都有一个
你可以在这里看到:
function object(obj){
var theArray =[];
var i =0;
for (var k in obj){
// capture the value of k so we can see what it is doing
theArray[i] = k;
i++;
}
return theArray;
}
var car = new object("hello");
document.write(JSON.stringify(car));

我无法说出为什么会这样做的确切逻辑。你最终不得不问一个设计Javascript这方面的人。但是,因为您可以通过属性索引索引字符串的各种字母,如下所示:
var str = "hello"
console.log(str[1]); // "e"
你可以争辩说" 0"," 1"," 2"等等......是字符串对象的属性所以{{1循环只是迭代属性,它应该迭代它们。
修改强>
如果您尝试这些:
for
您会看到Javascript清楚地认为索引console.log(Object.getOwnPropertyNames("hello"));
console.log(Object.keys("hello"));
,"0"
,"1"
,"2"
,"3"
,"4"
都是字符串上的属性。因此,"5"
将像其他任何属性一样迭代它们。