我对JavaScript的undefined和null值有点困惑。
if (!testvar)实际上做什么?它是否测试为undefined和null或只是undefined?
一旦一个变量被定义,我可以把它清除回未定义(因此删除变量)?
我可以传递undefined作为参数吗?例如:
function test(var1, var2, var3) {
}
test("value1", undefined, "value2");
我对JavaScript的undefined和null值有点困惑。
if (!testvar)实际上做什么?它是否测试为undefined和null或只是undefined?
一旦一个变量被定义,我可以把它清除回未定义(因此删除变量)?
我可以传递undefined作为参数吗?例如:
function test(var1, var2, var3) {
}
test("value1", undefined, "value2");
当前回答
基本的区别是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
其他回答
如何在命令行中设置一个变量为undefined:
在Ubuntu 12.10上的Java自带的js javascript命令行终端中将一个变量设置为undefined。
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中设置一个变量为undefined:
把这个放到myjs.html中:
<html>
<body>
<script type="text/JavaScript">
document.write("aliens: " + aliens);
document.write("typeof aliens: " + (typeof aliens));
var aliens = "scramble the nimitz";
document.write("found some aliens: " + (typeof aliens));
document.write("not sayings its aliens but... " + aliens);
aliens = undefined;
document.write("aliens deleted");
document.write("typeof aliens: " + (typeof aliens));
document.write("you sure they are gone? " + aliens);
</script>
</body>
</html>
输出如下:
aliens: undefined
typeof aliens: undefined
found some aliens: string
not sayings its aliens but... scramble the nimitz
aliens deleted
typeof aliens: undefined
you sure they are gone? undefined
警告!当你把你的变量设置为undefined时,你就是在把你的变量设置为另一个变量。如果一些鬼鬼祟祟的人运行undefined = 'rm -rf /';然后,无论何时将变量设置为undefined,都将收到该值。
您可能想知道我如何在开始时输出未定义的值异形,并使其仍然运行。这是因为javascript提升:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html
是的,你可以,因为未定义定义为未定义。
console.log(
/*global.*/undefined === window['undefined'] &&
/*global.*/undefined === (function(){})() &&
window['undefined'] === (function(){})()
) //true
你的情况:
test("value1", undefined, "value2")
你也可以创建自己的未定义变量:
Object.defineProperty(this, 'u', {value : undefined});
console.log(u); //undefined
要回答您的第一个问题,not操作符(!)将强制将给定的值转换为布尔值。因此null, 0, false, NaN和“”(空字符串)都将显示为false。
试试这个:
// found on UglifyJS
variable = void 0;
检查空值的最佳方法是
if ( testVar !== null )
{
// do action here
}
对于undefined
if ( testVar !== undefined )
{
// do action here
}
你可以用undefined来赋值一个变量。
testVar = undefined;
//typeof(testVar) will be equal to undefined.