如何取消设置 JavaScript 变量?

2023-12-07

我在 JavaScript 中有一个全局变量(实际上是一个window属性,但我认为这并不重要),它已经由以前的脚本填充,但我不希望稍后运行另一个脚本来查看它的值,或者甚至定义它。

我已经把some_var = undefined它用于测试目的typeof some_var == "undefined"但我真的不认为这是正确的做法。

你怎么认为?


The delete运算符从对象中删除属性。它无法删除变量。所以问题的答案取决于全局变量或属性是如何定义的。

(1) 如果创建的是var,无法删除。

例如:

var g_a = 1; //create with var, g_a is a variable
delete g_a; //return false
console.log(g_a); //g_a is still 1

(2) 如果创建时没有var,可以删除。

g_b = 1; //create without var, g_b is a property
delete g_b; //return true
console.log(g_b); //error, g_b is not defined

技术说明

1. 使用var

在这种情况下参考g_a是按照 ECMAScript 规范所称的“可变环境" 附加到当前作用域 - 在使用的​​情况下,这可能是函数执行上下文var在函数内部(尽管当您考虑时可能会变得更复杂一些)let)或在“全局”代码的情况下可变环境附加到全局对象(通常window).

参考文献中可变环境通常不可删除 - 详细过程见ECMAScript 10.5详细解释了这一点,但足以说明,除非您的代码在eval上下文(大多数基于浏览器的开发控制台使用),然后使用声明的变量var无法删除。

2. 不使用var

当尝试在不使用var关键字,JavaScript 尝试在 ECMAScript 规范中调用的内容中查找命名引用“词汇环境”,主要区别在于词汇环境s 是嵌套的 - 即词汇环境有一个父级(ECMAScript 规范称之为“外部环境引用”),并且当 JavaScript 无法在父级中找到引用时词汇环境,它看起来在父级中词汇环境(详细信息见10.3.1 and 10.2.2.1)。顶层词汇环境是个 ”全球环境“,并且它绑定到全局对象,因为它的引用是全局对象的属性。因此,如果您尝试访问未使用声明的名称var当前作用域或任何外部作用域中的关键字,JavaScript 最终将获取该属性window对象作为该引用。正如我们之前所了解的,对象的属性可以被删除。

