Javascript существует ли метод объекта

Object.prototype.hasOwnProperty()

The hasOwnProperty() method returns a boolean indicating whether the object has the specified property as its own property (as opposed to inheriting it).

Note: Object.hasOwn() is recommended over hasOwnProperty() , in browsers where it is supported.

Try it

Syntax

Parameters

The String name or Symbol of the property to test.

Return value

Returns true if the object has the specified property as own property; false otherwise.

Description

The hasOwnProperty() method returns true if the specified property is a direct property of the object — even if the value is null or undefined . The method returns false if the property is inherited, or has not been declared at all. Unlike the in operator, this method does not check for the specified property in the object’s prototype chain.

The method can be called on most JavaScript objects, because most objects descend from Object , and hence inherit its methods. For example Array is an Object , so you can use hasOwnProperty() method to check whether an index exists:

const fruits = ["Apple", "Banana", "Watermelon", "Orange"]; fruits.hasOwnProperty(3); // true ('Orange') fruits.hasOwnProperty(4); // false - not defined 

The method will not be available in objects where it is reimplemented, or on objects created using Object.create(null) (as these don’t inherit from Object.prototype ). Examples for these cases are given below.

Examples

Using hasOwnProperty to test for an own property’s existence

The following code shows how to determine whether the example object contains a property named prop .

const example = >; example.hasOwnProperty("prop"); // false example.prop = "exists"; example.hasOwnProperty("prop"); // true - 'prop' has been defined example.prop = null; example.hasOwnProperty("prop"); // true - own property exists with value of null example.prop = undefined; example.hasOwnProperty("prop"); // true - own property exists with value of undefined 

Direct vs. inherited properties

The following example differentiates between direct properties and properties inherited through the prototype chain:

const example = >; example.prop = "exists"; // `hasOwnProperty` will only return true for direct properties: example.hasOwnProperty("prop"); // true example.hasOwnProperty("toString"); // false example.hasOwnProperty("hasOwnProperty"); // false // The `in` operator will return true for direct or inherited properties: "prop" in example; // true "toString" in example; // true "hasOwnProperty" in example; // true 

Iterating over the properties of an object

The following example shows how to iterate over the enumerable properties of an object without executing on inherited properties.

const buz =  fog: "stack", >; for (const name in buz)  if (buz.hasOwnProperty(name))  console.log(`this is fog ($name>) for sure. Value: $buz[name]>`); > else  console.log(name); // toString or something else > > 

Note that the for. in loop only iterates enumerable items: the absence of non-enumerable properties emitted from the loop does not imply that hasOwnProperty itself is confined strictly to enumerable items (as with Object.getOwnPropertyNames() ).

Using hasOwnProperty as a property name

JavaScript does not protect the property name hasOwnProperty ; an object that has a property with this name may return incorrect results:

const foo =  hasOwnProperty()  return false; >, bar: "Here be dragons", >; foo.hasOwnProperty("bar"); // re-implementation always returns false 

The recommended way to overcome this problem is to instead use Object.hasOwn() (in browsers that support it). Other alternatives include using an external hasOwnProperty :

const foo =  bar: "Here be dragons" >; // Use Object.hasOwn() method - recommended Object.hasOwn(foo, "bar"); // true // Use the hasOwnProperty property from the Object prototype Object.prototype.hasOwnProperty.call(foo, "bar"); // true // Use another Object's hasOwnProperty // and call it with 'this' set to foo (>).hasOwnProperty.call(foo, "bar"); // true 

Note that in the first two cases there are no newly created objects.

Objects created with Object.create(null)

Objects created using Object.create(null) do not inherit from Object.prototype , making hasOwnProperty() inaccessible.

const foo = Object.create(null); foo.prop = "exists"; foo.hasOwnProperty("prop"); // Uncaught TypeError: foo.hasOwnProperty is not a function 

The solutions in this case are the same as for the previous section: use Object.hasOwn() by preference, otherwise use an external object’s hasOwnProperty() .

Specifications

