我对JavaScript的undefined和null值有点困惑。

if (!testvar)实际上做什么?它是否测试为undefined和null或只是undefined?

一旦一个变量被定义,我可以把它清除回未定义(因此删除变量)?

我可以传递undefined作为参数吗?例如:

function test(var1, var2, var3) {

}

test("value1", undefined, "value2");

当前回答

只是为了好玩,这里有一种相当安全的方法将“未赋值”赋值给变量。为了产生碰撞,需要有人在Object原型中添加与随机生成的字符串完全相同的名称。我确信随机字符串生成器可以得到改进,但我只是从这个问题中取了一个:在JavaScript中生成随机字符串/字符

这是通过创建一个新对象并尝试访问一个随机生成的名称在它上的属性,我们假设不存在,因此将有undefined的值。

function GenerateRandomString() {
    var text = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    for (var i = 0; i < 50; i++)
        text += possible.charAt(Math.floor(Math.random() * possible.length));

    return text;
}

var myVar = {}[GenerateRandomString()];

其他回答

要回答您的第一个问题,not操作符(!)将强制将给定的值转换为布尔值。因此null, 0, false, NaN和“”(空字符串)都将显示为false。

检查空值的最佳方法是

if ( testVar !== null )
{
    // do action here
}

对于undefined

if ( testVar !== undefined )
{
    // do action here
}

你可以用undefined来赋值一个变量。

testVar = undefined;
//typeof(testVar) will be equal to undefined.

基本的区别是undefined和null代表不同的概念。

如果只有null可用,您将无法确定null是否被故意设置为值,或者该值是否还没有设置,除非您使用了繁琐的错误捕获:例如

var a;

a == null; // This is true
a == undefined; // This is true;
a === undefined; // This is true;

然而,如果你故意将值设置为null,与undefined的严格相等将失败,从而允许你区分null值和undefined值:

var b = null;
b == null; // This is true
b == undefined; // This is true;
b === undefined; // This is false;

查看这里的参考资料,而不是依赖于人们轻蔑地说“总之,未定义是一个特定于javascript的混乱,这让每个人都感到困惑”之类的垃圾。仅仅因为你感到困惑,并不意味着它就是一团糟。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined

这种行为也不是JavaScript特有的,它完成了布尔结果可以为真、假、未知(null)、无值(undefined)或出错(error)的广义概念。

http://en.wikipedia.org/wiki/Undefined_value

只是为了好玩,这里有一种相当安全的方法将“未赋值”赋值给变量。为了产生碰撞,需要有人在Object原型中添加与随机生成的字符串完全相同的名称。我确信随机字符串生成器可以得到改进,但我只是从这个问题中取了一个:在JavaScript中生成随机字符串/字符

这是通过创建一个新对象并尝试访问一个随机生成的名称在它上的属性,我们假设不存在,因此将有undefined的值。

function GenerateRandomString() {
    var text = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    for (var i = 0; i < 50; i++)
        text += possible.charAt(Math.floor(Math.random() * possible.length));

    return text;
}

var myVar = {}[GenerateRandomString()];

试试这个:

// found on UglifyJS
variable = void 0;