Skip to content

Commit 2526e07

Browse files
committed
Object.keysLength stage 2 proposal
1 parent ed0f30f commit 2526e07

File tree

14 files changed

+105
-0
lines changed

14 files changed

+105
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
- Improved performance of `atob` and `btoa`, [#1503](https://github.com/zloirock/core-js/issues/1503), [#1464](https://github.com/zloirock/core-js/issues/1464)
44
- Forced replacement of `Iterator.{ concat, zip, zipKeyed }` in the pure version for ensuring proper wrapped `Iterator` instances as the result
55
- Fixed a minor logical bug in the debugging output of `core-js-builder`
6+
- Added `Object.keysLength` stage 2 proposal
67
- Compat data improvements:
78
- [`Iterator.concat`](https://github.com/tc39/proposal-iterator-sequencing) marked as [shipped in V8 ~ Chrome 146](https://issues.chromium.org/issues/434977727#comment7)
89
- Added [Deno 2.6.7](https://github.com/denoland/deno/releases/tag/v2.6.7) compat data mapping

README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
183183
- [`String.dedent`](#stringdedent)
184184
- [`Symbol` predicates](#symbol-predicates)
185185
- [`Symbol.customMatcher` for extractors](#symbolcustommatcher-for-extractors)
186+
- [`Object.keysLength`](#object-keyslength)
186187
- [Stage 1 proposals](#stage-1-proposals)
187188
- [`Observable`](#observable)
188189
- [New collections methods](#new-collections-methods)
@@ -3091,6 +3092,23 @@ core-js/proposals/pattern-extractors
30913092
core-js(-pure)/full/symbol/custom-matcher
30923093
```
30933094

3095+
##### [`Object.keysLength`](https://github.com/tc39/proposal-object-keys-length)[⬆](#index)
3096+
Module [`esnext.object.keys-length`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.object.keys-length.js).
3097+
```ts
3098+
class Object {
3099+
static keysLength(obj: Object): number;
3100+
}
3101+
```
3102+
[*CommonJS entry points:*](#commonjs-api)
3103+
```
3104+
core-js/proposals/object-keys-length
3105+
core-js(-pure)/full/object/keys-length
3106+
```
3107+
*Examples*:
3108+
```js
3109+
Object.keysLength({ a: 1, b: 2 }); // => 2
3110+
```
3111+
30943112
#### Stage 1 proposals[⬆](#index)
30953113
[*CommonJS entry points:*](#commonjs-api)
30963114
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Object.keysLength
2+
[Specification](https://tc39.es/proposal-object-keys-length/)\
3+
[Proposal repo](https://github.com/tc39/proposal-object-keys-length)
4+
5+
## Built-ins signatures
6+
```ts
7+
class Object {
8+
static keysLength(obj: Object): number;
9+
}
10+
```
11+
12+
## [Entry points]({docs-version}/docs/usage#h-entry-points)
13+
```plaintext
14+
core-js/proposals/object-keys-length
15+
core-js(-pure)/full/object/keys-length
16+
```
17+
18+
## Examples
19+
```js
20+
Object.keysLength({ a: 1, b: 2 }); // => 2
21+
```

docs/web/docs/menu.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,10 @@
299299
{
300300
"title": "Symbol.customMatcher for extractors",
301301
"url": "{docs-version}/docs/features/proposals/symbol-custommatcher-for-extractors"
302+
},
303+
{
304+
"title": "Object.keysLength",
305+
"url": "{docs-version}/docs/features/proposals/object-keys-length"
302306
}
303307
]
304308
},

packages/core-js-compat/src/data.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2743,6 +2743,8 @@ export const data = {
27432743
},
27442744
// TODO: Remove from `core-js@4`
27452745
'esnext.object.has-own': null,
2746+
'esnext.object.keys-length': {
2747+
},
27462748
// TODO: Remove from `core-js@4`
27472749
'esnext.object.iterate-entries': {
27482750
},

packages/core-js-compat/src/modules-by-versions.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,4 +323,7 @@ export default {
323323
'es.weak-map.get-or-insert',
324324
'es.weak-map.get-or-insert-computed',
325325
],
326+
3.49: [
327+
'esnext.object.keys-length',
328+
],
326329
};

packages/core-js/full/object/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ require('../../modules/esnext.object.has-own');
55
require('../../modules/esnext.object.iterate-entries');
66
require('../../modules/esnext.object.iterate-keys');
77
require('../../modules/esnext.object.iterate-values');
8+
require('../../modules/esnext.object.keys-length');
89

910
module.exports = parent;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
'use strict';
2+
require('../../modules/esnext.object.keys-length');
3+
4+
var entryUnbind = require('../../internals/entry-unbind');
5+
6+
module.exports = entryUnbind('Object', 'keysLength');
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
var getBuiltIn = require('../internals/get-built-in');
4+
var lengthOfArrayLike = require('../internals/length-of-array-like');
5+
var toObject = require('../internals/to-object');
6+
7+
var enumerableOwnProperties = getBuiltIn('Object', 'keys');
8+
9+
// `Object.keysLength` method
10+
// https://github.com/tc39/proposal-object-keys-length
11+
$({ target: 'Object', stat: true, forced: true }, {
12+
keysLength: function keysLength(O) {
13+
var obj = toObject(O);
14+
var keyList = enumerableOwnProperties(obj);
15+
return lengthOfArrayLike(keyList);
16+
}
17+
});
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
'use strict';
2+
// https://github.com/tc39/proposal-object-keys-length
3+
require('../modules/esnext.object.keys-length');

0 commit comments

Comments
 (0)