Browser compatibility

BCD tables only load in the browser

See also

Found a content problem with this page?

This page was last modified on May 1, 2023 by MDN contributors.

Your blueprint for a better internet.

Источник

Javascript существует ли метод объекта

При динамическом определении в объекте новых свойств и методов перед их использованием бывает важно проверить, а есть ли уже такие методы и свойства. Для этого в javascript может использоваться оператор in . Он имеет следующий синтаксис:

в кавычках идет название свойства или метода, а после in — название объекта. Если свойство или метод с подобным именем имеется, то оператор возвращает true . Если нет — то возвращается false .

Например, узнаем, есть ли в объекте ряд свойств:

const user = <>; user.name = "Tom"; user.age = 26; user.print = function()< console.log(this.name); console.log(this.age); >; const hasNameProp = "name" in user; console.log(hasNameProp); // true - свойство name есть в user const hasWeightProp = "weight" in user; console.log(hasWeightProp); // false - в user нет свойства или метода под названием weight

С помощью выражения «name» in user проверяем, есть ли в объекте user свойство «name» и результат проверки передаем в константу hasNameProp. Далее анологичным образом проверяем наличие свойства wheight .

Подобным образом можно проверить и наличие методов:

const hasPrintMethod = "print" in user; console.log(hasPrintMethod); // true - в user есть метод print

Альтернативный способ заключается на значение undefined . Если свойство или метод равен undefined, то эти свойство или метод не определены:

const hasNameProp = user.name!==undefined; console.log(hasNameProp); // true const hasWeightProp = user.weight!==undefined; console.log(hasWeightProp); // false

И так как объекты представляют тип Object, а значит, имеет все его методы и свойства, то объекты также могут использовать метод hasOwnProperty() , который определен в типе Object:

const hasNameProp = user.hasOwnProperty("name"); console.log(hasNameProp); // true const hasPrintMethod = user.hasOwnProperty("print"); console.log(hasPrintMethod); // true const hasWeightProp = user.hasOwnProperty("weight"); console.log(hasWeightProp); // false

Перебор свойств и методов

С помощью цикла for мы можем перебрать объект как обычный массив и получить все его свойства и методы и их значения:

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; for(const prop in tom)

И при запуске консоль браузера отобразит следующий вывод:

name : Tom age : 26 print : print() < console.log(`Name: $Age: $`); >

Функции Object.entries, Object.keys, Object,values

С помощью дополнительных функций Object.entries , Object.keys и Object,values можно получить все свойства (в том числе методы) объекта и их значения.

Object.entries()

Функция Object.entries() в качестве параметра принимает объект и возвращает массив пар «название_свойства — значение», где каждая пара свойство-значение представляет массив. Например:

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; for(const prop of Object.entries(tom))

Object.keys()

Функция Object.keys() позволяет получить массив названий всех свойств объекта. Например, возьмем выше опредеенный объект tom :

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; console.log(Object.keys(tom)); // ["name", "age", "print"]

Соответственно можно перебрать этот набор и получить значения свойств:

for(const prop of Object.keys(tom)) < const value = tom[prop]; // получаем по названию значение свойства console.log(prop,value); >
name Tom age 26 print ƒ print() < console.log(`Name: $Age: $`); >

Object.values()

Функция Object.values() возвращает массив, который содержит все значения свойств объекта:

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; console.log(Object.values(tom)); // ["Tom", 26, print()]

Источник

Javascript существует ли метод объекта

на одной из страниц открывается попап
в котором при выходе вызывается функция в opener окне,
но может произойти так, что страничка в этом окне изменилась, и необходимой функции уже нету. как быть ?
лудше бы конечно получить ответ на вопрос как проверить существование свойства\метода у объекта.
спасибо.

Здравствуйте, fryky, Вы писали:

F>на одной из страниц открывается попап
F>в котором при выходе вызывается функция в opener окне,
F>но может произойти так, что страничка в этом окне изменилась, и необходимой функции уже нету. как быть ?
F>лудше бы конечно получить ответ на вопрос как проверить существование свойства\метода у объекта.
F>спасибо.

