Javascript 我可以将变量设置为undefined还是将undefined作为参数传递?
我对JavaScript的Javascript 我可以将变量设置为undefined还是将undefined作为参数传递?,javascript,undefined,Javascript,Undefined,我对JavaScript的未定义和null值有点困惑 如果(!testvar)实际执行什么操作?它是测试未定义的和空的还是只测试未定义的 定义变量后,我是否可以将其清除回未定义的(因此删除变量) 我可以将未定义的作为参数传递吗?例如: function test(var1, var2, var3) { } test("value1", undefined, "value2"); 要回答第一个问题,not运算符(!)将强制将给定的内容转换为布尔值。因此null,0,false,NaN和”(空
未定义
和null
值有点困惑
如果(!testvar)
实际执行什么操作?它是测试未定义的
和空的
还是只测试未定义的
定义变量后,我是否可以将其清除回未定义的
(因此删除变量)
我可以将未定义的作为参数传递吗?例如:
function test(var1, var2, var3) {
}
test("value1", undefined, "value2");
要回答第一个问题,not运算符(!
)将强制将给定的内容转换为布尔值。因此null
,0
,false
,NaN
和”
(空字符串)都将显示为false。检查空值的最佳方法是
if ( testVar !== null )
{
// do action here
}
对于未定义的
if ( testVar !== undefined )
{
// do action here
}
可以将变量指定为未定义
testVar = undefined;
//typeof(testVar) will be equal to undefined.
console.log(
/*global.*/undefined === window['undefined'] &&
/*global.*/undefined === (function(){})() &&
window['undefined'] === (function(){})()
) //true
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()];
您不能(不应该?)将任何内容定义为未定义,因为变量将不再是未定义的–您只是将其定义为某个内容
您不能(不应该?)将未定义的传递给函数。如果要传递空值,请改用null
语句if(!testvar)
检查布尔真/假值,这个特殊语句测试testvar
的计算结果是否为false
。根据定义,null
和undefined
不应被计算为true
或false
,但JavaScript将null
计算为false
,如果试图计算未定义的变量,则会给出错误
要正确测试未定义
或空
,请使用以下各项:
if(typeof(testvar) === "undefined") { ... }
if(testvar === null) { ... }
forif(something)
和if(!something)
常用于检查某物是否已定义。例如:
if (document.getElementById)
标识符被转换为布尔值,因此undefined
被解释为false
。当然,还有其他值(如0和“”)也被解释为false
,但是标识符不应该合理地具有这样的值,或者您乐于将这样的值视为未定义的值
testVar = undefined;
//typeof(testVar) will be equal to undefined.
console.log(
/*global.*/undefined === window['undefined'] &&
/*global.*/undefined === (function(){})() &&
window['undefined'] === (function(){})()
) //true
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()];
Javascript有一个delete
操作符,可用于删除对象的成员。根据变量的范围(即是否为全局变量),可以将其删除以使其未定义
testVar = undefined;
//typeof(testVar) will be equal to undefined.
console.log(
/*global.*/undefined === window['undefined'] &&
/*global.*/undefined === (function(){})() &&
window['undefined'] === (function(){})()
) //true
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()];
没有未定义的
关键字可以用作未定义的文字。您可以省略函数调用中的参数以使它们不被定义,但只能通过向函数发送较少的参数来使用,不能在中间省略参数。
我对Javascript未定义&null有点困惑
null
的行为通常类似于其他脚本语言的带外“null”、“nil”或“None”对象的概念
另一方面,未定义的
是一种奇怪的JavaScript怪癖。它是一个表示带外值的单例对象,本质上是第二个类似但不同的null
。它出现了:
调用参数少于函数
语句列表中的参数列表的函数时,未通过的参数将设置为未定义
。您可以使用例如:
function dosomething(arg1, arg2) {
if (arg2===undefined)
arg2= DEFAULT_VALUE_FOR_ARG2;
...
}
使用此方法,您无法区分dosomething(1)
和dosomething(1,未定义)
<代码>arg2
在这两个字段中的值相同。如果需要区分,可以查看arguments.length
,但这样做的可选参数通常不太可读
当函数没有返回值时
,它返回未定义的
。通常不需要使用这样的返回结果
当您通过在块中使用var a
语句声明变量,但尚未为其赋值时,它是未定义的
。再说一次,你真的不需要依赖它
当其操作数是不存在的简单变量时,诡异的typeof
运算符返回'undefined'
,而不是像您尝试引用它时通常会发生的那样抛出错误。(你也可以给它一个用括号括起来的简单变量,但不能给它一个包含非存在变量的完整表达式。)这也没什么用处
这是一个有争议的问题。当您访问一个不存在的对象的属性时,您不会像在其他语言中一样立即得到错误。取而代之的是一个未定义的对象。(然后,当您稍后尝试在脚本中使用未定义的对象时,它会以一种奇怪的方式出错,这比JavaScript直接抛出错误要困难得多。)
这通常用于检查是否存在属性:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
但是,由于可以像任何其他值一样分配未定义的:
o.prop= undefined;
这实际上并不能检测属性是否可靠存在。最好在
操作符中使用,它不在最初的Netscape版本的JavaScript中,但现在到处都可以使用:
if ('prop' in o)
...
总之,undefined
是一个特定于JavaScript的混乱,这让每个人都感到困惑。除了可选函数参数(JS没有其他更优雅的机制)之外,应该避免使用未定义的。它不应该成为语言的一部分null
对于(2)和(3)来说可以很好地工作,而(4)是一个不合适的特性,它的存在只是因为在一开始JavaScript没有例外
如果(!testvar)
实际执行什么操作?它是测试未定义和null还是只是未定义
这种“真实性”测试检查false
,未定义的,null
,0
,NaN
和空字符串。但在这种情况下,是的,它实际上是undef
var b = null;
b == null; // This is true
b == undefined; // This is true;
b === undefined; // This is false;
// found on UglifyJS
variable = void 0;