【问题标题】:How to delete a variable?如何删除变量?
【发布时间】:2013-06-06 13:13:24
【问题描述】:

这是我的 javascript 代码,我想删除变量代码,使其具有未定义的值。

var code = $(this).data('code');
var userelm = $(this);

我正在检查:

if($('.code-1').val()!='' && $('.code-2').val()!='' && $('.code-3').val()!=''){
    if(code==$('.code-1').val()+$('.code-2').val()+$('.code-3').val()){
        $('.overlay').remove();
        $('.code-box').remove();
        $('.close-lock').remove();
        userelm.ajaxloader(); //own function
        userelm.off();
        delete code;
        console.log(code);
        delete userelm;
    }
}

为什么这个程序没有删除 code 变量,所以它的值是 undefined?

【问题讨论】:

标签: javascript


【解决方案1】:

在 JavaScript 中删除一个变量:

总结:

在 JavaScript 中删除变量时遇到问题的原因是 JavaScript 不允许。你不能删除由var 命令创建的任何东西,除非我们把兔子从我们的花招中拉出来。

delete 命令仅适用于不是用 var 创建的对象的属性。

JavaScript 将允许您在以下情况下删除使用 var 创建的变量:

  1. 您正在使用 javascript 解释器或命令行。

  2. 您正在使用 eval 并在那里创建和删除您的 var。

终端上的演示,使用delete boodelete(boo) 命令。带有js 命令行终端的演示让您可以删除变量。

el@defiant ~ $ js

js> typeof boo
"undefined"

js> boo
typein:2: ReferenceError: boo is not defined

js> boo=5
5

js> typeof boo
"number"

js> delete(boo)
true

js> typeof boo
"undefined"

js> boo
typein:7: ReferenceError: boo is not defined

如果您必须在 JavaScript 中将变量设置为未定义,您有一个选择:

javascript 页面中的演示:将其放入 myjs.html:

<html>
<body>
    <script type="text/JavaScript">
        document.write("aliens: " + aliens + "<br>");
        document.write("typeof aliens: " + (typeof aliens) + "<br>");
        var aliens = "scramble the nimitz";
        document.write("found some aliens: " + (typeof aliens) + "<br>");
        document.write("not sayings its aliens but... " + aliens + "<br>");
        aliens = undefined;
        document.write("aliens set to undefined<br>");
        document.write("typeof aliens: " + (typeof aliens) + "<br>");
        document.write("you sure they are gone? " + aliens);
    </script>
</body>
</html>

用浏览器打开 myjs.html,它会打印:

aliens: undefined
typeof aliens: undefined
found some aliens: string
not sayings its aliens but... scramble the nimitz
aliens set to undefined
typeof aliens: undefined
you sure they are gone? undefined

警告 当您将变量设置为undefined 时,您正在将一个变量分配给另一个变量。如果有人通过运行undefined = 'gotcha!' 毒化了井,那么每当您将变量设置为未定义时,它就会变成:“gotcha!”。

我们应该如何检查一个变量是否没有值?

像这样使用 null 而不是 undefined:

document.write("skittles: " + skittles + "<br>");
document.write("typeof skittles: " + (typeof skittles) + "<br>");
var skittles = 5;
document.write("skittles: " + skittles + "<br>");
document.write("typeof skittles:" + typeof skittles + "<br>");
skittles = null;
document.write("skittles: " + skittles + "<br>");
document.write("typeof skittles: " + typeof skittles);

哪些打印:

skittles: undefined
typeof skittles: undefined
skittles: 5
typeof skittles:number
skittles: null
typeof skittles: object 

如果你没有使用 strict,你可以删除这样创建的变量:

<script type="text/JavaScript">
   //use strict
   a = 5;
   document.writeln(typeof a);        //prints number
   delete a;
   document.writeln(typeof a);        //prints undefined
</script>

但是如果你取消注释use strict,javascript 将不会运行。

【讨论】:

  • null 和 undefined 不是同一个问题吗?例如:null = 'gotcha';
【解决方案2】:

Delete 不会删除变量。

delete 操作符从对象中删除一个属性。

你可以试试:

code = null;

【讨论】:

    【解决方案3】:

    在全局范围内试试这个:

    x = 2;
    delete window.x;
    

    【讨论】:

      【解决方案4】:

      以下也适用于严格模式:

      "use strict";
      
      var foo = 1;
      console.log(foo);
      // 1
      
      foo = (function(){}());
      console.log(foo);
      // undefined

      ;)

      【讨论】:

        【解决方案5】:

        删除不影响变量名

        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

        x = 42;         // creates the property x on the global object
        var y = 43;     // declares a new variable, y
        myobj = {
          h: 4,
          k: 5
        };
        
        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)
        delete Math.PI; // returns false (delete doesn't affect certain predefined properties)
        delete myobj.h; // returns true  (user-defined properties can be deleted)
        
        delete myobj;   // returns true  (myobj is a property of the global object, not a variable, so it can be deleted)
        

        【讨论】:

        • 即使你重置了一个使用 var 创建的变量(通过将其设置为 null),你仍然在内存中保留变量名,不是吗?
        【解决方案6】:

        动态创建的变量在不再引用后将是automatically deleted

        (function(){
          var a = 1;
        })(); //a available until here
        

        【讨论】:

          【解决方案7】:

          别人的回答很简单有效

          code = null;
          code = undefined;
          

          但我也想分享一下原因,为什么 delete code; 不起作用

          delete 仅用于删除对象的属性。绝不意味着(开发)删除变量。

          var obj = {
            'first' : 10;
          }
          //Following will print
          console.log(obj.first)
          
          delete obj.first;
          
          //Following will print undefined/null/might give error
          console.log(obj.first)
          

          奖金(针对开发者)

          var item = 10;
          delete item;
          //Following will print 
          console.log(item);
          
          //The reason for upper is when we declare variable with var it is of 
          //primitive data type and delete won't work.
          
          
          item = 10;
          delete item;
          //Following will give reference error
          console.log(item);
          
          //The reason for upper is when we declare variable without var it is a 
          //property of global 'window' object so delete work.
          

          【讨论】:

            【解决方案8】:

            因为你写了 var 来定义变量。 如果你使用 var 不能删除它。 你一定要写这个

            userelm = null;
            

            或者不要写var。 看到这个问题:How to unset or remove a Javascript variable?

            【讨论】:

              【解决方案9】:

              如果您在函数中声明它,则不必删除 var - 当函数结束时,内部 var 停止存在。您只是不必全局声明变量。

              【讨论】:

                【解决方案10】:

                我没有成功使用myvariable = null

                但我成功了myvariable = function(){};

                【讨论】:

                  猜你喜欢
                  • 2019-07-27
                  • 2012-05-31
                  • 2013-01-04
                  • 2011-10-12
                  • 1970-01-01
                  • 2022-06-28
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多