不,没有内置属性可以告诉您该对象有多少属性(这是您要查找的)。
我能想到的最接近的是两个 ES5 和更高的特性,Object.keys
(spec | MDN)和Object.getOwnPropertyNames
(spec | MDN)。例如,您可以这样使用Object.keys
:
console.log(Object.keys(quesArr).length); // "3"
Object.keys
返回对象自己的可枚举字符串命名属性的名称数组。但是在内部(理论上)这是您不想使用的循环(当然,在 ES5 之前的环境中,它的 polyfill 使用了循环)。如果您还想要不可枚举的字符串命名属性,则可以Object.getOwnPropertyNames
改用。
在 ES2015+ 中,对象可以具有键是符号而不是字符串的属性。Object.getOwnPropertySymbols
( spec | MDN ) 让你得到它们。
FWIW,除非您要使用Array
对象的功能,否则不要将其设为数组。反而:
var quesArr = {};
quesArr["q101"] = "Your name?";
quesArr["q102"] = "Your age?";
quesArr["q103"] = "Your school?";
如果您不希望它们是(无论您使用数组还是普通对象),这些键也不必作为方括号中的字符串文字给出:
var quesArr = {};
quesArr.q101 = "Your name?";
quesArr.q102 = "Your age?";
quesArr.q103 = "Your school?";
但是,如果您愿意,可以使用其他表示法;它们是完全等价的,除了用点表示法,键必须是有效的标识符名称(在括号表示法中,它们可以是任何东西)。
你甚至可以这样做:
var quesArr = {
q101: "Your name?",
q102: "Your age?",
q103: "Your school?"
};
或(如果键不是有效的标识符):
var quesArr = {
"q101": "Your name?",
"q102": "Your age?",
"q103": "Your school?"
};
这些可以是单引号或双引号。