Javascript未定义、空字符串和if语句
Javascript undefined, empty strings, and if statements
我不是在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");
}
上面的代码在我的控制台中产生以下结果:
[信息]无定义
[信息]
[信息]空字符串
[信息]
[信息]noDefinition+emptyString
[信息]未定义
[信息]********[信息]没有定义
因此,正如您所看到的,当我将变量noDefinition和emptyString输出到控制台时,它会产生空白输出。当我连接它们时,控制台将产生未定义的。然而,if随后继续使用if语句,并将它们中的每一个与未定义的进行比较。唯一执行的if是第一个。
即使将该值放到控制台中时,该值仅显示为空白,也会发生这种情况。此外,在控制台中显示为未定义的串联也无法与未定义进行比较,因此永远不会执行。我对此感到困惑,我希望有人能给我一个关于发生了什么的解释。
当您将未定义与字符串连接时,它将成为字符串
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作为函数而不是构造函数被调用时,它执行一个类型转变
这让我相信为什么任何东西与字符串的串联都会输出字符串
console.log
在接收到undefined
值(特定于实现)时不打印任何内容- 将
undefined
与空字符串连接时,得到的值为"undefined"
。那是印刷的
前面的要点解释了您的观察结果。
重写您的示例可能会更清楚地了解连接字符串和未定义值时实际发生的情况:
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
************************
改为使用这个:
if (typeof noDefinition == "undefined") ...
if(noDefinition == null)
包含typeOf"undefined"和typeOf"null",但您可能需要添加一个and语句以确保它不是空字符串。。。像这样:
if(noDefinitionAndEmptyString == null || noDefinitionAndEmptyString == "")
noDefinitionAndEmptyString
实际上是一个string
(您可以使用console.info(typeof noDefinitionAndEmptyString)
),其值为"undefined"。发生这种情况的原因是串联-发生了对string
的隐式强制转换,而强制转换为字符串的未定义变量是字符串'undefined'
- 可以't让我的if语句处理js中的html表单输入
- 如何在 API 调用后和 if 语句中启用提交按钮
- 带有多个elseif的Javascript if语句
- Sharepoint JScript if语句未执行
- for循环中的javascript if语句找不到==
- jquery if语句返回return wong语句
- 在if语句下的html中使用javascript变量
- 将错误与if语句混淆
- 循环通过数组的If语句不起作用
- jQuery模板中的If语句
- 如何从数据库中回显If语句
- 如何减少if语句的数量
- 在Javascript中将一个值和字符串数组转换为if语句
- Dropbox oauth认证的IF语句的第二部分是't已触发
- MVC Jquery-按钮点击-获取if语句错误
- 如何重写Javascript If语句以选择Classes而不是ID's的HTML格式
- KnockoutJS:为虚拟元素使用嵌套的条件if语句
- If语句发布或操作员发布
- 清除函数中if语句内部不起作用的间隔
- 使用if语句重新循环