У цьому підручнику ми побачимо аспекти обмежень і функції, пов’язані з hasOwnProperty() метод у JavaScript. Ми також дізнаємося про його впровадження та використання в розділах.
вступ
в JavaScript , метод hasOwnProperty() визначається як властивість, щоб переконатися, що об’єкт належить до згаданого проекту чи ні. Якщо буде виявлено, що властивість належить розпізнаному об’єкту, тоді вона має повернути вихідні дані на основі логічного оператора, тобто істинний або хибний.
Синтаксис
object.hasOwnProperty(propname)
Аргумент
Запис:
Тут нам потрібно передати символ або назву рядка, тому що це місце властивості, де перевіряється, чи символ або рядок належить об’єкту. Це робиться за допомогою методу, наведеного нижче.
шаблони програмування java
var movie = { name: 'iron man', genre: 'super hit', } var song = { name: 'cardigan', } movie.hasOwnProperty('name'); // returns true movie.hasOwnProperty('type'); // returns false song.hasOwnProperty('name'); // returns true song.hasOwnProperty('status'); // returns false
Один важливий аспект, на який слід звернути увагу, полягає в тому, що метод hasOwnProperty() зазвичай ігнорує успадковані властивості. Це означає, що метод має повернути своє значення true, якщо виявлено, що об’єкт має неуспадковану властивість, а ім’я вказано в propname. Якщо він повертає false, це означає, що об’єкт не має жодної властивості з указаним іменем, або він успадкував властивість від об’єкта proptype.
// Create an object var o = new Object(); // Define a noninherited local property o.x = 3.14; o.hasOwnProperty('x'); // Returns true: x is a local property of o o.hasOwnProperty('y'); // Returns false: o doesn't have a property y o.hasOwnProperty('toString'); // Returns false: toString property is inherited hasOwnProperty() will return true even if you define the undefined or null value. let a = new Object(); a.propertyOne = null; a.hasOwnProperty('propertyOne') // output: true a.propertyTwo = undefined; a.hasOwnProperty('propertyTwo') //Output: true
Ще одна додаткова перевага використання методу hasOwnProperty() полягає в тому, що він може ініціалізувати об’єкт, продовжуючи концепцію передачі рядка як аргументу за замовчуванням. Він має швидко відповісти істиною, якщо значення буде доступним для об’єкта. В іншому випадку він поверне false, якщо не знайдено. Це можна продемонструвати за допомогою наведеного нижче фрагмента коду.
function Car(name) { this.name = name; } Car.prototype.color = 'red'; const bmw = new Car('x1'); console.log(bmw.name); // property found on object console.log(bmw.color); // color property found on prototype console.log(bmw.hasOwnProperty('name')); // name is found on the object itself console.log(bmw.hasOwnProperty('color')); // color property is not found on the object itself
У наведеному вище фрагменті коду змінна створює новий об’єкт, автомобіль . Тепер можна стверджувати, що автомобіль ініціюється, його властивості та ім’я визначені в конструкторі. Хоча колір може не згадуватися в об’єкті під час ініціювання, він завжди буде доступний на прототипі ієрархія . Тому hasOwnProperty() завжди повертатиме true для назви, але для кольору повертатиме false.
Що стосується продуктивності, hasOwnProperty() працює плавно, проходячи через об’єкт за допомогою циклів. Наразі ми можемо сказати, що властивості конкретно належать об’єкту. Вони не мають ніякої кореляції з прототипом. Демонстрацію цього можна продемонструвати за допомогою наведеного нижче фрагмента коду.
рядок до внутр
// declaring a Car function function Car(name) { this.name = name; } // setting up new prop with prototype Car.prototype.color = 'red'; // creating a new Car object const BMW = new Car('x1'); // looping through every car prop including prototype as well for (let car in BMW) { car + ':', BMW[car]; } /* output: name: x1 output: color: red */ /**************************************/ /*will loop through only self properties of the object, excludes property generated through prototype method */ for (let car in BMW) { if (BMW.hasOwnProperty(car)) { console.log(car + ':', BMW[car]); } } // output: name:
Під час використання методу hasOwnProperty() він може виявитися марним, оскільки рендеринг об’єкта відбувається під час визначення властивості з назвою hasOwnProperty. Щоб підтвердити це, спробуйте зрозуміти наведений нижче фрагмент коду.
var harrypotter = { hasOwnProperty: function() { return true; } }; // Outputs: true console.log(harrypotter.hasOwnProperty('ridikulus'));
У наведеному вище фрагменті коду очевидно, що harrypotter вже має hasOwnProperty. Таким чином, він ніколи не викличе object.prototype.hasOwnProperty. Передбачається, що це може стикатися з випадками, коли це може дозволити здійснити дзвінок, але врешті-решт це може вийти з ладу. Тому завжди рекомендується знати про можливість дзвінків. У наведеному нижче фрагменті коду показано її вирішення.
// Returns false Object.prototype.hasOwnProperty.call(harrypotter, 'ridikulus');
У наведеному вище фрагменті коду ясно, що harrypotter визначає свій власний hasOwnProperty . Він ніколи не звернеться до Object.prototype.hasOwnProperty, тому що існує ймовірність, що він може повернути false, якщо зустрінеться з деякими випадками, коли значення false, і стає важко змусити все працювати за рогом. Щоб підтвердити це твердження, перегляньте наведений нижче фрагмент коду.
// Returns false Obje ct.prototype.hasOwnProperty.call(harrypotter, 'ridikulus');
Подібно до hasOwnProperty, існує ще один метод під назвою «in». Він також використовується для перевірки наявності ключа для об’єкта чи ні. Однак важливо зазначити, що ключова відмінність між hasOwnProperty та методом in полягає в тому, що метод in не дотримуватиметься порядку розрізнення між властивостями, які успадковуються, і властивостями, які успадковуються спеціально для об’єкта. Це можна показати за допомогою наведеного нижче фрагмента коду.
var fantasyLit = { tolkien: 'The Lord of the Rings', lewis: 'The Chronicles of Narnia' }; // Outputs: true console.log('tolkien' in fantasyLit); // Outputs: false console.log('asimov' in fantasyLit); // Outputs: true console.log('constructor' in fantasyLit);
У наведеному вище фрагменті коду очевидно, що метод «in» слідує властивості конструктора Object.prototype, звідки успадковуються всі об’єкти.
Щоб додати кілька моментів, є недолік для обох методів. Обидва методи можуть легко надати нам інформацію про властивість, яка вже була оголошена, але вони не можуть повідомити нам про властивість, що містить реальну вартість.
Функції java 8
Розглянемо наведений нижче фрагмент коду, який показує, як обидва методи використовують це обхідне рішення.
// Puts a 'declared' property on the global object // (window in browsers) var declared; // Outputs: true console.log('declared' in window); // Outputs: true console.log(window.hasOwnProperty('declared')); // Outputs: undefined console.log(declared); var obj = { myUndefined: undefined }; // Outputs: true console.log('myUndefined' in obj); // Outputs: true console.log(obj.hasOwnProperty('myUndefined')); // Outputs: undefined console.log(obj.myUndefined);
Висновок
У цьому посібнику ми обговорювали метод hasOwnProperty() у JavaScript. Загалом, цей метод є чудовим вибором для більшості розробників, щоб дізнатися та уникнути проблем, пов’язаних із деякими спеціальними клавішами, такими як конструктор. Якщо ми знайдемо будь-який об’єкт із будь-якою властивістю, рекомендовано використовувати hasOwnProperty() за замовчуванням. У разі наявності функції, призначеної для здійснення виклику шляхом перевірки об’єкта на метод toString(), ми повинні використовувати in.