JavaScript中隐式类型转换其实可以算是基于显式类型转换之上来实现的,所以要先对JavaScript中显式类型转换有一定的了解。
点击查看
1.isNaN(mix) – > 判断mix是否是NaN
判断步骤:现将mix用Number(mix)转换成数字型,再将转换后的结果拿去与NaN比较,如果是NaN,返回true,表示mix是NaN,不是则返回false,表示不是NaN。
mix | Number | isNaN |
123 | 123 | false |
abc | NaN | true |
123abc | NaN | true |
NaN | NaN | true |
null | 0 | false |
undefined | NaN | true |
注:因为是用Number(mix)实现转换的,所以转换后的值都应该是number型的。
2.++/-- 、+/-(正/负)
判断步骤:现将mix用Number(mix)转换成数字型,若能转换成数值型,再进行++/-- 、+/-(正/负)操作,若无法转换成数值型,则返回NaN。
值mix | Number | ++ | - - | + (正) | - (负) |
"123" | 123 | 124 | 122 | 123 | -123 |
"abc" | NaN | NaN | NaN | NaN | NaN |
3.+ 加号
判断步骤:
当 + 两边的值有一个是字符串时,调用String(mix),实现两个字符串连接,返回string类型。
当 + 两边的值没有字符串时,调用Number(mix),实现两个数相加,返回number类型。
var a = "1" + 2;
console.log(a); -- > 12
console.log(typeof(a)); -- > string
var a = 1 + 2;
console.log(a); -- > 3
console.log(typeof(a)); -- > number
特别的:Number(undefined) – > NaN ,而任何数加NaN都等于NaN,
var a = 123 + undefined;
console.log(a); -- > NaN
console.log(typeof(a)); -- > number
4.-(减)、(乘)、/(除)
判断步骤:现将mix用Number(mix)转换成数字型,若能转换成数值型,再进行 - (减)、 (乘)、/ (除) 操作,若无法转换成数值型,则返回NaN。
var a = 123 - true;
console.log(a); -- > 122
console.log(typeof(a)); -- > number
var a = "b" - true;
console.log(a); -- > NaN
console.log(typeof(a)); -- > number
5 . &&,||, !
只有:false, 0, -0, “”, NaN, null, undefined能转换成false,
其它大多数的值都会转换成true,不能说全部,因为存在数字和字符串以及对象的值为false,
也就是说,其实直接用真值转换来判断一个函数的参数是否传进来了,这是不不太安全的。
6.< , > ,<= , >=
var a = 1 > "2";
console.log(a); -- > false
console.log(typeof(a)); -- > boolean
记住一点:
字符串与字符串比较,用ASC码进行比较,
而 字符串与数字比较,是先转换成数值型再比较数字大小。
但都是返回Boolean型。
7.== , !==
var a = 1 == "1";
console.log(a); -- > true
console.log(typeof(a)); -- >boolean
var a = 1 != true;
console.log(a); -- > false
console.log(typeof(a)); -- > boolean
拓展:
(1) 相对于上面的(7. == 、 !=),对于 === 、!==,它们不发生类型转换。之间的不同之处看下面,一看就醒豁了。
1 == "1" -- > true
1 === "1" -- > false //必须两边都一样才返回true
(2) false > true – > 相当于 0 > 1 – > 返回false
(3) 2 > 3 < 1 – > 相当于 false < 1 – > 0 < 1 – > 返回true
(4) undefined > 0 、undefined < 0 、undefined = 0 – > 都返回false
And: null > 0 、 null < 0 、 null = 0 – > 都返回false
但是:undefined == null – > true
(5)对于NaN – > NaN不等于任何数,包括它本身, 这哥们儿自己都不认了,还会认其它的吗?
NaN == NaN -- > false
NaN === NaN -- > false