Notes

  1. 重要的是要记住var声明是“提升的” - 即它们总是被认为发生在它们所在范围的开头 - 尽管不是可以在 a 中完成的值初始化var声明 - 留在原处。所以在下面的代码中,a是来自的参考可变环境而不是window财产及其价值将是10在代码末尾:

    function test() { a = 5; var a = 10; }
    
  2. 上述讨论是在未启用“严格模式”时的情况。使用“严格模式”时,查找规则有点不同,在没有“严格模式”的情况下解析为窗口属性的词法引用将在“严格模式”下引发“未声明的变量”错误。我不太明白这是在哪里指定的,但它是浏览器的行为方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何取消设置 JavaScript 变量? 的相关文章

  • Javascript/jQuery 变量未给出预期值

    和我之前的其他人一样 我也在 Javascript 的范围内苦苦挣扎 那并试图阅读该死的东西 我已经检查了关于这个问题的一些先前的线程 但我似乎无法让它们正确地应用于我的问题 在下面的示例中 我想操纵中的值tagsArr数组 一旦数组已完全
  • Javascript 闭包与 PHP 闭包,有什么区别?

    JS 中的闭包和 PHP 中的闭包有什么区别 它们的工作方式几乎相同吗 在 PHP 中编写闭包时有什么需要注意的注意事项吗 一个区别是两者如何处理存储执行匿名函数的上下文 JavaScript var a 1 var f function
  • onclick 调用 hide-div 函数不起作用

    我一直在与这段简单的代码作斗争 我正在尝试使用
  • 在承诺中运行同步函数

    我是 JS 和异步操作的新手 在使用express的nodeJS路由器中 我使用mongoose从mongo聚合了一些数据 该数据是每隔 15 分钟从不同站点收集的天气数据 我使用猫鼬聚合管道处理数据 以获取每小时数据并按每个站点进行分组
  • ExtJS 4 用于选择所选值的组合框事件

    由于某种原因 我需要知道用户何时从组合框中选择了值 即使它已经被选择 仅当用户选择未选择的项目时 选择 事件才起作用 我在组合框或选择器的文档中没有看到任何类似 itemclick 的事件 有任何想法吗 ComboBox uses 绑定列表
  • 如何抑制 IE9 window.close() 确认消息

    应用 window close 函数后 IE9 会引发 您正在查看的网页正在尝试关闭 消息 有没有办法在不更改应用程序代码的情况下 而是通过更改一些特定于 IE 的注册表项来抑制此消息 如果窗口不是由脚本打开的 IE 不允许在没有确认的情况
  • 无法读取未定义错误的属性“匹配”

    我试图在 React JS 前端显示一些文本来代替个人资料图像 当它不可用时 基本上 我将当前客户名称传递给一个函数 该函数提取名称中所有单词的第一个字符 我能够仅显示名称 但是当我执行函数调用时 出现 无法读取未定义的属性 匹配 错误 并
  • 执行oauth时如何创建弹出窗口?

    我想通过使用弹出窗口来完成 Lifestream 和其他网站使用 oauth 身份验证所做的事情 他们打开一个弹出窗口 不知何故没有被弹出窗口拦截器阻止 并将他们的网站变灰 然后 在允许 oauth 访问时 它会说重定向回原始站点并终止弹出
  • 如何将js文件从同一文件夹导入chrome扩展中的background.js

    我在导入与 background js 脚本库 位于同一库中的文件 score js 时遇到问题 我对 js 和 chrome 扩展都很陌生 我研究了 require js 并做了这个 背景 html h1 Tab Manager h1
  • Lodash 和 Underscore.js 之间的差异 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 为什么有人会更喜欢Lodash http lodash com or 下划线 js http underscorejs org 实用程序库优于其
  • 单击 div 中的图像时如何翻转该 Div?

    好吧 我对编写 Javascript 知之甚少 我可以对其进行一些编辑 并且涉足了 CSS3 动画 我将向您展示我正在努力实现的目标 然后在下面进行解释 网站布局将是这样的 https i stack imgur com RMb4R jpg
  • 原型链、构造函数、继承

    我正在玩 javascript 原型 我是新手 所以我有一个小问题 我正在用这个article http mckoss com jscript object htm作为指导 我已经定义了产品和书籍 目的是什么Book prototype c
  • NodeJS 错误堆栈未定义 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在使用节点检查器 我注意到new Error 有未定义的堆栈 如果我将此值分配给一个变量 该变量将显示堆栈未定义 有趣的是 跑步new
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 如何使用 Typescript 设置 Material-UI for React?

    我在将 Material UI 添加到我的 React 项目中时遇到了一些问题 该项目是用 Typescript 编程的 根据教程 我首先添加react tab event plugin import injectTapEventPlugi
  • “x modulo y”的结果是什么?

    引用 ECMAScript 规范第 5 2 节 符号 x modulo y y 必须是有限且非零 计算 值 k 与 y 具有相同的符号 或零 使得 abs k 因此 如果 y 为正 则 x modulo y 的结果 k 为正 无论 x 的符
  • 如何在画布中旋转图表同时保持数字垂直?

    我正在尝试围绕其中心旋转画布中的图表 同时保持字母直立 我正在尝试使用 ctx rotate 但它使用画布的左侧作为中心来旋转整个图表 以下链接提供了视觉效果 我希望它看起来像绿色 而不是红色 就像我的代码当前所做的那样 视觉解释 http
  • 如何制作全局数组?

    所以 我读了这个帖子 https stackoverflow com questions 1249131 declaring global variables in iphone project 这几乎正是我正在寻找的东西 然而 这不起作用
  • ReactJS setState 仅在嵌套在 setState 中时才有效

    问题 当我使用 this setState 并在回调中输出状态时 它根本不会改变 但是当我将 setstate 嵌套在 setstate 中时 它将正常工作 例子 这不行 this setState data newData 这确实有效 t
  • Javascript 最佳实践,为什么使用逗号来链接函数/变量声明?

    我一直在为 jQuery jQueryLog 开发一个插件 以允许调试链选择器和返回值 如果你想检查一下 你可以这样做here http www jquerylog com 这已经是第二个版本了 第一个版本实际上是经过编辑的 jQuery

