: 在良葛格型态转换章节最后有提到一句
: "在弱型别语言中,型态转换往往自动发生,最好还是实际测试了解结果,
: 避免不必要的型态转换而发生误判或错误的运算结果。"
: 意思难道是说 "我根本不知道在型态转换到底是怎么转的,反正测测看就知道了" ?
http://dorey.github.io/JavaScript-Equality-Table/unified/
这里很清楚的列出 javascript == 跟 === 的对应
其实有点复杂,我相信大部分人不会想要用脑袋去记这个东西
所以真的有需要的话要嘛查表,要嘛写 code 实验
这是有规范,但是没什么规律的东西...
当然能够记起来最好,这可以少踩很多地雷
: 但是在型态转换中 java 语言可以清晰清楚地写出转换规则及逻辑
如果你先写习惯了 Java 这种强形态的语言,来碰弱形态的语言应该都会有这种感觉
根本的原因是 Java 不喜欢帮你自动作型别转换,但是 Javascript 喜欢自动帮你转换
所以 Java 不同类别之间的比较一定是不一样,Javacript 就要看他怎么转...
个人觉得比起搞清楚 javascript 怎么自动转换,减少 javascript 自动转换的机会
且尽量用 === 会是更安全的做法...
====
讲到自动转型我就想到 PHP....
刚从 Java 跳槽 PHP 的时候要取阵列长度下意识的写了这样的 Code
$ary = array(1, 2, 3); // [1,2,3], 长度是 3
$length = $ary.length; // 这行是错的,正确做法是 count($ary)
// “.”是 PHP 的字串串接,加上找不到
// “length”变量定义的时候会自动转成字串"length"
// 回传值是字串 "Arraylength"
if ($length>2) {
// 永远跑不进来,字串被 cast 成整数 0,所以一定小于 2
// 拿去做四则运算程式也不会有错误讯息
}
这 code 以 PHP 明明写错的离谱,但是没有任何 warning 跑出来害我找半天啊混蛋...