| 15.2.3.14-0-1.js | 
          ---
es5id: 15.2.3.14-0-1
description: Object.keys must exist as a function
--- | 
          318 | 
        
        
          | 15.2.3.14-0-2.js | 
          ---
es5id: 15.2.3.14-0-2
description: Object.keys must exist as a function taking 1 parameter
--- | 
          324 | 
        
        
          | 15.2.3.14-1-1.js | 
          ---
es5id: 15.2.3.14-1-1
description: >
    Object.keys does not throw TypeError if type of first param is not
    Object
--- | 
          305 | 
        
        
          | 15.2.3.14-1-2.js | 
          ---
es5id: 15.2.3.14-1-2
description: >
    Object.keys does not throw TypeError if type of first param is not
    Object (boolean)
--- | 
          318 | 
        
        
          | 15.2.3.14-1-3.js | 
          ---
es5id: 15.2.3.14-1-3
description: >
    Object.keys does not throw TypeError if type of first param is not
    Object (string)
--- | 
          318 | 
        
        
          | 15.2.3.14-1-4.js | 
          ---
es5id: 15.2.3.14-1-4
description: >
    Object.keys throws TypeError if type of first param is not Object
    (null)
--- | 
          352 | 
        
        
          | 15.2.3.14-1-5.js | 
          ---
es5id: 15.2.3.14-1-5
description: >
    Object.keys throws TypeError if type of first param is not Object
    (undefined)
--- | 
          362 | 
        
        
          | 15.2.3.14-2-1.js | 
          ---
es5id: 15.2.3.14-2-1
description: Object.keys returns the standard built-in Array
--- | 
          369 | 
        
        
          | 15.2.3.14-2-2.js | 
          ---
