数据类型转换

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>

  我的本意是想写代码比较清晰点,但莫名的变得不清晰了,我的锅。先这样将就着。

原文地址:https://www.cnblogs.com/huoan/p/5719915.html