![](/img/trans.png)
[英]“for var in” accessing JS object returns everything *but* own properties?
[英]For var in object returns methods together with properties
我嘗試了以下代碼,但驚訝地發現,對於var in對象返回而言,對象方法也是如此。 我不確定為什么會發生,對象方法本質上是屬性嗎? 有什么方法可以使其僅返回包含值的屬性?
var object = {p1: 1, p2: 2, p3: 3};
object.funkcja = function() {
for (var x in object) {document.getElementById("test").innerHTML += object[x] + "<BR>";}
};
例:
檢查像波紋管應該工作。
for (var x in object) {
if(object.hasOwnProperty(x)){
document.getElementById("test").innerHTML += object[x] + "<BR>";
}
}
這是因為JavaScript在值和方法之間沒有區別。 您必須自己從值中過濾方法。 我建議您在循環中使用以下功能: 如何檢查javascript變量是否為功能類型?
for (var p in object){
if(isFunctionA(p) == false){
//Make your work on props here.
}
}
function isFunctionA(object) {
return object && getClass.call(object) == '[object Function]';
}
是的,對象的方法僅僅是碰巧是函數的屬性。 您可以使用以下命令測試屬性是否為函數
if(typeof object[x] === 'function')
要么
if(object[x] instanceof Function)
我相信instanceof運算符的效率稍高一些,但是如果您有多個全局上下文有效(例如,如果在不同框架之間傳遞對象),則它可能無法工作。
還值得注意的是,for in循環將返回在對象原型上定義的屬性及其實例屬性。 為了避免這種情況,您可以使用
if(object.hasOwnProperty(x))
我認為這是正確的方法:
for (var x in object) {
if(object.hasOwnProperty(x) && !(object[x] instanceof Function) ){
document.getElementById("test").innerHTML += object[x] + "<BR>";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.