Yanıtlar:
Nesnenin kendisinde bulunan özellikleri (prototip zincirinin bir parçası değil) test ediyorsanız şunları kullanabilirsiniz .hasOwnProperty():
if (x.hasOwnProperty('y')) {
// ......
}
inDevralınan özellikleri de sınamak için işleci kullanabilirsiniz .
if ('y' in x) {
// ......
}
{}.hasOwnProperty.call(x, 'y').
Nesnenin fiziksel olarak özelliği içerip içermediğini bilmek istiyorsanız @ gnarf'ın cevabını kullanarak işinizihasOwnProperty yaparsınız.
Özelliğin, nesnenin kendisinde veya prototip zincirinde herhangi bir yerde olup olmadığını bilmek istiyorsanız, inişleci kullanabilirsiniz .
if ('prop' in obj) {
// ...
}
Örneğin.:
var obj = {};
'toString' in obj == true; // inherited from Object.prototype
obj.hasOwnProperty('toString') == false; // doesn't contains it physically
Underscore.js veya Lodash
if (_.has(x, "y")) ...
:)
Object.prototype.hasOwnProperty.call(x, "y"). Dizilerin için İstediğin düşünüyorum Array.prototype.indexOf, _.indexOfya_.contains
Orijinal kodumun bir özelliği
if ( typeof(x.y) != 'undefined' ) ...
bazı durumlarda yararlı olabilecek bu, xvar olup olmadıklarını kullanmanın güvenli olmasıdır . Gnarf'ın cevabındaki yöntemlerden herhangi biri ile, ilk öncex eğer varsa, herhangi bir şüphe olup olmadığını .
Belki de üç yöntemin de birinin hile çantasında yeri vardır.
(x && x.hasOwnProperty('y'))veya(x && 'y' in x)
ReferenceError, 'undefined' dizesinden ziyade bir döndürür
Soru, özellik denetiminin tıkanıklığı ve işlev bağımsız değişken seçenekleri nesnelerinin doğrulanması için düzenli bir kullanım alanı olduğundan, birden çok özelliğin varlığını test etmenin kitaplıksız kısa bir yolundan bahsettiğimi düşündüm. Feragatname: ECMAScript 5 gerektirir (ancak IE8 kullanan herkes IMO bozuk bir web'i hak eder).
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
Neden sadece:
if (typeof myObject.myProperty == "undefined") alert("myProperty is not defined!");
Veya belirli bir tür bekliyorsanız:
if (typeof myObject.myProperty != "string") alert("myProperty has wrong type or does not exist!");
x.hasOwnProperty('y')?
Object.prototype.hasOwnProperty.call(x, 'y'), "hasOwnProperty" adlı mülkün inceleme süreciyle