类型转换问题概括
在JavaScript中有7种不同的数据类型:number、string、boolean、object、function、null、undefined
3中对象类型:Object、Date、Array
强制转换
1. 转为number类型
Number //不会省略小数,保持原样
parseInt //省略小数,可用于取整
parseFloat //转为浮点数
parseInt 和 parseFloat 都是只转数字,碰到非数字样式即停止,后面的不在继续转换,如:
parseInt("123.23string");
// 123
parseFloat("123.23string");
// 123.23
特别注意空字符串的转换及NaN
Number(""); // 0
Number(" "); // 0
Number("10 11"); // NaN 注意有空格
2. 转为string类型
String(3.14159); // "3.14159"
String(true); // "true"
String(false); // "false"
String(Date());
以上三种转换都可以用 .toString() 代替,如:
(3.14159).toString();
true.toString();
Date().toString();
隐性转换
js存在隐性转换,当你写错一些类型时它会自动转换,所以说这玩意你想写错还真的挺难!
1 + null; // 1
1 + "1"; // 11
"1" + null // 1null
"1" - 1 // 0
"1" * 2 // 2
"2" / 1 // 2
+ 是一元运算符,当其他类型用 + 与字符串连接时,会自动被转为字符串,但是 减(-) 乘(*) 除(/)会把字符当做数字做运算。
var a = "1";
var b = +a; // b = 1 b此时是number类型
var c = "qbs";
var d = +c; // NaN 但d是number类型
typeof
用于检测数据类型。
当检测function、object、null、date、array时都是返回Object,这时可以用constructor,使用这个会返回创建该对象的函数,可使用 ***.constructor.toString().indexOf("类型名 如:Array") > -1;
上面的代码意思就是返回对象的构造函数,转换为字符串再判断 类型名 在该字符串第一次出现的位置,只要出现就代表它是该类型。
本人也是新手,随手写写,难免存在遗落的知识点,望大家多多指点。