Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以将变量设置为undefined还是将undefined作为参数传递?_Javascript_Undefined - Fatal编程技术网

Javascript 我可以将变量设置为undefined还是将undefined作为参数传递?

Javascript 我可以将变量设置为undefined还是将undefined作为参数传递?,javascript,undefined,Javascript,Undefined,我对JavaScript的未定义和null值有点困惑 如果(!testvar)实际执行什么操作?它是测试未定义的和空的还是只测试未定义的 定义变量后,我是否可以将其清除回未定义的(因此删除变量) 我可以将未定义的作为参数传递吗?例如: function test(var1, var2, var3) { } test("value1", undefined, "value2"); 要回答第一个问题,not运算符(!)将强制将给定的内容转换为布尔值。因此null,0,false,NaN和”(空

我对JavaScript的
未定义
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) { ... }
for
if(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;