【发布时间】:2021-02-03 23:28:07
【问题描述】:
我把这个问题分成两个子部分,因为它们是相关的,并且更容易理解。
var outside = ['laptop', 'tv', 'car'];
for (p in outside) {
var message = p;
console.log(message);
}
现在,这里有一个Array,变量p 跳过所有属性,在本例中为array items,并为其自身分配项目的索引号。所以,1..2..3。这让我可以这样做:
var outside = ['laptop', 'tv', 'car'];
for (p in outside) {
var message = outside[p];
console.log(message);
}
..使用变量p作为数字substring返回每个array item的属性名称。
现在,这里有两个问题:
- 如果变量通过属性,如其描述
说,那为什么要在
array上使用它,变量分配 项目的索引数值? - 为什么使用
outside[number]会返回名称 财产?
一个有意义的解释是,如果每个array item 实际上是一个object,显然substring [number] 返回该对象的名称,而for..in 变量会跳过@987654335 的每个属性@ 对象,它们的属性实际上是索引号,所以它返回的就是这个。
这个解释是对的,还是完全错的?
我的问题的第二部分是使用 JSON 对象。
var marry = '{"age":"30","height":"180","eyecolor":"blue"}';
var maryobject = JSON.parse(marry);
var out = "";
for (i in maryobject) {
out = i;
console.log(out);
}
现在,这里的变量i 返回object 的属性名称。
但是,使用变量 i 作为子字符串,就像我之前使用 Array 所做的那样,返回属性的值:
var marry = '{"age":"30","height":"180","eyecolor":"blue"}';
var maryobject = JSON.parse(marry);
var out = "";
for (i in maryobject) {
out = maryobject[i];
console.log(out);
}
现在,这里也有两个问题:
-
为什么
[i]表示属性的位置,既然[i]是 不是数值? -
为什么
maryobject[i]会返回属性值?
【问题讨论】:
-
1.数组是奇异的对象。所以属性名称(不是方法)是数字索引 --- 2.
outside[number]不返回名称。它返回属性值 -
关于您的第二个问题: 1.
[i]不是数值。 --- 2. 这就是属性访问的“方括号表示法”。 -
那么,数组项的属性名称是它们的数字索引,但属性的值是我给数组项的名称?那么,数组项是属性,而不是对象,对吗?
-
数组是对象(具有特殊能力)。对象具有属性。属性具有值。给定
arr = ['a','b','c'],则该数组具有三个属性(加上额外的)。arr[0]将返回属性0的值,即a。 -
[ i ] 不是一个数值,确切的说,为什么它表示属性的个数就好像对象是一个数组,而 [ i ] 是一个数字呢?
标签: javascript