我不确定如何定义这new member个东西,请查看下面的演示,我想要的是ListNewMemberNames:

代码(demo.html)假定在浏览器中运行

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Var1 Test</title>
</head>
<body>
    <script>
        var1 = {value:7}  /* same as window.var1 = {value:7}*/

        ListMemberNames(window) 
        /* returns: ["__defineGetter__", ... "addEventListener", "alert", ... "var1"] */

        ListNewMemberNames(window)
        /* returns: ["var1"] */
        
        function ListMemberNames(obj){ /* tricks with .hasOwnProperty() or something*/ }
        function ListNewMemberNames(obj){ /* ? */ }
    </script>
</body>
</html>

推荐答案

通常,您不能在JavaScript中动态分析当前(或外部)词法环境(变量名到它们的值的映射).这只可能发生在顶层,因为用var(或根本没有)声明的顶层变量被赋值给窗口--在页面加载开始时判断窗口上存在的属性,将其放入数组中,然后查看后面存在的属性,找出差异.

// always run this first
const properties = Object.getOwnPropertyNames(window);

// then your code does something
var1 = {value:7}

// and it is detectable by doing:
const newPropertiesOnWindow = Object.getOwnPropertyNames(window)
  .filter(prop => !properties.includes(prop));
console.log(newPropertiesOnWindow);

这是可能的,几乎没有--但我想不出有任何好的理由想要这样做.

Javascript相关问答推荐

如何从defineExpose访问数据和方法

如何使用JavaScript向html元素添加样式

创建1:1比例元素,以另一个元素为中心

有Angular 的material .未应用收件箱中的价值变化

有条件的悲剧

过滤对象数组并动态将属性放入新数组

基于变量切换隐藏文本

Angular中计算信号和getter的区别

使用LocaleCompare()进行排序时,首先使用大写字母

如何将Cookie从服务器发送到用户浏览器

在我的index.html页面上找不到我的Java脚本条形图

根据一个条件,如何从处理过的数组中移除一项并将其移动到另一个数组?

Phaserjs-创建带有层纹理的精灵层以自定义外观

未捕获的运行时错误:调度程序为空

在D3条形图中对具有相同X值的多条记录进行分组

将嵌套数组的元素乘以其深度,输出一个和

重新呈现-react -筛选数据过多

我怎样才能点击一个元素,并获得一个与 puppeteer 师导航页面的URL?

连续添加promise 时,如何在所有promise 都已结算时解除加载覆盖

限制数组中每个元素的长度,