Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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
PHP+;JavaScript:将空字符串与0进行比较时,幕后会发生什么_Javascript_Php - Fatal编程技术网

PHP+;JavaScript:将空字符串与0进行比较时,幕后会发生什么

PHP+;JavaScript:将空字符串与0进行比较时,幕后会发生什么,javascript,php,Javascript,Php,由于松散的类型,PHP必须将两个比较过的变量转换为同一类型,如果它们还没有转换的话。这种比较的幕后发生了什么: $v=”“==0 它返回true。如果第一个变量的类型内部转换为第二个变量的类型,我可以理解: $v=(int)””==0 但如果是这样的话,反向比较就会失败: $w=0==” 因为 (string)0=“0” 这显然不等于“ 但它也会返回true JavaScript也可以观察到同样的行为 所以现在我问自己:那里发生了什么?!对我来说,唯一的解释是这两个变量都是布尔型的。但是在这种情

由于松散的类型,PHP必须将两个比较过的变量转换为同一类型,如果它们还没有转换的话。这种比较的幕后发生了什么:

$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。