Yanıtlar:
Nesnenin kendisinde bulunan özellikleri (prototip zincirinin bir parçası değil) test ediyorsanız şunları kullanabilirsiniz .hasOwnProperty()
:
if (x.hasOwnProperty('y')) {
// ......
}
in
Devralı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, in
iş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
, _.indexOf
ya_.contains
Orijinal kodumun bir özelliği
if ( typeof(x.y) != 'undefined' ) ...
bazı durumlarda yararlı olabilecek bu, x
var 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