2016-09-22 22 views
0

落實removeProperty函數,它接受一個對象和屬性名並執行以下操作:落實removeProperty函數,它的對象和屬性名在JavaScript

如果obj對象有屬性道具,它消除了財產物體。 如果該屬性已被刪除,則返回true;否則返回false。

什麼是錯的代碼?

function removeProperty(obj,prop) { 
if(obj.hasOwnProperty('prop')) 
    { 
    console.log(obj); 
    delete obj.prop; 
    return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

var obj= { 
    name:"John" 
}; 

removeProperty({obj,'name'}); 

回答

1

以下是可能有所幫助的完整代碼。有很多方法可以做到這一點。

<!DOCTYPE html> 
<html> 
<body> 
<h1>JavaScript Functions</h1> 

<p onclick="removeProperty(obj,'name')">This example calls :</p> 
<script> 
function removeProperty(obj,prop){ 

if(obj.hasOwnProperty(prop)) { 
    console.log(obj); 
    var b = delete obj.prop; 
    console.log(b); 
    return true; 
    } 
    else { 
     return false; 
    } 
} 

var obj= { 
    name:"John" 
}; 

// removeProperty(obj,'name'); 

</script> 
</body> 
</html> 
+1

這是工作,因爲testdome只支持的ECMAScript 5.1,謝謝 – yussan

0

代碼中的錯誤是由於您傳遞給removeProperty函數的參數。它期望兩個參數,並且你通過了它,這是錯誤地寫入的。

您正在試圖通過{obj, 'name'}爲兩個參數,而實際上它是一個對象的一個​​參數。

相反,您應該編寫removeProperty(obj, 'name');並將if(obj.hasOwnProperty('prop'))更改爲if(obj.hasOwnProperty(prop)),因爲參數是帶有字符串的變量。

這裏是你的代碼的工作版本:

function removeProperty(obj,prop) { 

if(obj.hasOwnProperty(prop)) { 
    console.log(obj); 
    delete obj.prop; 
    return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

var obj= { 
    name:"John" 
}; 

removeProperty(obj,'name'); 

,這裏是一個優化版本:

function removeProperty(obj, prop) { 
    if (obj[prop] !== undefined) { 
    console.log(obj); 
    delete obj[prop]; 
    return true; 
    } 
    return false; 
}; 

var obj= { 
    name:'John' 
}; 

removeProperty(obj,'name'); 
3

期望代碼將是:

function removeProperty(obj, prop) { 
if(prop in obj){ 
    delete obj[prop]; 
    return true; 
}else{ 
    return false; 
} 
} 

說明:

的hasOwnProperty()方法返回一個布爾指示對象是否具有指定的屬性作爲自己的(未繼承)property.So驗證自己和繼承的屬性在以及使用

括號標記會比obj.prop是更好的選擇。 由於方括號允許使用不能用點表示法(如數字)中使用的字符,它也允許使用變量屬性的選擇。 在當前情況下,應使用括號表示法。