数据类型转换
js是弱类型语言,定义不像后台一样严格使用string、int、boolean等,而是直接一个var定义所有的对象。
玩数据类型转换之前,我们先讲讲各种数据的作用和形式。
string 字符串
Number 数字
Boolean 布尔类型
NaN 数字类型,表示数字的空和错误
undefined 表示"缺少值",就是此处应该有一个值,但是还没有定义。
undefined典型用法:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
(5)转换string失败会返回一个undefined。
null 对象为空,没有这个对象。
复杂数据类型
Data Array function Object 暂时不需要理解。
现在开始数据转换。
转string:
Number();用法 Number(a);
toString();用法 a.toString();
String(); 用法 String(a);
万物皆对象,所有的对象几乎都有.toString();
null , undefined不能toString(),如果要强制转换只能String();
toString()能转换的,String()都可以转换。
隐式转换:+"" 隐式转换不好说,看代码更清晰。
转number
Number();一次性全部转换,如果其中某个字符串不是数字,那么返回NaN
parseInt();只能转换成对应的整数,从第一个字符串开始转,如果其中某个字符串不是数字,那么返回这个字符串前面的数字。
parseFloat();只能转换成对应有小数的数,从第一个字符串开始转,如果其中某个字符串不是数字,那么返回这个字符串前面的数字。
隐式转换:+ - * / % 如果两个字符串是纯数字的话,可以用这五个隐式转换掉。
转Boolean
Boolean();都可以转换。
转换为flase的有:NaN、null、""、undefined、0
转换为true的有:"123" 123,准确的说除了上面那几个转成false的之外,其他全是转成true
隐式转换:!!a
上面,我看着也乱,我还是喜欢看代码,接下来我写代码介绍吧。有些用法根本不是介绍就可以介绍清楚的。
<script> var str="123"; var num=123; var bool=false; var arr=new Array(1,"1"); var obj=new Object();obj.name="huo an"; var nu=null; var unde=undefined; var strkong=""; function asd(){} console.log("转string,顺便也请注意隐式转换"); console.log(num.toString()+"-"+typeof (num.toString()) +"-"+typeof (num+"")); console.log(bool.toString()+"-"+typeof (bool.toString()) +"-"+typeof (bool+"")); console.log(arr.toString()+"-"+typeof (arr.toString()) +"-"+typeof (arr+""));//装数组把里面的东西一起转成string了 console.log(obj.toString()+"-"+typeof (obj.toString()) +"-"+typeof (obj+"")); console.log(String(nu)+"-"+typeof (String(nu)) +"-"+typeof (nu+""));//null是一个特殊的,不能用tostring()否则会报错 var str="123a" console.log("转number,顺便也请注意隐式转换"); console.log("123"+"23" +"-"+ typeof ("123"+"23"));//这个是错误的,这还会是string; console.log("123"-"23" +"-"+ typeof ("123"-"23")); console.log("123"*"23" +"-"+ typeof ("123"*"23")); console.log("123"/"23" +"-"+ typeof ("123"/"23")); console.log("123"%"23" +"-"+ typeof ("123"%"23")); console.log("123"/"da" +"-"+ typeof ("123"%"23"));//字符串里若有英文,也能隐式转换,但成为number的NaN console.log(Number(str)+"-"+typeof (Number(str)));//返回NaN console.log(parseInt(str)+"-"+typeof (parseInt(str)));//返回123 console.log(parseFloat(str)+"-"+typeof (parseFloat(str)) );//返回123.00 console.log("转boolean,顺便也请注意隐式转换"); // 除了 NaN、null、""、undefined、0这几个,其他都是true; console.log(Boolean(NaN));//false console.log(Boolean(null));//false console.log(Boolean(""));//false console.log(Boolean(undefined));//false console.log(Boolean(0));//false console.log(Boolean("asd123"));//true; console.log(Boolean(arr)); var arr2=new Array(NaN,1); var arr3=new Array(1,NaN); var arr4=new Array(1); console.log(Boolean(arr2));//数组判断, console.log(Boolean(arr3));//数组判断, console.log(Boolean(arr4));//数组判断,都是true console.log(!!"asd123");//true </script>
我的本意是想写代码比较清晰点,但莫名的变得不清晰了,我的锅。先这样将就着。