由于 JS 中的数据类型是松散类型, 并且其在进行操作符运算时并不会像 C++ 和 Java 一样先检测数据类型, 而是隐式的进行数据类型转换, 返回值有时并不如我们想象中那般,所以我们需要了解 JS 中的显示和隐式类型转换,以便在工程中有更好的运用
- Number('123'); //123
- Number('-123'); //-123
- Number('a'); //NaN
- Number(true); //1
- Number(null); //0
- Number(undefined); //NaN
- Number(NaN); //NaN
- parseInt('10', 16); //16
- parseInt('b', 16); //11
- parseInt('b'); //NaN
- parseInt('3', 2); //NaN,因为3不是二进制的
- parseInt(true); //NaN
- parseInt('123abc'); //123
- parseInt('abc123'); //NaN
把东西转换成字符串类型, undefined 和 null 都能转换成字符串形式
- String(null); //"null"
- String(undefined); //"undefined"
把东西转换成字符串类型,undefined 和 null 不能使用, radix 是以十进制为基地转换成目标进制
- var num = 100;
- num.toString(); // "100"
- //注意,不能直接123.toString(),会报错
判断是不是 NaN,会先调用 Number(),转换后再和 NaN 进行比对
- isNaN(123); //false
- isNaN("123"); //false,字符串
- //Number('123') ==> isNaN(123) ==> false
- isNaN("null"); //true,字符串
- //Number("null") ==> isNaN(NaN) ==> true
- isNaN(null); //false,null对象
- //Number(null) ==> isNaN(0) ==> false
- isNaN(undefined); //true
- //Number(undefined) ==> isNaN(NaN) ==> true
- isNaN("123bcd"); //true
- //Number("123bcd") ==> isNaN(NaN) ==> true
- var a = '123'; a ++; //a 124
- var b = 'abc'; a ++; //b NaN; typeof(b) ==> number
- var c = + 'abc'; //c NaN; typeof(c) ==> number
- var a = 1 + "123"; //"1123"
- var b = "abc" + 12; //"abc12"
- var a = 1/"2"; //a 0.5;typeof(a) number
- //undefined ,null,"abc"都转换成NaN
- undefined > 0 //false
- undefined < 0 //false
- undefined == 0 //false
- null > 0 //false
- null < 0 //false
- null == 0 //false
- "abc" > 0 //false
- "abc" < 0 //false
- "abc" == 0 //false
- undefined == undefined //true
- null == null //true
- NaN == NaN //false
- NaN === NaN //false,一种特殊情况
先不要看答案,做做题目看看心中有没有数
- var str = false + 1;
- var demo = false == 1;
- if (typeof(a) && -true + ( + undefined) + '') {
- console.log("我能输出吗?");
- }
- if (11 + '11' * 2 == 33) {
- console.log("我能输出吗?");
- }
- !! ' ' + !!'' - !!false || document.console.log("我能输出吗?");;
以下是答案解析
- var str = false + 1; //1
- var demo = false == 1; //false
- if (typeof(a) && -true + ( + undefined) + '') {
- console.log("我能输出吗?");
- }
- //输出 我能输出吗?
- //typeof(a) ==> typeof(undefined) ==> "undefined"
- //"undefined"&&-true ==> -true ==> -1
- //+undefined ==> NaN
- //+"",结果是 "NaN"
- //转换成Boolean值为true
- if(11 + '11' * 2 == 33) {
- console.log("我能输出吗?");
- }
- //11 + '11' * 2 == 33 ==> 11 + 22 == 33 ==> 11 + false ==> 11
- //输出 我能输出吗?
- !!' ' + !!'' - !!false || document.console.log("我能输出吗?");
- //没有输出 我能输出吗?
- //!!把后面的变成Boolean值,!!' ' + !!'' ==> true + false
- //true + false + false ==> 1
- //||符号前面为true就不往后走了
来源: http://www.jianshu.com/p/1d5369d0f3e0