WebHub icon indicating copy to clipboard operation
WebHub copied to clipboard

关于js中的delete无法删除var定义的变量的问题

Open ckinmind opened this issue 9 years ago • 2 comments

这个issue是 #22 中的一个小问题的展开,那个小问题是delete无法删除var定义的变量,详细的问题如下

================================================ 我有去查看阮一峰的《javascript标准参考教程》中关于变量这一节,中提到

严格地说,var a = 1 与 a = 1,这两条语句的效果不完全一样,主要体现在delete命令无法删除前者。不过,绝大多数情况下,这种差异是可以忽略的

意思是说delete无法删除var定义的变量,可以删除不用var定义的变量, 测试一下

var test123 = 'good';   //var定义一个变量
delete test123;  //返回false,表示删除失败
test123;  //返回‘good’

test456 = ‘good2’;
delete test456;  //返回true,表示删除成功
test456;  // Uncaught ReferenceError: test456 is not defined  因为test456已经被删除了

关于delete的问题不再这个issue下展开,另开一个issues

===================================================== 查找到一个很好的资料解释这个问题:深入详解javascript之delete操作符 回头整理

ckinmind avatar Nov 08 '16 07:11 ckinmind

解释上面的问题,为什么delete无法删除var定义的变量,可以删除不用var定义的变量 关联issue #59 查看阮一峰js教程中属性描述对象

configurable 可配置性决定了一个变量是否可以被删除 当使用var命令声明变量时,变量的configurable为false 而不使用var命令声明变量时(或者使用属性赋值的方式声明变量) 这种差异意味着,如果一个变量是使用var命令生成的,就无法用delete命令删除。也就是说,delete只能删除对象的属性

ckinmind avatar Nov 14 '16 06:11 ckinmind

可以看下这篇,delete讲的很详细 https://www.w3cplus.com/javascript/deep-in-delete.html

likesoda avatar Mar 08 '21 11:03 likesoda