Javascript 使用delete运算符删除变量

Javascript 使用delete运算符删除变量,javascript,Javascript,为什么函数内部的变量不能删除,函数外部的变量可以删除 (function myFunc(){ var colors = ['red','green','blue']; console.log(delete colors);//cannot be deleted, returns false })(); console.log(delete colors);// can be deleted, returns true 另一个问题: 假设在不同的函数中定义了颜色-变量,如下所示- (funct

为什么函数内部的变量不能删除,函数外部的变量可以删除

(function myFunc(){
var colors = ['red','green','blue'];
console.log(delete colors);//cannot be deleted, returns false
})();
console.log(delete colors);// can be deleted, returns true

另一个问题:

假设在不同的函数中定义了
颜色
-变量,如下所示-

(function myFunc(){
var colors = ['red','green','blue'];
})();
(function nextFunc(){
var colors = ['one','two','three'];
})();
如何仅删除myFunc的变量


我尝试了console.log(删除myFunc.colors);但似乎错了

因为变量的范围就是函数。它不存在于函数之外。 第二个问题与第一个问题类似——变量不存在于函数外部,因为它是在函数内部声明的

看看这个代码


如果我试图删除一个不存在的变量,js将返回true。

这是因为,delete操作符返回一个布尔值。如果它是true或false,则取决于对象是否存在,不是删除是否成功。这意味着如果您尝试删除一开始不存在的内容,delete将返回true

(function myFunc(){
var colors = ['red','green','blue'];
console.log(delete colors);//cannot be deleted, returns false
})();
console.log(delete none_existing_object); //RETURNS true
添加::


delete仅在无法删除属性时返回false。因此,在所有其他情况下,如果试图删除已声明的变量,它将返回true

,您不能这样做,因为它们被创建为不可删除的。因此,尝试这样做会返回false,因为该属性未被删除

如果您有:

(function myFunc(){
var colors = ['red','green','blue'];
console.log(delete colors);//cannot be deleted, returns false
})();

console.log(delete colors);// can be deleted, returns true
然后在第二个delete语句中,范围中没有变量颜色,并且尝试删除未解析为类型引用或是不可解析引用的ientifier返回true()

如何仅删除myFunc的变量


您不能(见上文)。

您不能删除变量。但是您可以删除一个属性。请参见下面的示例

(function myFunc(){
  var colors = ['red','green','blue'];
  var emp = {
     name : 'Jagadeesh',
     id : 100
  }
  console.log(delete colors);//cannot be deleted, return`enter code here`s false
  console.log(delete emp.name);//can be deleted, returns true
})();

在这里,我创建了一个带有属性名和id的JSON emp。运行上面的示例。你将能够理解它。另一件事是您试图删除函数外未定义的变量。所以你是真的。不能访问函数范围之外的变量。要进行测试,可以使用console.log(颜色)。它将显示错误,表示未定义。您需要了解变量范围。在这里检查一下

你根本不能在任何地方删除变量。我在函数外部测试过,它被删除了。问问自己为什么
console.log(delete fart)在未定义时也返回true。阅读您可以删除全局对象的属性,是的。请你解释一下如何返回真的?“如果是真的还是假的取决于对象是否存在”是不正确的。尝试删除不存在的标识符返回true。这样的引用从未存在过,因此以后不能存在。@C-link delete仅在属性无法删除时返回false。因此,在所有其他情况下,它都会返回true@C-我建议您阅读以下链接::以便更好地理解这里没有JSON,尽管这里有一个数组文字(aka)和一个对象文字(aka)。对。不能删除使用var声明的数组文字。如果它是属性,则可以删除。
(function myFunc(){
  var colors = ['red','green','blue'];
  var emp = {
     name : 'Jagadeesh',
     id : 100
  }
  console.log(delete colors);//cannot be deleted, return`enter code here`s false
  console.log(delete emp.name);//can be deleted, returns true
})();