Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >已声明变量和未声明变量的影响

已声明变量和未声明变量的影响
EN

Stack Overflow用户
提问于 2013-04-13 08:34:02
回答 4查看 15.9K关注 0票数 29

JavaScript声明变量和未声明变量之间的主要区别是什么,因为delete操作符不能对声明变量起作用?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var y = 43;     // declares a new variable
 x = 42;

 delete x;       // returns true  (x is a property of the global object and can be deleted)
 delete y;       // returns false (delete doesn't affect variable names) 

这一切为什么要发生?全局声明的变量也是window对象的属性,那么为什么不能删除它呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-15 03:43:10

已声明和未声明的全局变量

存储和访问它们的机制是相同的,但是在某些情况下,根据configurable属性的值(如下所述),JavaScript会对它们进行不同的处理。在常规使用中,它们的行为应该是相同的。

两者都存在于全局对象中

下面是已声明和未声明的全局变量的一些比较。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var declared = 1;  // Explicit global variable (new variable)
undeclared   = 1;  // Implicit global variable (property of default global object)

window.hasOwnProperty('declared')    // true
window.hasOwnProperty('undeclared')  // true

window.propertyIsEnumerable('declared')    // true
window.propertyIsEnumerable('undeclared')  // true

window.declared     // 1
window.undeclared   // 1

window.declared   = 2;
window.undeclared = 2;

declared     // 2
undeclared   // 2

delete declared     // false
delete undeclared   // true
delete undeclared   // true (same result if delete it again)

delete window.declared     // false
delete window.undeclared   // true (same result if delete it yet again)
delete window.undeclared   // true (still true)

已声明和未声明的全局变量都是window对象(默认全局对象)的属性。两者都不是通过原型链从不同的对象继承而来的。它们都直接存在于window对象中(因为window.hasOwnProperty对它们都返回true )。

可配置属性

对于已声明的全局变量,configurable属性为false。对于未声明的全局变量,则为true。可以使用getOwnPropertyDescriptor方法检索configurable属性的值,如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var declared = 1;
undeclared = 1;

(Object.getOwnPropertyDescriptor(window, 'declared')).configurable     // false
(Object.getOwnPropertyDescriptor(window, 'undeclared')).configurable   // true

如果属性的configurable属性为true,则可以使用defineProperty方法更改该属性的属性,并可以使用delete运算符删除该属性。否则,不能更改属性,也不能以这种方式删除属性。

non-strict mode中,如果属性是可配置的,则delete操作符返回true,如果属性是不可配置的,则返回false

摘要

声明的全局变量

删除属性是缺省全局对象的属性(window)

  • The属性attributes be changed.

  • Cannot
  • delete

未声明的全局变量

  • 是可以更改的默认全局对象的属性(window)
  • The属性。可以使用delete运算符

删除

  • delete

另请参阅

票数 29
EN

Stack Overflow用户

发布于 2013-04-13 08:38:51

主要的区别在于在函数中声明变量的时候。如果在函数内部声明变量时使用var,那么该变量将成为局部变量。但是,如果不使用var,那么无论在何处声明变量(在函数内部还是外部),变量都将成为全局变量。

票数 1
EN

Stack Overflow用户

发布于 2016-02-18 16:35:12

当通过JavaScript中的变量声明创建变量时,这些属性都是使用DontDelete属性创建的,这基本上意味着您创建的变量不能使用delete表达式删除。默认情况下,所有函数、参数和函数参数都是使用此DontDelete属性创建的。您可以将DontDelete看作是一面旗帜。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var y = 43;
delete y;         //returns false because it is has a DontDelete attribute

而未声明的赋值不会设置任何像、DontDelete、这样的属性。因此,当我们在这个未声明的变量上应用删除操作符时,它返回true。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = 42;
delete x;        //returns true because it doesn't have a DontDelete attribute

属性赋值和变量声明的区别-后者设置DontDelete,而前一个不设置。这就是为什么未声明的赋值会创建一个可删除的属性。

Link on how exactly delete operator works

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15985875

