类型比较
有两种类型的比较 : 与 ==
的松散比较和与 ===
的严格比较。严格的比较可确保运算符两侧的类型和价值相同。
// 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.