PHP+;JavaScript:将空字符串与0进行比较时,幕后会发生什么
由于松散的类型,PHP必须将两个比较过的变量转换为同一类型,如果它们还没有转换的话。这种比较的幕后发生了什么:PHP+;JavaScript:将空字符串与0进行比较时,幕后会发生什么,javascript,php,Javascript,Php,由于松散的类型,PHP必须将两个比较过的变量转换为同一类型,如果它们还没有转换的话。这种比较的幕后发生了什么: $v=”“==0 它返回true。如果第一个变量的类型内部转换为第二个变量的类型,我可以理解: $v=(int)””==0 但如果是这样的话,反向比较就会失败: $w=0==” 因为 (string)0=“0” 这显然不等于“ 但它也会返回true JavaScript也可以观察到同样的行为 所以现在我问自己:那里发生了什么?!对我来说,唯一的解释是这两个变量都是布尔型的。但是在这种情
$v=”“==0代码>
它返回true
。如果第一个变量的类型内部转换为第二个变量的类型,我可以理解:
$v=(int)””==0代码>
但如果是这样的话,反向比较就会失败:
$w=0==”代码>
因为
(string)0=“0”
这显然不等于“
但它也会返回true
JavaScript也可以观察到同样的行为
所以现在我问自己:那里发生了什么?!对我来说,唯一的解释是这两个变量都是布尔型的。但是在这种情况下,[“X”]==“X”
应该返回true,但显然不是。那么,在PHP中假设“
相等0
?在使用相等时,它将转换输入,以便以下各项都相等,这有什么神奇之处呢
0 == "" == false
所有这些都将通过empty()
检查
如果要检查确切的类型,请使用==
。为了回答您的评论,array()不是一个变量,而是一个数据结构,这就是为什么它没有通过=
检查,但通过了empty()
检查。在JavaScript中,=
的行为在中定义
- 当您执行
“”=+0
时,由于类型(“”
是字符串
,类型(+0)
是数字
,因此返回的值是比较ToNumber(“”=+0
的结果
将ToNumber
应用于String
类型的行为在中定义。在我们的例子中,ToNumber(“”)
返回+0
现在我们必须检查+0==+0
。由于两者具有相同的类型
,类型
为编号
,并且+0
和+0
具有相同的编号
值,因此返回值为真
- 当您执行
+0==”
操作时,由于类型(+0)
是数字
而类型(“”
是字符串
),因此返回值是比较+0==ToNumber(“”
的结果
将ToNumber
应用于String
类型的行为在中定义。在我们的例子中,ToNumber(“”)
返回+0
现在我们必须检查+0==+0
。由于两者具有相同的类型
,类型
为编号
,并且+0
和+0
具有相同的编号
值,因此返回值为真
php在比较中喜欢整数,因此如果其中一个值是int,则比较将作为int进行
“int ness”不是由类型决定的,而是由is_numeric()测试决定的。即使在您不期望的情况下,字符串也会自动转换为数字,因此“1.2”=“1.20”是真的(!?)。一些版本的php曾经说过,如果两个长数值字符串具有相同前缀的int溢出,则它们是相等的
当比较一个数字时,Javascript似乎也转换为数字,但两个字符串作为字符串进行比较。我知道如何使用===
,但我只是想知道,对于类似的事情,PHP遵循哪种算法。您的答案似乎是错误的,因为尽管两个参数都是empty()
,但[]==”
返回false。我想这就是PHP的设计方式。这就是我想知道的。谢谢++没有注意到这个问题,包括javascript。很好的解释。很遗憾,我们不能接受两个答案。这个和Aziz'one一样好,但它解释了JS,他的解释了PHP+然而,1。