nl_tokens: Any own non - configurable properties of the target that are not included in the trap result give rise to a TypeError . As such we check whether the returned result contains at least all sealed properties of the target object .
pl_tokens: function ( ) { var trap = this . getTrap ( "keys" ) ; if ( trap === undefined ) { // default forwarding behavior return Reflect . keys ( this . target ) ; } var trapResult = trap . call ( this . handler , this . target ) ; // propNames is used as a set of strings var propNames = Object . create ( null ) ; var numProps = + trapResult . length ; var result = new Array ( numProps ) ; for ( var i = 0 ; i < numProps ; i ++ ) { var s = String ( trapResult [ i ] ) ; if ( propNames [ s ] ) { throw new TypeError ( "keys trap cannot list a " + "duplicate property '" + s + "'" ) ; } if ( ! Object . isExtensible ( this . target ) && ! isFixed ( s , this . target ) ) { // non-extensible proxies don't tolerate new own property names throw <mask> TypeError ( "keys trap cannot list a new " + "property '" + s + "' on a non-extensible object" ) ; } propNames [ s ] = true ; result [ i ] = s ; } var ownEnumerableProps = Object . keys ( this . target ) ; var target = this . target ; ownEnumerableProps . forEach ( function ( ownEnumerableProp ) { if ( ! propNames [ ownEnumerableProp ] ) { if ( isSealed ( ownEnumerableProp , target ) ) { throw new TypeError ( "keys trap failed to include " + "non-configurable enumerable property '" + ownEnumerableProp + "'" ) ; } if ( ! Object . isExtensible ( target ) && isFixed ( ownEnumerableProp , target ) ) { // if handler is allowed not to report ownEnumerableProp as an own // property, we cannot guarantee that it will never report it as // an own property later. Once a property has been reported as // non-existent on a non-extensible object, it should forever be // reported as non-existent throw new TypeError ( "cannot report existing own property '" + ownEnumerableProp + "' as non-existent on a " + "non-extensible object" ) ; } } } ) ; return result ; }