我不是那些在javascript中做过很多的人。我的背景是Java / C ++。我目前正在开发一个使用大量javascript的项目,但是我遇到了一些对我没有意义的东西,但希望那里的一些javascript专家可以给我一个很好的逻辑解释。
var noDefinition = undefined;
var emptyString = "";
var noDefinitionAndEmptyString = noDefinition + emptyString;
console.log("NoDefinition");
console.log(noDefinition);
console.log("EmptyString");
console.log(emptyString);
console.log("noDefinition+emptyString");
console.log(noDefinitionAndEmptyString);
console.log("************************");
if(noDefinition == undefined)
{
console.log("No Definition is undefined");
}
if(emptyString == undefined)
{
console.log("emptyString is undefined");
}
if(noDefinitionAndEmptyString == undefined)
{
console.log("noDefiniton and emptyString is undefined");
}
上面的代码在我的控制台中产生以下结果:
[INFO] NoDefinition
[INFO]
[INFO] EmptyString
[INFO]
[INFO] noDefinition + emptyString
[INFO] undefined
[INFO] * ** * ** * ** * **
[INFO]没有定义未定义
因此,当您将变量noDefinition和emptyString输出到控制台时,您会看到它产生空白输出。当我连接它们时,控制台将产生undefined。但是,如果我继续使用if语句并将它们中的每一个与undefined进行比较。唯一如果执行的是第一个。
即使放入控制台,该值只显示为空白,也会发生这种情况。此外,在控制台中显示为未定义的串联无法与undefined进行比较,从不执行。我很困惑,我希望有人可以给我一个关于发生了什么的解释。
答案 0 :(得分:2)
console.log
在收到undefined
值(特定于实施)时不会打印任何内容。undefined
与空字符串连接在一起时,结果值为"undefined"
。那是印刷的。前面的要点解释了你的观察结果。
答案 1 :(得分:2)
当你将undefined与字符串连接起来时,它就变成了一个字符串
var foo = undefined;
var bar = "";
console.log(foo+bar, typeof(foo+bar));
* output *
undefined string
ECMAScript文档 - http://www.ecmascript.org/docs.php 不确定但是阅读第141页上的文档可以找到这个
15.5.1作为函数调用的字符串构造函数
当String作为函数而不是构造函数调用时,它会执行一个类型 转换。
让我相信为什么用字符串串联输出字符串
答案 2 :(得分:1)
重写你的例子可能会更好地说明在连接字符串和未定义的值时实际发生的事情:
var noDefinition = undefined;
var emptyString = "";
var noDefinitionAndEmptyString = noDefinition + emptyString;
console.log("************************");
console.log("NoDefinition:" + " " + noDefinition + " " + typeof(noDefinition));
console.log("EmptyString:"+ " " + emptyString + " " + typeof(emptyString));
console.log("noDefinition+emptyString: " + noDefinitionAndEmptyString + " " + typeof(noDefinitionAndEmptyString));
console.log("************************");
结果:
************************
NoDefinition: undefined undefined
EmptyString: string
noDefinition+emptyString: undefined string
************************
答案 3 :(得分:0)
请改用:
if (typeof noDefinition == "undefined") ...
答案 4 :(得分:0)
noDefinitionAndEmptyString
实际上是string
(您可以使用console.info(typeof noDefinitionAndEmptyString)
),其值为“未定义”。发生这种情况是因为连接 - 对string
的隐式转换发生,而未定义的变量,转换为字符串,是字符串'undefined'
答案 5 :(得分:0)
if(noDefinition == null)
涵盖了typeOf'undefined'和typeOf'null',但你可能想要添加一个和语句来确保它不是一个空字符串......就像这样:
if(noDefinitionAndEmptyString == null || noDefinitionAndEmptyString == "")