2011-05-02 125 views
24

我需要遍历JavaScript对象的属性。我怎么知道一个属性是一个函数还是一个值?如何判断一个javascript变量是否为函数

var model = 
{ 
    propertyA: 123, 
    propertyB: function() { return 456; } 
}; 

for (var property in model) 
{ 
    var value; 
    if(model[property] is function) //how can I tell if it is a function??? 
     value = model[property](); 
    else 
     value = model[property]; 
} 
+1

可能重复[如何检查一个JavaScript变量是否为函数类型?](http://stackoverflow.com/questions/5999998/how-can-i-check-if-a-javascript-可变函数类型) – sierrasdetandil 2013-11-08 01:03:08

回答

47

使用typeof operator

if (typeof model[property] == 'function') ... 

另外请注意,你应该确保你迭代的特性是该对象的一部分,而不是继承的公共财产上的原型一些其他的对象了继承链:

for (var property in model){ 
    if (!model.hasOwnProperty(property)) continue; 
    ... 
} 
+0

,只有属性是本机函数时才是可靠的。如果它是一个主机对象,你可以得到任何东西,甚至是一个错误。 – RobG 2011-05-03 01:16:11

+0

@RobG哦? 'typeof(new XMLHttpRequest).getAllResponseHeaders'在Safari,Chrome,Firefox和Opera上为我返回''function“'。这是一个IE问题,还是您想要的另一个主机对象或方法? (这不是我怀疑你,我只是寻找一个例子。) – Phrogz 2011-05-03 01:46:16

4

下面可能对你有用,我想。

How can I check if a javascript variable is function type?

顺便说一句,我使用下面的检查功能。

// Test data 
    var f1 = function() { alert("test"); } 
    var o1 = { Name: "Object_1" }; 
    F_est = function() { }; 
    var o2 = new F_est(); 

    // Results 
    alert(f1 instanceof Function); // true 
    alert(o1 instanceof Function); // false 
    alert(o2 instanceof Function); // false 
+1

虽然不太可能,但是请注意,如果你正在测试来自另一个窗口框架的函数值,这将失败(因为每个框架都有自己的'Function'根)。 – Phrogz 2015-02-03 23:33:18

相关问题