Sprawdzam, czy istnieje właściwość obiektu ze zmienną przechowującą przedmiotową nazwę właściwości.
var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";
if(myObj.myProp){
alert("yes, i have that property");
};
To undefined
dlatego, że szuka, myObj.myProp
ale chcę to sprawdzićmyObj.prop
javascript
object
Kreatywność na zboczu
źródło
źródło
hasOwnProperty
metoda zostanie nadpisana, możesz polegać naObject.prototype.hasOwnProperty.call(object, property)
”.Odpowiedzi:
Lub
Lub
Zauważ, że
hasOwnProperty
nie sprawdza odziedziczonych właściwości, podczasin
gdy. Na przykład'constructor' in myObj
jest prawdą, alemyObj.hasOwnProperty('constructor')
nie jest.źródło
hasOwnProperty()
jest lepszy niżmyObj[myProp]
(z innych odpowiedzi), ponieważ działa, nawet jeśli wartośćmyProp
wynosi 0'qqq'.hasOwnProperty('length')
jesttrue
, można to zrobić.myProp
wynosi 0, instrukcja if wyglądałaby tak,if (myObj[0])
jakby wmyObj
ogóle miała jakieś właściwości, których wyrazem byłoby wyrażenietrue
. ImyObj[0]
może nie być właściwością, której szukasz.Możesz użyć hasOwnProperty , ale na podstawie referencji potrzebujesz cudzysłowów podczas korzystania z tej metody:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Innym sposobem jest użycie w operatorze, ale tutaj również potrzebujesz cytatów :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
źródło
hasOwnProperty()
jest realizowany.Dziękujemy za pomoc wszystkich i dążenie do pozbycia się oświadczenia eval. Zmienne musiały być w nawiasach, a nie w notacji kropkowej. To działa i jest czysty, poprawny kod.
Każda z nich to zmienne: appChoice, underI, underObstr.
źródło
tData.tonicdata[appChoice]
wynikiem będzie wartość, która nie ma pasującej właściwości / indeksuunderI
, spowoduje toTypeError
wyrzucenie.Dla własnej nieruchomości:
Uwaga: użycie Object.prototype.hasOwnProperty jest lepsze niż kredyt.hasOwnProperty (..), w przypadku gdy niestandardowy hasOwnProperty jest zdefiniowany w łańcuchu prototypów (co nie ma tu miejsca), jak
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Aby uwzględnić odziedziczone właściwości w wyszukiwaniu, użyj operatora in : (ale musisz umieścić obiekt po prawej stronie „in”, prymitywne wartości spowodują błąd, np. „Długość” w „home” spowoduje błąd, ale „długość” w nowym ciągu („home”) nie będzie)
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Uwaga: Można pokusić się o użycie akcesora typeof i [] jako następującego kodu, który nie zawsze działa ...
źródło
O wiele bezpieczniejszym sposobem sprawdzenia, czy właściwość istnieje na obiekcie, jest użycie do wywołania pustego obiektu lub prototypu obiektu
hasOwnProperty()
Odwołanie z MDN Web Docs - Object.prototype.hasOwnProperty ()
źródło
hasOwnProperty
, żadna liczba takich strażników nie zapewni bezpieczeństwa Twojemu kodowi.Możesz używać
hasOwnProperty()
tak samo jakin
operatora.źródło