今天,同學問我一個問題,如下: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。