Reputation: 3179
I am using the following logic to get the i18n string of the given key.
export function i18n(key) {
if (entries.hasOwnProperty(key)) {
return entries[key];
} else if (typeof (Canadarm) !== 'undefined') {
try {
throw Error();
} catch (e) {
Canadarm.error(entries['dataBuildI18nString'] + key, e);
}
}
return entries[key];
}
I am using ESLint in my project. I am getting the following error:
Do not access Object.prototype method 'hasOwnProperty' from target object. It is a 'no-prototype-builtins' error.
How do I change my code to resolve this error ? I don't want to disable this rule.
Upvotes: 317
Views: 249015
Reputation: 3024
I've ended up using this code:
const _ = require('lodash');
_.has(entries, key)
Upvotes: 0
Reputation: 882
You can use Object.hasOwn(obj, prop)
instead. hasOwn is intended to be a replacement for Object.hasOwnProperty
.
Upvotes: 71
Reputation: 71
Object.hasOwn() is officially replacement for Object.prototype.hasOwnProperty().
if this objects has it's own property then it returns true.if property does not exist or inherited then it returns false.so hasOwn() static method and hasOwnProperty() method behaves in a same way.
const object1 = {
prop: 'exists',
};
console.log(Object.hasOwn(object1, 'prop')); //true.
your code will be
export function i18n(key) {
if (Object.hasOwn(entries,key)) {
return entries[key];
} else if (typeof (Canadarm) !== 'undefined') {
try {
throw Error();
} catch (e) {
Canadarm.error(entries['dataBuildI18nString'] + key, e);
}
}
return entries[key];
}
Upvotes: 0
Reputation: 2759
To make code more elegant it can be in form a polyfill:
if (!Object.hasOwn) {
Object.prototype.hasOwn = function (object, property) {
return Object.prototype.hasOwnProperty.call(object, property);
}
}
console.log(Object.hasOwn({test: 1}, 'test'), Object.hasOwn({tes: 1}, 'test'))
Upvotes: 2
Reputation: 4325
@Orial answer is correct
Use this:
Object.prototype.hasOwnProperty.call(object, "objectProperty");
Upvotes: 15
Reputation: 2806
this is working for me so try with it
let bug={
name:"test"
}
if (bug && typeof bug === 'object' && Object.prototype.hasOwnProperty.call(bug, name)) {
}
Upvotes: 1
Reputation: 31247
For your specific case, the following examples shall work:
if(Object.prototype.hasOwnProperty.call(entries, "key")) {
//rest of the code
}
OR
if(Object.prototype.isPrototypeOf.call(entries, key)) {
//rest of the code
}
OR
if({}.propertyIsEnumerable.call(entries, "key")) {
//rest of the code
}
Upvotes: 54
Reputation: 932
It seems like this would also work:
key in entries
since that will return a boolean on whether or not the key exists inside the object?
Upvotes: 19
Reputation: 288270
You can access it via Object.prototype
:
Object.prototype.hasOwnProperty.call(obj, prop);
That should be safer, because
Object.prototype
Object.prototype
, the hasOwnProperty
method could be shadowed by something else.Of course, the code above assumes that
Object
has not been shadowed or redefinedObject.prototype.hasOwnProperty
has not been redefinedcall
own property has been added to Object.prototype.hasOwnProperty
Function.prototype.call
has not been redefinedIf any of these does not hold, attempting to code in a safer way, you could have broken your code!
Another approach which does not need call
would be
!!Object.getOwnPropertyDescriptor(obj, prop);
Upvotes: 496