有这样的对象:
var a = {
b: "string",
c: function(){
return "i return a string";
}
}
正在做
for (var key in a) {
console.log(typeof key);
};
返回“string”、“string”,因为 b 是一个字符串,而 c 返回一个字符串。
是否有返回 c -> 函数的函数?
有这样的对象:
var a = {
b: "string",
c: function(){
return "i return a string";
}
}
正在做
for (var key in a) {
console.log(typeof key);
};
返回“string”、“string”,因为 b 是一个字符串,而 c 返回一个字符串。
是否有返回 c -> 函数的函数?
如果要查看属性的类型而不是其键,应将值与typeof
运算符一起使用。
for (var key in a) {
console.log(typeof a[key] );
};
返回“string”、“string”,因为 b 是一个字符串,而 c 返回一个字符串。
没有。它返回的原因string
,是属性名b
和属性名c
都是字符串;您现在正在迭代对象的键,而不是它们的值。
你可以引入 attribute d
,这是一个返回数字或布尔值的函数,你仍然会得到string
.
相反,枚举值本身;
for (var x in a) {
console.log(typeof a[x] );
};
基本上,您将始终通过遍历对象的键来获取字符串,因为它们是这样表示的。
但是,例如,如果您这样做, console.log(typeof a[key]);
那么您将获得预期的输出。
改成:
for (var key in a) {
console.log(typeof a[key]);
};
console.log(typeof key); // gives you the key - "c"
console.log(typeof a[key]); // gives you the value of the "c" key - function.
让我稍微解释一下,这样任何人都很容易理解。(无论如何,这是我在这里的第一篇文章。)
试试下面的代码,它说它是一个函数。
console.log(typeof(a.c))
但是您所写的是读取属性名称。请尝试以下代码以了解您的代码有什么问题。
for (var key in a) {
console.log(key);
};
所以基本上你得到的是正确的。因为所有属性名称都是字符串。请记住 JSON 对象有几个限制,例如区分大小写、遍历属性所需的完整路径等。
如下更改您的代码以获取您的属性的类型,
解决方案1:
console.log(typeof(a[key]));
解决方案2:
console.log(typeof(eval('a.'+ key)));