例如:
ipython notebook
在上面的代码示例中,var arr = [];
arr[3.4] = 1;
console.log(arr.length);
属性为零,为什么以及JS解析器内部发生了什么,因为它的长度为零。
答案 0 :(得分:9)
数组的length
反映了数组中存在的最大数组索引。 “数组索引”(见下文)是一个属性名称,它是一个小于2 32 -1的整数值。由于3.4
不是整数,因此设置它不会改变length
。
数组是对象,因此数组没有理由不能拥有名为3.4
的属性,但该属性不会影响length
,因为它的名称不符合标准数组索引。
ES2015 9.4.2, Array Exotic Objects将“数组索引”定义为小于2的整数 32 -1:
属性名称 P (以String值的形式)是数组索引当且仅当ToString(ToXint32( P ) ))等于P和ToUint32( P )不等于2 32 -1。“
该定义用于length
值(强调我的):
每个Array对象都有一个
length
属性,其值始终是小于2 32 的非负整数。length
属性的值在数值上大于名称为数组索引 的每个属性的名称;无论何时创建或更改Array对象的自有属性,都会根据需要调整其他属性以保持此不变量。具体来说,每当添加名称为数组索引的自有属性时,length
属性的值将更改,如果需要,将比该数组索引的数值多一个...
答案 1 :(得分:2)
JavaScript数组不能包含小数索引。
你在那里做了什么在数组对象上分配了一个名为"3.4"
的属性。
这不会影响length
属性,该属性旨在返回一个高于最高有效索引的数字。
如果你考虑数组应该如何工作,你应该意识到分数偏移是没有意义的。
答案 2 :(得分:1)
您可以尝试使用对象与数组。
var arr = {};
arr[3.4] = 1;
arr[3.5] = 2;
arr[3.6] = 3;
console.log(Object.keys(arr).length);
答案 3 :(得分:0)
您必须使用整数作为索引,而不是浮点数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char* name;
}student;
int main()
{
int size;
printf("enter number of entries\n");
scanf("%d" , &size);
student* all=malloc(size*sizeof(student));
int i;
for(i=0;i<size;i++)
{
printf("enter name\n");
scanf("%s" , all[i].name);
}
return 0;
}