25 lines
1,020 B
JavaScript
25 lines
1,020 B
JavaScript
|
// Function to recursively iterate through built-in names.
|
||
|
function collectBuiltinNames(obj, visited = new Set(), result = new Set()) {
|
||
|
// Check if the object has already been visited to avoid infinite recursion.
|
||
|
if (visited.has(obj))
|
||
|
return;
|
||
|
|
||
|
// Add the current object to the set of visited objects
|
||
|
visited.add(obj);
|
||
|
// Get the property names of the current object
|
||
|
const properties = Object.getOwnPropertyNames(obj);
|
||
|
// Iterate through each property
|
||
|
for (var i=0; i < properties.length; i++) {
|
||
|
var property = properties[i];
|
||
|
if (property != "collectBuiltinNames" && typeof property != "number")
|
||
|
result.add(property);
|
||
|
// Check if the property is an object and if so, recursively iterate through its properties.
|
||
|
if (typeof obj[property] === 'object' && obj[property] !== null)
|
||
|
collectBuiltinNames(obj[property], visited, result);
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
// Start the recursive iteration with the global object.
|
||
|
console.log(Array.from(collectBuiltinNames(this)).join('\n'));
|