mirror of
https://github.com/denoland/deno.git
synced 2024-11-26 16:09:27 -05:00
31 lines
950 B
TypeScript
31 lines
950 B
TypeScript
|
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||
|
|
||
|
/**
|
||
|
* Determines whether an object has a property with the specified name.
|
||
|
* Avoid calling prototype builtin `hasOwnProperty` for two reasons:
|
||
|
*
|
||
|
* 1. `hasOwnProperty` is defined on the object as something else:
|
||
|
*
|
||
|
* const options = {
|
||
|
* ending: 'utf8',
|
||
|
* hasOwnProperty: 'foo'
|
||
|
* };
|
||
|
* options.hasOwnProperty('ending') // throws a TypeError
|
||
|
*
|
||
|
* 2. The object doesn't inherit from `Object.prototype`:
|
||
|
*
|
||
|
* const options = Object.create(null);
|
||
|
* options.ending = 'utf8';
|
||
|
* options.hasOwnProperty('ending'); // throws a TypeError
|
||
|
*
|
||
|
* @param obj A Object.
|
||
|
* @param v A property name.
|
||
|
* @see https://eslint.org/docs/rules/no-prototype-builtins
|
||
|
*/
|
||
|
export function hasOwnProperty<T>(obj: T, v: PropertyKey): boolean {
|
||
|
if (obj == null) {
|
||
|
return false;
|
||
|
}
|
||
|
return Object.prototype.hasOwnProperty.call(obj, v);
|
||
|
}
|