型別比較
有兩種型別的比較 : 與 ==
的鬆散比較和與 ===
的嚴格比較。嚴格的比較可確保運算子兩側的型別和價值相同。
// Loose comparisons
var_dump(1 == 1); // true
var_dump(1 == "1"); // true
var_dump(1 == true); // true
var_dump(0 == false); // true
// Strict comparisons
var_dump(1 === 1); // true
var_dump(1 === "1"); // false
var_dump(1 === true); // false
var_dump(0 === false); // false
// Notable exception: NAN — it never is equal to anything
var_dump(NAN == NAN); // false
var_dump(NAN === NAN); // false
你還可以使用強比較來檢查型別和值是否與 !==
不匹配。
==
運算子不夠的典型示例是可以返回不同型別的函式,如 strpos
,如果找不到 searchword
則返回 false
,否則返回匹配位置(int
):
if(strpos('text', 'searchword') == false)
// strpos returns false, so == comparison works as expected here, BUT:
if(strpos('text bla', 'text') == false)
// strpos returns 0 (found match at position 0) and 0==false is true.
// This is probably not what you expect!
if(strpos('text','text') === false)
// strpos returns 0, and 0===false is false, so this works as expected.