//(typeof(myVar) != "undefined")// 在逻辑上等同于真值 //if (myVar) 吗?
Is //(typeof(myVar) != "undefined")// logically equivalent to the truthy //if (myVar)?
在一个大型项目中,我通过显式检查是否已使用 typeof 设置变量来进行大量异常处理。有点冗长,我想改变我的习惯,简单地说:
if (myVar) {//do stuff}
在下面的代码片段和其他一些测试中,它们似乎是等效的。然而,在我进行彻底的代码更改(并替换其中的数百个)之前,我想确认它们在逻辑上是等价的,并了解可能让我失望的任何边缘情况。
//What I have been doing
let myVar;
{
//other code that may or may not be able to give myVar a value
}
if (typeof(myVar) != "undefined"){
console.log("the value has been set, do more stuff");
} else {
console.log("the value was not set, handle the exception path");
}
//What I'd like to do
if (myVar) {
console.log("the value has been set, do more stuff");
} else {
console.log("the value was not set, handle the exception path");
}
没有。
因为在这种情况下 if(myVar)
if myVar = 0, false, "",undefined
将是 return false。当 myVar = undefined
时 if (typeof(myVar) != "undefined")
只是 return 假
它们可以看起来像那样,但结果可能不像您期望的那样。
这里有一些进一步的证明:
const tests = [false, undefined, null, '', NaN, 0, -0, 0n, 'anything else'];
tests.map(t=> console.log(t ? t + ' is truthy' : t + ' is falsy'));
这个:
if (myVar) {}
将 return 对 所有虚假值 为假,例如空字符串 (""
)、零 (0
)、false
、null
,当然还有 undefined
。
如果您不希望上述任何值通过您的 if
语句,那么是的,它们在逻辑上是等价的。
但是,我会说这是一个 大胆的 声明,您的 if
声明中的 none 将包含 0
或 ""
。这些是共同的价值观。
如果你想清理这段代码并继续只检查 undefined
,那么你可以跳过类型检查,只检查:
if (myVar === undefined) {}
使用感叹号可以检查该变量是否为相反的布尔值,例如 undefined、false、空字符串、null 和 0 是假值
let myVar = undefined;
if(!myVar){
console.log('type of: ' + typeof(myVar))
}
myVar = '';
if(!myVar){
console.log('type of: ' + typeof(myVar))
}
myVar = false;
if(!myVar){
console.log('type of: ' + typeof(myVar))
}
在一个大型项目中,我通过显式检查是否已使用 typeof 设置变量来进行大量异常处理。有点冗长,我想改变我的习惯,简单地说:
if (myVar) {//do stuff}
在下面的代码片段和其他一些测试中,它们似乎是等效的。然而,在我进行彻底的代码更改(并替换其中的数百个)之前,我想确认它们在逻辑上是等价的,并了解可能让我失望的任何边缘情况。
//What I have been doing
let myVar;
{
//other code that may or may not be able to give myVar a value
}
if (typeof(myVar) != "undefined"){
console.log("the value has been set, do more stuff");
} else {
console.log("the value was not set, handle the exception path");
}
//What I'd like to do
if (myVar) {
console.log("the value has been set, do more stuff");
} else {
console.log("the value was not set, handle the exception path");
}
没有。
因为在这种情况下 if(myVar)
if myVar = 0, false, "",undefined
将是 return false。当 myVar = undefined
if (typeof(myVar) != "undefined")
只是 return 假
它们可以看起来像那样,但结果可能不像您期望的那样。
这里有一些进一步的证明:
const tests = [false, undefined, null, '', NaN, 0, -0, 0n, 'anything else'];
tests.map(t=> console.log(t ? t + ' is truthy' : t + ' is falsy'));
这个:
if (myVar) {}
将 return 对 所有虚假值 为假,例如空字符串 (""
)、零 (0
)、false
、null
,当然还有 undefined
。
如果您不希望上述任何值通过您的 if
语句,那么是的,它们在逻辑上是等价的。
但是,我会说这是一个 大胆的 声明,您的 if
声明中的 none 将包含 0
或 ""
。这些是共同的价值观。
如果你想清理这段代码并继续只检查 undefined
,那么你可以跳过类型检查,只检查:
if (myVar === undefined) {}
使用感叹号可以检查该变量是否为相反的布尔值,例如 undefined、false、空字符串、null 和 0 是假值
let myVar = undefined;
if(!myVar){
console.log('type of: ' + typeof(myVar))
}
myVar = '';
if(!myVar){
console.log('type of: ' + typeof(myVar))
}
myVar = false;
if(!myVar){
console.log('type of: ' + typeof(myVar))
}