今天,同学问我一个问题,如下:var_dump("1" == "1e0"); 的结果是什么。
我的第一反应,答案是false。因为很明显的要比较的是两个字符串,而字符串比较时,只需比较其内容即可。很明显, 两个字符串的内容并不一样,当然是false了。
然而,我又注意到要比较的字符串中存在一个纯数字字符串“1”,那根据规则,当要比较的是两个纯数字字符串时要转换成数值型来比较。这里只有一个。所以仍应该安字符串来比较,结果仍为false。
但实际运行代码,结果确实true,我和我的小伙伴都震惊了!!怎么可能是true!!为什么会是true!!这跟说好的不一样啊!!
经过我们仔细的研究,发现这竟然不是两个普通字符串在比较,而是两个纯数值字符串!!因为“1e0”竟然是科学计数法的1!!
//e0表示10的0次方。所以1e0表示:1*10的0次方。
var_dump(1e0); //float(1)
var_dump(1e3); //float(1000)
所以当var_dump("1" == "1e0")时,结果才为true。