PHP 的迷惑行为 0 == 'string' 为什么返回 true?

2020-10-29 10:39:32 +08:00
 krabs

代码片段中有一段代码是这样的

$p = 'auto';
if(intval($p) == $p){  // 0 == 'auto'
	...   结果这个条件居然是成立的?
}

然后我通过

var_dump(
	intval($width) == $width,
	0=='auto1',
	0=='string',
	intval($width),
	$width
);

结果返回

bool(true)
bool(true)
bool(true)
int(0)
string(4) "auto"
bool(false)

然后我又去 Js 控制台试了一下 0 == 'string' 返回的是 false

为什么 int 0 会等于 string ?

7271 次点击
所在节点    PHP
45 条回复
fuxkcsdn
2020-10-30 09:24:49 +08:00
我项目里,除非一些极其特殊的情况(必须加注释),谁敢用 == 进行判断,会被我拉来骂的
no1xsyzy
2020-10-30 10:58:41 +08:00
@xbchaonba '0' == '1e-10000000000000000'
1 开头,带数字,比较结果为 true
https://tio.run/##K8go@P/fxr4go0ChLLEoPqU0t0BD3UBdwdZWQd0wVdfQAA2oa1or2Nv9/w8A
qq1340691923
2020-10-30 11:22:59 +08:00
世界上最好的语言
xbchaonba
2020-10-30 14:33:26 +08:00
@no1xsyzy 牛批科学计数法都用上了,涨知识了
hbolive
2020-11-28 14:51:49 +08:00
楼主好消息来了,PHP8 运行结果应该是 false 。。
在 PHP8 中,数字和字符比较,会首先把数字转换成字符,再比较。我也觉得这样会比较科学。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719690

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX