diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2019-10-09 17:18:08 -0400 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-10-09 17:18:08 -0400 |
commit | 28293acd9c12a94f5d769706291032e844c7b92b (patch) | |
tree | 1fec6a3cd8d7c9e8bc9b1486f5c8438eb906a595 /std/util/has_own_property.ts | |
parent | 5c6835efd82c298df99ce71c4a36ca23515333a3 (diff) | |
parent | 151ce0266eb4de2c8fc600c81c192a5f791b6169 (diff) |
Merge branch 'std_modified' into merge_std3
Diffstat (limited to 'std/util/has_own_property.ts')
-rw-r--r-- | std/util/has_own_property.ts | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/std/util/has_own_property.ts b/std/util/has_own_property.ts new file mode 100644 index 000000000..707d951d3 --- /dev/null +++ b/std/util/has_own_property.ts @@ -0,0 +1,30 @@ +// 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); +} |