JavaScript属性枚举不工作

JavaScript属性枚举不工作,javascript,Javascript,我编写了一个小脚本来了解属性枚举在JavaScript中的工作原理: <html> <body> <script> function enum_properties(obj) { var p; for (p in obj) { if (typeof p !== 'function') { document.write(p + " : " + obj[p] + "<br/>");

我编写了一个小脚本来了解属性枚举在JavaScript中的工作原理:

<html>
<body>
<script>

function enum_properties(obj) {
    var p;
    for (p in obj) {
        if (typeof p !== 'function') {
            document.write(p + " : " + obj[p] + "<br/>");
        }
    }
}

obj1 = {
    'first_name': 'Annie',
    'last_name' : 'Leonhardt',
    'age'       : 23,
    'f'         : function() {
                    document.write("f()!");
                  }
};

enum_properties(obj1);
console.log(typeof obj1.f); //outputs 'function'

</script>
</body>
</html>

函数枚举属性(obj){
var-p;
用于(obj中的p){
如果(p的类型!==‘函数’){
文件。写(p+“:“+obj[p]+”
); } } } obj1={ “名字”:“安妮”, “姓氏”:“Leonhardt”, 年龄:23岁,, “f”:函数(){ 文件。写(“f()!”; } }; 枚举属性(obj1); 控制台日志(obj1.f类型)//输出“功能”

正如脚本最后一行的对象所揭示的,
f
确实是一个函数,但仍然没有被我的函数拒绝。我做错了什么?

您正在检查一种类型的属性名(显然是一个字符串),而不是它的值

for (p in obj) {
        if (typeof obj[p] !== 'function') {
            document.write(p + " : " + obj[p] + "<br/>");
        }
    }
for(obj中的p){
if(对象类型[p]!==“功能”){
文件。写(p+“:“+obj[p]+”
); } }
您检查的是一种属性名称(显然是一个字符串),而不是它的值

for (p in obj) {
        if (typeof obj[p] !== 'function') {
            document.write(p + " : " + obj[p] + "<br/>");
        }
    }
for(obj中的p){
if(对象类型[p]!==“功能”){
文件。写(p+“:“+obj[p]+”
); } }
感谢您指出这一点!一旦网站允许,我将尽快接受此答案。:)@顺便说一句,使用for-in-loop通常希望忽略继承的属性。查看
hasOwnProperty
方法。还有
Object.keys
。是的,我读过。但到目前为止,我只是在弄湿脚趾,想写一个小脚本,它实际上是有效的。不过,再次感谢你!谢谢你指出这一点!一旦网站允许,我将尽快接受此答案。:)@顺便说一句,使用for-in-loop通常希望忽略继承的属性。查看
hasOwnProperty
方法。还有
Object.keys
。是的,我读过。但到目前为止,我只是在弄湿脚趾,想写一个小脚本,它实际上是有效的。不过,再次感谢你!