gpt4 book ai didi

javascript - 为什么删除 global 和删除 var 在 Node 中会导致不同的输出?

转载 作者:行者123 更新时间:2023-11-30 08:24:20 24 4
gpt4 key购买 nike

我在终端进入 Node 并使用 global.user = {admin: false} 创建了一个全局用户。我还创建了一个帐户 var account = {balance: 1000} 。然后我输入

delete user
=> true

delete account
=> false

为什么删除全局创建的东西返回 true,而删除使用 var 创建的东西(据我理解也是全局的)返回 false?

enter image description here

最佳答案

首先,delete 用于删除对象的属性,而不是用于删除变量。来自 MDN:

The JavaScript delete operator removes a property from an object

并且,在严格模式下:

var, let and const create non-configurable properties that cannot be deleted with the delete operator. In strict mode this will raise a SyntaxError.

如果你只是在 node.js 中以严格模式尝试这个:

var x = "hello";
delete x;

您将获得:

SyntaxError: Delete of an unqualified identifier in strict mode.

在非严格模式下,delete 将返回 false 并且什么也不做,也不会抛出异常(出于向后兼容性的原因)。


在 node.js 中,你所有的代码都在一个模块函数中,所以你用 var 声明的任何东西都不是全局的。它是模块函数内的局部变量,函数内声明的局部变量不能用 delete 删除,因为这不是 Javascript 支持的功能。这就是 var 所做的 - 它在当前范围内创建一个局部变量。

global.user = xxx 将属性分配给在全局范围内预定义的预先存在的 global 对象。 global 对象的属性(与对象的任何其他可配置属性一样)可以使用 delete 删除。

delete 运算符的 truefalse 返回值告诉您 delete 是否成功。

关于javascript - 为什么删除 global 和删除 var 在 Node 中会导致不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48090279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com