22

这是我的 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变量,所以它的值是未定义的?

4

10 回答 10

25

删除不会删除变量。

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

你可以试试:

code = null;
于 2013-06-06T13:16:49.707 回答
25

在 JavaScript 中删除一个变量:

概括:

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

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

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

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

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

终端演示,使用delete booordelete(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 

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

<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 将不会运行。

于 2014-01-08T19:00:21.120 回答
8

在全局范围内试试这个:

x = 2;
delete window.x;
于 2014-01-23T02:08:57.673 回答
8

以下也适用于严格模式:

"use strict";

var foo = 1;
console.log(foo);
// 1

foo = (function(){}());
console.log(foo);
// undefined

;)

于 2014-10-10T22:53:40.253 回答
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)
于 2013-06-06T13:18:59.993 回答
1

动态创建的变量将在不再引用后自动删除。

(function(){
  var a = 1;
})(); //a available until here
于 2014-05-05T14:15:42.233 回答
1

其他的答案非常简单有效

code = null;
code = undefined;

但我也想分享它的原因,为什么要删除代码;行不通

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.
于 2018-02-08T05:15:41.847 回答
0

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

于 2016-04-08T14:16:32.353 回答
0

我没有成功myvariable = null

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

于 2016-05-25T18:44:15.707 回答
0

因为您编写var来定义变量。如果你使用 var 不能删除它。你必须写这个

userelm = null;

或者不要写var。请参阅此问题:如何取消设置或删除 Javascript 变量?

于 2016-03-27T15:07:54.430 回答