Building Your Learning Module...
Getting things ready for you!
Find videos you like?
Save to resource drawer for future reference!
A safer, simpler way to check if an object has its own property! Replaces the old hasOwnProperty method with a more reliable static method that can't be overridden.
const obj = { name: 'Alice' };
// Works, but verbose
obj.hasOwnProperty('name'); // true
// Better way (to avoid issues)
Object.prototype.hasOwnProperty
.call(obj, 'name'); // true
// Problem: can be overridden!
obj.hasOwnProperty = () => false;
obj.hasOwnProperty('name'); // false ❌const obj = { name: 'Alice' };
// Simple and clean!
Object.hasOwn(obj, 'name'); // true
// Can't be overridden
obj.hasOwn = () => false;
Object.hasOwn(obj, 'name'); // true ✅
// Works with null prototype
const nullObj = Object.create(null);
Object.hasOwn(nullObj, 'x'); // Works!const user = {
name: 'Alice',
age: 30
};
// Check own properties
console.log(Object.hasOwn(user, 'name')); // true
console.log(Object.hasOwn(user, 'age')); // true
console.log(Object.hasOwn(user, 'email')); // false
// Inherited properties return false
console.log(Object.hasOwn(user, 'toString')); // false
console.log('toString' in user); // true (inherited)const config = {
apiUrl: 'https://api.example.com',
timeout: 5000,
retries: 3
};
// Safely filter own properties
function getOwnProps(obj) {
const result = {};
for (const key in obj) {
if (Object.hasOwn(obj, key)) {
result[key] = obj[key];
}
}
return result;
}
console.log(getOwnProps(config));
// { apiUrl: '...', timeout: 5000, retries: 3 }// Object with no prototype
const map = Object.create(null);
map.key1 = 'value1';
map.key2 = 'value2';
// Old way fails!
// map.hasOwnProperty('key1'); // ❌ Error! No hasOwnProperty
// New way works perfectly!
console.log(Object.hasOwn(map, 'key1')); // true ✅
console.log(Object.hasOwn(map, 'key2')); // true ✅
console.log(Object.hasOwn(map, 'key3')); // false ✅function validateUser(user) {
const required = ['name', 'email', 'age'];
for (const field of required) {
if (!Object.hasOwn(user, field)) {
return `Missing required field: ${field}`;
}
}
return 'Valid!';
}
const user1 = { name: 'Alice', email: 'alice@example.com', age: 30 };
const user2 = { name: 'Bob', email: 'bob@example.com' };
console.log(validateUser(user1)); // 'Valid!'
console.log(validateUser(user2)); // 'Missing required field: age'Can't be overridden or shadowed by object properties
No need for Object.prototype.hasOwnProperty.call() workaround
Even with objects that have null prototype
Clear intent - checking if object has its own property
Can't be overridden like hasOwnProperty
Object.hasOwn(obj, 'prop') - simple!
Property checks, validation, iteration
Modern property checking standard