es5id: 15.2.3.14-2-2
description: Object.keys returns the standard built-in Array (check [[Class]]
--- | 
          411 | 
        
        
          | 15.2.3.14-2-3.js | 
          ---
es5id: 15.2.3.14-2-3
description: Object.keys returns the standard built-in Array (Array overridden)
--- | 
          435 | 
        
        
          | 15.2.3.14-2-4.js | 
          ---
es5id: 15.2.3.14-2-4
description: Object.keys returns the standard built-in Array that is extensible
--- | 
          400 | 
        
        
          | 15.2.3.14-2-5.js | 
          ---
es5id: 15.2.3.14-2-5
description: Object.keys returns the standard built-in Array that is not sealed
--- | 
          393 | 
        
        
          | 15.2.3.14-2-6.js | 
          ---
es5id: 15.2.3.14-2-6
description: Object.keys returns the standard built-in Array that is not frozen
--- | 
          393 | 
        
        
          | 15.2.3.14-2-7.js | 
          ---
es5id: 15.2.3.14-2-7
description: >
    Object.keys - 'n' is 0 when 'O' doesn't contain own enumerable
    data or accessor properties
--- | 
          624 | 
        
        
          | 15.2.3.14-2-8.js | 
          ---
es5id: 15.2.3.14-2-8
description: >
    Object.keys - 'n' is the correct value when enumerable properties
    exist in 'O'
--- | 
          761 | 
        
        
          | 15.2.3.14-3-1.js | 
          ---
es5id: 15.2.3.14-3-1
description: >
    Object.keys returns the standard built-in Array containing own
    enumerable properties
--- | 
          471 | 
        
        
          | 15.2.3.14-3-2.js | 
          ---
es5id: 15.2.3.14-3-2
description: >
    Object.keys returns the standard built-in Array containing own
    enumerable properties (function)
--- | 
          448 | 
        
        
          | 15.2.3.14-3-3.js | 
          ---
es5id: 15.2.3.14-3-3
description: >
    Object.keys returns the standard built-in Array containing own
    enumerable properties (array)
--- | 
          466 | 
        
        
          | 15.2.3.14-3-4.js | 
          ---
es5id: 15.2.3.14-3-4
description: >
    Object.keys of an arguments object returns the indices of the
    given arguments
--- | 
          1145 | 
        
        
          | 15.2.3.14-3-5.js | 
          ---
es5id: 15.2.3.14-3-5
description: Object.keys must return a fresh array on each invocation
--- | 
          550 | 
        
        
          | 15.2.3.14-3-6.js | 
          ---
es5id: 15.2.3.14-3-6
description: >
    Object.keys - returns the standard built-in Array (instanceof
    Array)
--- | 
          391 | 
        
        
          | 15.2.3.14-3-7.js | 
          ---
es5id: 15.2.3.14-3-7
description: >
    Object.keys - length of the returned array equals the number of
    own enumerable properties of 'O'
--- | 
          659 | 
        
        
          | 15.2.3.14-4-1.js | 
          ---
es5id: 15.2.3.14-4-1
description: Object.keys - elements of the returned array start from index 0
--- | 
          678 | 
        
        
          | 15.2.3.14-5-1.js | 
          ---
es5id: 15.2.3.14-5-1
description: >
    Object.keys - own enumerable data property of 'O' is defined in
    returned array
--- | 
          545 | 
        
        
          | 15.2.3.14-5-2.js | 
          ---
es5id: 15.2.3.14-5-2
description: >
    Object.keys - own enumerable accessor property of 'O' is defined
    in returned array
--- | 
          576 | 
        
        
          | 15.2.3.14-5-3.js | 
          ---
es5id: 15.2.3.14-5-3
description: >
    Object.keys - non-enumerable own data property of 'O' is not
    defined in returned array
--- | 
          685 | 
        
        
          | 15.2.3.14-5-4.js | 
          ---
es5id: 15.2.3.14-5-4
description: >
    Object.keys - non-enumerable own accessor property of 'O' is not
    defined in returned array
--- | 
          777 | 
        
        
          | 15.2.3.14-5-5.js | 
          ---
es5id: 15.2.3.14-5-5
description: >
    Object.keys - inherited enumerable data property of 'O' is not
    defined in returned array
--- | 
          626 | 
        
        
          | 15.2.3.14-5-6.js | 
          ---
es5id: 15.2.3.14-5-6
description: >
    Object.keys - inherited enumerable accessor property of 'O' is not
    defined in returned array
--- | 
          764 | 
        
        
          | 15.2.3.14-5-7.js | 
          ---
es5id: 15.2.3.14-5-7
description: >
    Object.keys - inherted enumerable data property that is
    over-ridden by non-enumerable own data property is not defined in
    returned array
--- | 
          741 | 
        
        
          | 15.2.3.14-5-8.js | 
          ---
es5id: 15.2.3.14-5-8
description: >
    Object.keys - inherted enumerable data property that is
    over-ridden by non-enumerable own accessor property is not defined
    in returned array
--- | 
          752 | 
        
        
          | 15.2.3.14-5-9.js | 
          ---
es5id: 15.2.3.14-5-9
description: >
    Object.keys - inherted enumerable accessor property that is
    over-ridden by non-enumerable own data property is not defined in
    returned array
--- | 
          752 | 
        
        
          | 15.2.3.14-5-10.js | 
          ---
es5id: 15.2.3.14-5-10
description: >
    Object.keys - inherted enumerable accessor property that is
    over-ridden by non-enumerable own accessor property is not defined
    in returned array
--- | 
          764 | 
        
        
          | 15.2.3.14-5-11.js | 
          ---
es5id: 15.2.3.14-5-11
description: >
    Object.keys - own enumerable indexed data property of dense array
    'O' is defined in returned array
--- | 
          528 | 
        
        
          | 15.2.3.14-5-12.js | 
          ---
es5id: 15.2.3.14-5-12
description: >
    Object.keys - own enumerable indexed accessor property of dense
    array 'O' is defined in returned array
--- | 
          703 | 
        
        
          | 15.2.3.14-5-13.js | 
          ---
es5id: 15.2.3.14-5-13
description: >
    Object.keys - own enumerable indexed data property of sparse array
    'O' is defined in returned array
--- | 
          855 | 
        
        
          | 15.2.3.14-5-14.js | 
          ---
es5id: 15.2.3.14-5-14
description: >
    Object.keys - own enumerable indexed accessor property of sparse
    array 'O' is defined in returned array
--- | 
          686 | 
        
        
          | 15.2.3.14-5-15.js | 
          ---
es5id: 15.2.3.14-5-15
description: >
    Object.keys - own enumerable indexed data property of String
    object 'O' is defined in returned array
--- | 
          623 | 
        
        
          | 15.2.3.14-5-16.js | 
          ---
es5id: 15.2.3.14-5-16
description: >
    Object.keys - own enumerable indexed accessor property of String
    object 'O' is defined in returned array
--- | 
          740 | 
        
        
          | 15.2.3.14-5-a-1.js | 
          ---
es5id: 15.2.3.14-5-a-1
description: >
    Object.keys - 'value' attribute of element in returned array is
    correct.
--- | 
          537 | 
        
        
          | 15.2.3.14-5-a-2.js | 
          ---
es5id: 15.2.3.14-5-a-2
description: >
    Object.keys - 'writable' attribute of element of returned array is
    correct
--- | 
          630 | 
        
        
          | 15.2.3.14-5-a-3.js | 
          ---
es5id: 15.2.3.14-5-a-3
description: >
    Object.keys - 'enumerable' attribute of element of returned array
    is correct
--- | 
          736 | 
        
        
          | 15.2.3.14-5-a-4.js | 
          ---
es5id: 15.2.3.14-5-a-4
description: >
    Object.keys - Verify that 'configurable' attribute of element of
    returned array is correct
--- | 
          666 | 
        
        
          | 15.2.3.14-5-b-1.js | 
          ---
es5id: 15.2.3.14-5-b-1
description: Object.keys - Verify that 'index' of returned array is ascend by 1
--- | 
          510 | 
        
        
          | 15.2.3.14-6-1.js | 
          ---
es5id: 15.2.3.14-6-1
description: >
    Object.keys - the order of elements in returned array is the same
    with the order of properties in 'O' (dense array)
--- | 
          639 | 
        
        
          | 15.2.3.14-6-2.js | 
          ---
es5id: 15.2.3.14-6-2
description: >
    Object.keys - the order of elements in returned array is the same
    with the order of properties in 'O' (sparse array)
--- | 
          651 | 
        
        
          | 15.2.3.14-6-3.js | 
          ---
es5id: 15.2.3.14-6-3
description: >
    Object.keys - the order of elements in returned array is the same
    with the order of properties in 'O' (String object)
--- | 
          621 | 
        
        
          | 15.2.3.14-6-4.js | 
          ---
es5id: 15.2.3.14-6-4
description: >
    Object.keys - the order of elements in returned array is the same
    with the order of properties in 'O' (Arguments object)
--- | 
          685 | 
        
        
          | 15.2.3.14-6-5.js | 
          ---
es5id: 15.2.3.14-6-5
description: >
    Object.keys - the order of elements in returned array is the same
    with the order of properties in 'O' (any other built-in object)
--- | 
          665 | 
        
        
          | browser.js | 
           | 
          0 | 
        
        
          | name.js | 
          ---
es6id: 19.1.2.14
description: >
  Object.keys.name is "keys".
info: |
  Object.keys ( O )
  17 ECMAScript Standard Built-in Objects:
    Every built-in Function object, including constructors, that is not
    identified as an anonymous function has a name property whose value
    is a String.
    Unless otherwise specified, the name property of a built-in Function
    object, if it exists, has the attributes { [[Writable]]: false,
    [[Enumerable]]: false, [[Configurable]]: true }.
includes: [propertyHelper.js]
--- | 
          807 | 
        
        
          | not-a-constructor.js | 
          ---
esid: sec-ecmascript-standard-built-in-objects
description: >
  Object.keys does not implement [[Construct]], is not new-able
info: |
  ECMAScript Function Objects
  Built-in function objects that are not identified as constructors do not
  implement the [[Construct]] internal method unless otherwise specified in
  the description of a particular function.
  sec-evaluatenew
  ...
  7. If IsConstructor(constructor) is false, throw a TypeError exception.
  ...
includes: [isConstructor.js]
features: [Reflect.construct, arrow-function]
--- | 
          868 | 
        
        
          | order-after-define-property-with-function.js | 
          ---
esid: sec-object.keys
description: >
  Property names are returned in ascending chronological order of creation
  that is unaffected by [[DefineOwnProperty]].
info: |
  Object.keys ( O )
  [...]
  2. Let nameList be ? EnumerableOwnPropertyNames(obj, key).
  3. Return CreateArrayFromList(nameList).
  EnumerableOwnPropertyNames ( O, kind )
  [...]
  2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
  [...]
  OrdinaryOwnPropertyKeys ( O )
  [...]
  3. For each own property key P of O that is a String but is not an array index,
  in ascending chronological order of property creation, do
    a. Add P as the last element of keys.
  [...]
  5. Return keys.
features: [arrow-function]
includes: [compareArray.js]
--- | 
          1020 | 
        
        
          | order-after-define-property.js | 
          ---
esid: sec-object.keys
description: >
  Property names are returned in ascending chronological order of creation
  that is unaffected by [[DefineOwnProperty]].
info: |
  Object.keys ( O )
  [...]
  2. Let nameList be ? EnumerableOwnPropertyNames(obj, key).
  3. Return CreateArrayFromList(nameList).
  EnumerableOwnPropertyNames ( O, kind )
  [...]
  2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
  [...]
  OrdinaryOwnPropertyKeys ( O )
  [...]
  3. For each own property key P of O that is a String but is not an array index,
  in ascending chronological order of property creation, do
    a. Add P as the last element of keys.
  [...]
  5. Return keys.
includes: [compareArray.js]
--- | 
          1103 | 
        
        
          | property-traps-order-with-proxied-array.js | 
          ---
esid: sec-object.keys
description: >
  Ensure the correct property traps are called on a proxy of an array.
info: |
  19.1.2.16 Object.keys ( O )
  ...
  2. Let nameList be ? EnumerableOwnPropertyNames(obj, "key").
  ...
  7.3.21 EnumerableOwnPropertyNames ( O, kind )
  ...
  2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
  ...
  4. For each element key of ownKeys in List order, do
    a. If Type(key) is String, then
      i. Let desc be ? O.[[GetOwnProperty]](key).
      ...
features: [Proxy]
includes: [compareArray.js]
--- | 
          881 | 
        
        
          | proxy-keys.js | 
          ---
esid: sec-object.keys
description: >
  Object.keys() observably performs [[GetOwnProperty]]
info: |
  19.1.2.16 Object.keys ( O )
  1. Let obj be ? ToObject(O).
  2. Let nameList be ? EnumerableOwnProperties(obj, "key").
  ...
  7.3.21 EnumerableOwnProperties ( O, kind )
  1. Assert: Type(O) is Object.
  2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
  3. Let properties be a new empty List.
  4. For each element key of ownKeys in List order, do
    a. If Type(key) is String, then
      i. Let desc be ? O.[[GetOwnProperty]](key).
      ...
features: [Symbol]
--- | 
          3898 | 
        
        
          | proxy-non-enumerable-prop-invariant-1.js | 
          ---
esid: sec-object.keys
description: >
  Proxy [[OwnPropertyKeys]] trap does not skip non-enumerable keys when validating invariant:
 The result List must contain the keys of all non-configurable own properties of
    the target object.
info: |
  Object.keys ( O )
  ...
  2. Let nameList be ? EnumerableOwnPropertyNames(obj, "key").
  EnumerableOwnPropertyNames ( O, kind )
  ...
  2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
  [[OwnPropertyKeys]] ( )
  ...
  11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
  ...
  15. Let targetNonconfigurableKeys be a new empty List.
  16. For each element key of targetKeys, do
    a. Let desc be ? target.[[GetOwnProperty]](key).
    b. If desc is not undefined and desc.[[Configurable]] is false, then
      i. Append key as an element of targetNonconfigurableKeys.
  ...
  18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
  19. For each key that is an element of targetNonconfigurableKeys, do
    a. If key is not an element of uncheckedResultKeys, throw a TypeError exception.
features: [Proxy]
--- | 
          1522 | 
        
        
          | proxy-non-enumerable-prop-invariant-2.js | 
          ---
esid: sec-object.keys
description: >
  Proxy [[OwnPropertyKeys]] trap does not skip non-enumerable keys when validating invariant:
 If the target object is not extensible, then the result List must contain all the keys of
    the own properties of the target object and no other values.
info: |
  Object.keys ( O )
  ...
  2. Let nameList be ? EnumerableOwnPropertyNames(obj, "key").
  EnumerableOwnPropertyNames ( O, kind )
  ...
  2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
  [[OwnPropertyKeys]] ( )
  ...
  11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
  16. For each element key of targetKeys, do
    a. Let desc be ? target.[[GetOwnProperty]](key).
    b. If desc is not undefined and desc.[[Configurable]] is false, then
      ...
    c. Else,
      i. Append key as an element of targetConfigurableKeys.
  ...
  18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
  ...
  21. For each key that is an element of targetConfigurableKeys, do
    a. If key is not an element of uncheckedResultKeys, throw a TypeError exception.
features: [Proxy]
--- | 
          1568 | 
        
        
          | proxy-non-enumerable-prop-invariant-3.js | 
          ---
esid: sec-object.keys
description: >
  Proxy [[OwnPropertyKeys]] trap does not skip non-enumerable keys when validating invariant:
 If the target object is not extensible, then the result List must contain all the keys of
    the own properties of the target object and no other values.
info: |
  Object.keys ( O )
  ...
  2. Let nameList be ? EnumerableOwnPropertyNames(obj, "key").
  EnumerableOwnPropertyNames ( O, kind )
  ...
  2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
  [[OwnPropertyKeys]] ( )
  ...
  11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
  16. For each element key of targetKeys, do
    a. Let desc be ? target.[[GetOwnProperty]](key).
    b. If desc is not undefined and desc.[[Configurable]] is false, then
      ...
    c. Else,
      i. Append key as an element of targetConfigurableKeys.
  ...
  18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
  ...
  22. If uncheckedResultKeys is not empty, throw a TypeError exception.
features: [Proxy]
--- | 
          1494 | 
        
        
          | return-order.js | 
          ---
esid: sec-object.keys
description: Object.keys enumeration order
features: [for-in-order]
includes: [compareArray.js]
--- | 
          539 | 
        
        
          | shell.js | 
           | 
          0 |