Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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中的一串空格是真的还是假的?_Javascript - Fatal编程技术网

JavaScript中的一串空格是真的还是假的?

JavaScript中的一串空格是真的还是假的?,javascript,Javascript,此表达式'==true返回false,这意味着'为假 然而 if(“”){console.log('true')}else{console.log('false')}, 获取结果true 现在我很困惑,空白字符串是真的还是假的?字符串'是一个“真”值 以下是“falsy”值的列表: 你必须明白“真实”与true不是一回事。值可以是“truthy”,而不是true。例如,如果我们做了5==true,我们将得到false,即使5是一个“truthy”值 一般来说,几乎每个值都是“真实的”(不包括上面

此表达式
'==true
返回
false
,这意味着
'
为假

然而
if(“”){console.log('true')}else{console.log('false')}
, 获取结果true


现在我很困惑,空白字符串是真的还是假的?

字符串
'
是一个“真”值

以下是“falsy”值的列表:

你必须明白“真实”与
true
不是一回事。值可以是“truthy”,而不是
true
。例如,如果我们做了
5==true
,我们将得到
false
,即使
5
是一个“truthy”值

一般来说,几乎每个值都是“真实的”(不包括上面提到的值)。但是,检查某事物是否“真实”/“虚假”的最简单方法是这样做:

var value = valueToTest;

if (value) {
  console.log('Truthy!');
} else {
  console.log('Falsy!');
}

从您的代码
'==true
中,您正在将
字符串
布尔值
进行比较,因此很明显这两种情况完全不同,因此返回值为
false


在第二种情况下,即
如果(“”)
您正在检查是否有
对象
。这里,
'
是一个有效的非空对象,因此您得到的结果为true。

在第一个表达式中,您将“”空白字符串与布尔值true进行比较,这肯定会导致false,因为“”不等于true

在第二个表达式中,您只是在条件签入if语句中写入“”空格。根据if语句的执行规则,如果值存在,则它将计算为true。并且空格字符不是空的,所以它将为true语句执行代码块

希望这会有所帮助

如果将下列值直接放在if语句测试中,则其计算结果将为false

false
null
nil
undefined
NaN
''
0

上述值以外的值将计算为真

'
等于ASCII中的32。因此,
'==true
表示
32==true
if(''>/code>)表示
if(32)

一串空格是真的还是假的

正如其他人所指出的,这是真实的。然而,你的比较

' ' == true
正在检查
'
是否真实。它正在比较两个值,这是不同的事情,并使用特定的比较规则。JS规范是,任何
=
与布尔值的比较首先强制布尔值为一个数字:

如果类型(y)是布尔值,则返回比较结果
x==ToNumber(y)

所以你的代码相当于

' ' == Number(true)
这和

' ' == 1
接下来,要比较字符串和数字,JS将字符串转换为数字。再次引用规范:

如果Type(x)是String,Type(y)是Number,则返回比较结果
ToNumber(x)=y

所以我们现在有

Number(' ') == 1
编号(“”)
0
。规范说明:

StringNumericLiteral::StrWhiteSpace的MV为0

这就变成了

0 == 1
正如您所发现的,这是错误的。有关详细信息,请参阅


正如其他答案所解释的,不等于(
=
)与
真不等于假。假是一个不同的概念,它大致意味着当需要布尔值时表达式被强制的值(例如
if
语句的条件)是false。

truthy和falsy指在逻辑测试中单独使用时,值的计算结果是true还是false,如
if(“”){console.log('truthy');}else{console.log('falsy');}
使用松散比较来比较布尔值与将值转换为布尔值非常不同。
'
不是一个对象。它是一个字符串。您可以从代码中说,
'==true
您将字符串与布尔值进行比较,因此很明显,这两种情况完全不同,因此返回值为false,但
''==false还将字符串与布尔值进行比较,根据您的逻辑,布尔值应该“完全不同”,但返回true,因此至少您的答案不完整。不,实际上您的两个陈述都不正确。不完全正确。空字符串
'
也不是空的,但是它会导致
if
语句不被计算,因为它是falsy。是的,空字符串是falsy,这就是我在上面的代码段中包含它的原因。所有这些都将计算为false,if语句将不会计算。值得指出的是,
5==true
最终会比较数字。如果使用松散比较进行比较,则布尔值将转换为数字。这就是为什么
''==false
true
(5==true)是true@beginner,不知道你是什么意思?如果你在控制台中计算
5==true
,你会得到
false
。很抱歉我对PHP感兴趣,而在PHP中
5==true
true
试试
echo(5==true)
你会得到1,我想,在javascript中它是一样的,但奇怪的是它是不同的,(我刚刚读了Felix Kling的评论),测试某事是否真实的最简单方法是
!!val
0 == 1