复制
相关文章
删除列中的 NULL 值
今天接到一个群友的需求,有一张表的数据如图 1,他希望能通过 SQL 查询出图 2 的结果。
白日梦想家
2020/07/20
9.9K0
删除列中的 NULL 值
访问列表中的值
#!/usr/bin/python list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, 5, 6, 7 ] print "list1[0]: ", list1[0] print "list2[1:5]: ", list2[1:5]
用户8442333
2021/05/27
5.6K0
B+树索引使用(7)匹配列前缀,匹配值范围(十九)
上篇文章索引的代价,b+树占的空间比较大,增删改对b+树每个节点的索引排序影响也很大,时间耗费长,所以没有必要不要乱建索引,还介绍了索引的最左原则和全值查询。
用户9919783
2022/07/26
9950
【说站】Python如何在列表中添加新值
1、append()将元素添加到集合,insert()将元素插入指定的下标应用程序,返回值为None。
很酷的站长
2022/11/24
4.1K0
【说站】Python如何在列表中添加新值
【说站】Python DataFrame如何根据列值选择行
以上就是Python DataFrame根据列值选择行的方法,希望对大家有所帮助。
很酷的站长
2022/11/24
5.3K0
【说站】Python DataFrame如何根据列值选择行
获取GridView中的某列值
    protected void GridView1_RowEditing(object sen
Java架构师必看
2021/03/22
10.2K0
如何使用Excel将某几列有值的标题显示到新列中
如果我们有好几列有内容,而我们希望在新列中将有内容的列的标题显示出来,那么我们怎么做呢?
繁华是客
2023/03/03
11.3K0
Excel应用实践19:根据工作表某列中的值从另一工作簿中获取数据
在下图1所示的工作簿Data.xlsx的工作表Sheet1中,存放着待使用的数据。
fanjy
2019/08/27
18.9K0
Excel应用实践19:根据工作表某列中的值从另一工作簿中获取数据
根据数据源字段动态设置报表中的列数量以及列宽度
在报表系统中,我们通常会有这样的需求,就是由用户来决定报表中需要显示的数据,比如数据源中共有八列数据,用户可以自己选择在报表中显示哪些列,并且能够自动调整列的宽度,已铺满整个页面。本文就讲解一下Act
葡萄城控件
2018/01/10
4.9K0
根据数据源字段动态设置报表中的列数量以及列宽度
Zabbix 值匹配字符串 创建触发器
Zabbix监控脚本返回值是字符串时,也可以使用字符串函数来创建触发器。举个栗子,现在有个需求要监控从服务器上下载数据是否出现异常,当数据下载失败时返回异常并告警。那么就可以在监控脚本中设置当下载成功时返回值为”download complete”,下载失败时返回值为异常信息。 创建监控项时设置返回值为字符型。
我是李超人
2020/08/20
1.2K0
python中创建列表的方法_python中readlines
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/184390.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
3.8K0
在数据框架中创建计算列
在Excel中,我们可以通过先在单元格中编写公式,然后向下拖动列来创建计算列。在PowerQuery中,还可以添加“自定义列”并输入公式。在Python中,我们创建计算列的方式与PQ中非常相似,创建一列,计算将应用于这整个列,而不是像Excel中的“下拉”方法那样逐行进行。要创建计算列,步骤一般是:先创建列,然后为其指定计算。
fanjy
2022/04/13
3.8K0
在数据框架中创建计算列
【Redis】Redis 列表 List 操作 ( 查询操作 | 根据下标获取元素 | 获取列表长度 | 增操作 | 插入值 | 删操作 | 移除值 | 修改操作 | 设置列表指定索引的值 )
在 Redis 中 , 通过 一个 键 Key , 可以 存储多个值 , 这些值存放在一个 List 列表中 ;
韩曙亮
2023/03/30
6.4K0
【Redis】Redis 列表 List 操作 ( 查询操作 | 根据下标获取元素 | 获取列表长度 | 增操作 | 插入值 | 删操作 | 移除值 | 修改操作 | 设置列表指定索引的值 )
列表:创建列表
列表是Tcl语言中最重要的一种数据结构。什么是列表?列表是元素的有序集合,各个元素可以包含任何字符串,例如空格,反斜杠,换行符等。列表表现为特定结构的字符串,这意味着可以把它们赋值给一个变量,可以把它们做为参数传给命令,可以把它们嵌套到其他列表中。
Lauren的FPGA
2019/10/30
2.4K0
HBase 根据表名与列信息与配置信息创建表
private static Configuration configuration=null; static{ configuration= HBaseConfigurati
爱明依
2019/03/12
9280
Pandas 查找,丢弃列值唯一的列
数据清洗很重要,本文演示如何使用 Python Pandas 来查找和丢弃 DataFrame 中列值唯一的列,简言之,就是某列的数值除空值外,全都是一样的,比如:全0,全1,或者全部都是一样的字符串如:已支付,已支付,已支付…
萝 卜
2022/05/12
5.7K0
Pandas 查找,丢弃列值唯一的列
Mysql与Oracle中修改列的默认值
背景: 业务发展需要,需要复用历史的表,并且通过表里面原来一个未使用的字段来区分不同的业务。 于是想到通过default来修改列的默认值: alter table A modify column biz default 'old' comment '业务标识 old-老业务, new-新业务' 现象: 上线几天之后,业务反馈旧业务的相关数据查询不到了。找后台运维查生产数据库,发现历史数据的biz字段还是null 原因: 自己在本地mysql数据库试了下,好像的确是default没法修改历史数据为null
SecondWorld
2021/09/08
13.2K0
Ext根据条件显示隐藏列
  写在ExtonReady函数里面,并在表格成功渲染之后,可以添加判断是否隐藏或者显示某一列
河岸飞流
2019/08/09
2.7K0
Sql Server 中 根据具体的值 查找该值所在的表和字段
在我们的工作中经常遇到这样一个问题,在页面中保存一条数据,有个字段值为“张三”,但是,不知道这条数据保存在了哪个表中,现在我们想要追踪该值是存储到了那个表的那个字段中,具体要怎么操作呢?下面我们可以借助存储过程来解决这一问题
jamesjiang
2022/11/20
6.4K0
Sql Server 中 根据具体的值 查找该值所在的表和字段
点击加载更多

相似问题

匹配Pandas列中的单词,并根据匹配创建新列

30

根据列表中的匹配项创建列

214

根据其他列中的值创建新列

28

如何根据diff列中的值创建具有列表中可用值的新列?

16

是否根据其他pandas列的列表中的值数创建新列?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文