随机推荐

  • 对于使用 packages.config 的项目,是否有 contentFiles 的替代方案?

    我有一个 nuget 包 当用户安装我的包时 我希望将其内容复制到构建输出 有对此的支持 NuGet ContentFiles 揭秘在 NuGet v3 3 中 但是 它仅适用于使用project json 当我有一个使用的项目时 内容文件
  • React Native中获取ScrollView的当前滚动位置

    是否可以获取当前滚动位置或当前页面
  • C++11 lambda 实现和内存模型

    我想要一些有关如何正确思考 C 11 闭包和std function就它们如何实现以及如何处理内存而言 尽管我不相信过早优化 但我确实有在编写新代码时仔细考虑我的选择对性能影响的习惯 我还进行了大量的实时编程 例如在微控制器和音频系统上 需
  • android 三角形drawablw xml

    我想画一个等边三角形 我检查过 但它是倒置的 我想要一个如下图所示的三角形 Triangle 三角形 xml
  • Java 扫描器未扫描整个文件

    我正在用 Java 编写一个程序 我需要做的一件事是为最短路径问题创建一组每个有效位置 这些位置在 txt 文件中定义 该文件遵循严格的模式 每行一个条目 没有额外的空格 非常适合使用 nextLine 获取数据 我的问题是 文件中的 24
  • Facebook SDK 3.1 PresentShareDialogModally 失败

    我正在尝试在 iOS 6 上测试 Facebook 的新内置共享 表 但是当我运行示例代码时 它没有显示该表 相反 它会为我发布一个状态 但不会显示它将首先发布的内容 我还以为 Facebook 不再允许你把话放到用户的嘴里了 控制台打印此
  • html 空间显示为 %2520 而不是 %20

    将文件名传递给 Firefox 浏览器会导致其将空格替换为 2520代替 20 我在名为的文件中有以下 HTMLmyhtml html img src 当我加载时myhtml html在 Firefox 中 图像显示为损坏的图像 所以我右键
  • 如何提高 g.drawImage() 方法调整图像大小的性能

    我有一个应用程序 用户可以在相册中上传图片 但上传的图像自然需要调整大小 以便还有拇指可用 并且显示的图片也适合页面 例如800x600 我调整大小的方式是这样的 Image scaledImage img getScaledInstanc
  • 如何在 python 中同时检测多个按键?

    我想对角移动我的机器人汽车 因此为了实现这一点 我想检测 w 是否与 d 或 a 一起按下 如果我想使用 w a s d 作为我的键 我现在有的是这样的 from curtsies import Input with Input keyna
  • 不同签名功能的容器

    我正在尝试用 C 编写一个框架 用户可以在其程序中指示他想要应用的一组函数记忆化战略 假设我们的程序中有 5 个函数f1 f5我们希望避免对函数进行 昂贵的 重新计算f1 and f3如果我们已经使用相同的输入调用它们 请注意 每个函数可以
  • 如何动态加载 gwt 生成的 nocache.js 文件?

    我想加载生成的 GWTfoo foo nocache js使用 JQuery 动态文件 不知何故这个foo foo nocache js文件不被浏览器执行 如果我通常使用 GWT 样式而不使用 JQuery 放置脚本 那么在加载页面后 它会
  • 标准布尔运算顺序

    我正在用 JavaScript 编写一个用于布尔逻辑的调车场算法 但我遇到了操作顺序的问题 我允许的操作是 and or implies equals biconditional not xor nor nand 但是 我不知道这些的优先顺
  • BasicNetwork.performRequest - 意外响应代码 400 (POST)

    当我尝试使用 Volley StringRequest 或 JsonObjectRequest 通过 REST API 获取数据时 我总是收到 400 错误 它与邮递员一起工作正常 Http请求方法为POST Content Type为ap
  • 在 GZIPInputStream 中包装 BodySubscriber 会导致挂起

    我正在使用新的java net http类来处理异步 HTTP 请求 响应交换 我正在尝试找到一种方法让 BodySubscriber 处理不同的编码类型 例如 gzip 然而 映射一个BodySubsriber
  • 在 C 中对齐 printf() 变量和小数

    今天C的大问题 所以我希望我的变量在列中对齐并且同时保留两位小数 我知道要达到小数点后两位 我需要使用 2f 如果我想要宽度 我使用 30s 但我无法将它们结合起来 看看我下面的代码你就会明白了 printf ItemA 2f 3 34 2
  • 宽松的内存顺序效果是否可以延长到执行线程的生命周期之后?

    假设在 C 11 程序中 我们有一个名为A启动一个名为的异步线程B 内螺纹B 我们对原子变量执行原子存储std memory order relaxed记忆顺序 然后穿线A用线程连接B 然后穿线A启动另一个名为C执行原子加载操作std me
  • 让调用堆栈向上增长会使缓冲区溢出更安全吗?

    每个线程都有自己的堆栈来存储局部变量 但堆栈也用于存储返回地址调用函数时 在 x86 汇编中 esp指向最近分配的堆栈末尾 如今 大多数 CPU 的堆栈都出现负增长 此行为可以通过溢出缓冲区并覆盖保存的返回地址来执行任意代码 如果堆栈正向增
  • 如何设置ImageView透明

    我的图像设置为 50 透明 当我把它放到ImageView上时 它完全不透明 看不到后面的东西 如何在xml中为ImageView设置100 透明 以便当我设置图像时 我可以看到后面的东西 我试过 android opacity trans
  • 表格行上的框阴影未出现在某些浏览器上

    表格行上的 CSS 框阴影 tr 跨浏览器的工作似乎不一致 在某些浏览器上会显示阴影 在其他人身上 没有影子 我正在使用以下 CSS tr background color rgb 165 182 229 box shadow 0px 2p
  • 如何取消设置 JavaScript 变量?

    我在 JavaScript 中有一个全局变量 实际上是一个window属性 但我认为这并不重要 它已经由以前的脚本填充 但我不希望稍后运行另一个脚本来查看它的值 或者甚至定义它 我已经把some var undefined它用于测试目的ty