Здравствуйте, fryky, Вы писали:

F>на одной из страниц открывается попап
F>в котором при выходе вызывается функция в opener окне,
F>но может произойти так, что страничка в этом окне изменилась, и необходимой функции уже нету. как быть ?
F>лудше бы конечно получить ответ на вопрос как проверить существование свойства\метода у объекта.
F>спасибо.

Так же можно проверит наличие функции в родительском окне:

 Z>if( ObjectName.MethodName ) < // ObjectName.MethodName - без скобок Z>. Z>> Z>

спасибо за оперативность ))
только я забыл указать. что это делается под IE5
и у него вылетает ошибка ((

 Z>>if( ObjectName.MethodName )< // ObjectName.MethodName - без скобок Z>> . Z>>> Z>>

F>спасибо за оперативность ))
F>только я забыл указать. что это делается под IE5
F>и у него вылетает ошибка ((

Странно, к сожалению проверить не могу, т.к. в наличие есть только IE6.
По идее ObjectName.MethodName текст метода или ‘undefined’ — если не определён.

А можно поподробней представить код и сообщение об ошибке?

При первом же обращении в проверке IF он вызывает ошибку, и прерывает дальнейшее выполнение скрипта.
Ие5 скудно ругается
говорит
«неопределенная ошибка» и номер строки

Здравствуйте, fryky, Вы писали:

F>При первом же обращении в проверке IF он вызывает ошибку, и прерывает дальнейшее выполнение скрипта.
F>Ие5 скудно ругается
F>говорит
F>»неопределенная ошибка» и номер строки

Здравствуйте, fryky, Вы писали:

F>на одной из страниц открывается попап
F>в котором при выходе вызывается функция в opener окне,
F>но может произойти так, что страничка в этом окне изменилась, и необходимой функции уже нету. как быть ?
F>лудше бы конечно получить ответ на вопрос как проверить существование свойства\метода у объекта.
F>спасибо.

Здравствуйте, Zerger, Вы писали:

 /* исправления нужны для IE до версии 5.5 */ Z>if( ObjectName.MethodName + "" != "undefined" )< // ObjectName.MethodName - без скобок Z> . Z>> /* Более общий подход, проверяет всё вплоть до свойств */ if(Object["MemberName"] + "" != "undefined") < /* свойства/метода c именем MemberName не существует */ > Z>

А вообще правильно, для 1.5 яваскрипта правильным будет сравнение с сущностью undefined, а не строкой.

Здравствуйте, fryky, Вы писали:

FF>лудше бы конечно получить ответ на вопрос как проверить существование свойства\метода у объекта.

Стандартный способ — оператор in:

var fso = new ActiveXObject(«Scripting.FileSystemObject»);’какой-нибудь объект
‘проверяем существование метода CreateFolder ():
var exists = «CreateFolder» in fso; ‘получаем значение true или false
window.alert («есть это:» + exists);

Только in не отличает метод от свойства (не получается «GetFolder()» in fso) и объект в выражении с in должен уже существовать (иначе возникнет исключение).

Здравствуйте, Partisan, Вы писали:

P>Стандартный способ — оператор in:

P>var fso = new ActiveXObject(«Scripting.FileSystemObject»);’какой-нибудь объект
P>’проверяем существование метода CreateFolder ():
P>var exists = «CreateFolder» in fso; ‘получаем значение true или false
P>window.alert («есть это:» + exists);

P>Только in не отличает метод от свойства (не получается «GetFolder()» in fso) и объект в выражении с in должен уже существовать (иначе возникнет исключение).

Опа, совсем про него забыл. Одно уточнение, этот оператор появился в Javascript 1.4 и в JScript 1.0 и по-моему его нет в стандарте ECMA, то есть в ECMAScript это точно работать не станет.
И из не IE его поддерживают только последние версии браузеров.

Источник

Читайте также:  Css bold bolder boldest
Оцените статью