जवाबों:
यदि आप उन गुणों के लिए परीक्षण कर रहे हैं जो स्वयं ऑब्जेक्ट पर हैं (इसकी प्रोटोटाइप श्रृंखला का एक हिस्सा नहीं) तो आप उपयोग कर सकते हैं .hasOwnProperty()
:
if (x.hasOwnProperty('y')) {
// ......
}
आप in
ऑपरेटर को उन संपत्तियों के परीक्षण के लिए उपयोग कर सकते हैं जो विरासत में मिली हैं।
if ('y' in x) {
// ......
}
{}.hasOwnProperty.call(x, 'y')
।
यदि आप यह जानना चाहते हैं कि क्या वस्तु में भौतिक रूप से संपत्ति @ gnarf का उपयोग है hasOwnProperty
, तो वह काम करेगा।
यदि आप जानना चाहते हैं कि क्या संपत्ति कहीं मौजूद है, या तो ऑब्जेक्ट पर ही या प्रोटोटाइप श्रृंखला में, आप in
ऑपरेटर का उपयोग कर सकते हैं ।
if ('prop' in obj) {
// ...
}
उदाहरण के लिए .:
var obj = {};
'toString' in obj == true; // inherited from Object.prototype
obj.hasOwnProperty('toString') == false; // doesn't contains it physically
अंडरस्कोर.जेएस या लॉडश
if (_.has(x, "y")) ...
:)
Object.prototype.hasOwnProperty.call(x, "y")
। सरणियों के लिए मुझे लगता है कि आप चाहते हो सकता है Array.prototype.indexOf
, _.indexOf
या_.contains
मेरे मूल कोड की एक विशेषता
if ( typeof(x.y) != 'undefined' ) ...
यह कुछ स्थितियों में उपयोगी हो सकता है कि यह x
मौजूद है या नहीं इसका उपयोग करना सुरक्षित है । गर्नफ के जवाब में किसी भी तरीके के साथ, किसी को पहले यह पता होना चाहिए x
कि क्या मौजूद है या नहीं।
तो शायद सभी तीन तरीकों में से एक चाल के बैग में एक जगह है।
(x && x.hasOwnProperty('y'))
कर सकते हैं या(x && 'y' in x)
ReferenceError
स्ट्रिंग 'अपरिभाषित' के बजाय देता है
चूंकि प्रश्न संपत्ति की जाँच की अव्यवस्था के बारे में था, और इसके लिए एक नियमित रूप से उपयोग किया जाता था जो कि फ़ंक्शन तर्क विकल्प ऑब्जेक्ट्स के सत्यापन के रूप में था, मैंने सोचा कि मैं कई गुणों के अस्तित्व के परीक्षण के एक पुस्तकालय-मुक्त लघु मार्ग का उल्लेख करूंगा। डिस्क्लेमर: इसके लिए ECMAScript 5 की आवश्यकता होती है (लेकिन IM8 का उपयोग करके कोई भी IE8 टूटे हुए वेब का हकदार नहीं है)।
function f(opts) {
if(!["req1","req2"].every(opts.hasOwnProperty, opts)) {
throw new Error("IllegalArgumentException");
}
alert("ok");
}
f({req1: 123}); // error
f({req1: 123, req2: 456}); // ok
बस क्यों नहीं:
if (typeof myObject.myProperty == "undefined") alert("myProperty is not defined!");
या यदि आप एक विशिष्ट प्रकार की उम्मीद करते हैं:
if (typeof myObject.myProperty != "string") alert("myProperty has wrong type or does not exist!");
x.hasOwnProperty('y')
?
Object.prototype.hasOwnProperty.call(x, 'y')
तो, "हैसोवनप्रॉपर्टी" नाम की संपत्ति निरीक्षण प्रक्रिया के साथ संघर्ष नहीं करेगी;)