6.JavaScript学习笔记——数据类型转换

数据类型转换

1. typeof

typeof操作符可以确定任意变量的数据类型,可以返回的值有

  • number
  • string
  • boolean
  • object
  • undefined
  • function
  • symbol

泛泛的引用值和null,会返回object;

typeof的两种写法:

  1. typeof(data)
  2. typeof data

注意typeof返回的值是字符串

2. 数据类型转换

2.1 显式类型转换

2.1.1 Number(mix)

将括号里面的值转化为number类型。

var num1 = Number("123");  //num1 = 123
var num2 = Number(true);  //num2 = 1
var num3 = Number(false);  //num3 = 0
var num4 = Number(null);  //num4 = 0
var num5 = Number(undefined);  //num5 = NaN
var num6 = Number('a');  //num6 = NaN
var num7 = Number("-123");  //num7 = -123
var num8 = Number("123abc");  //num8 = NaN
2.1.2 parseInt(string, radix)
  • string:要被解析的值;
  • radix:基底,可选。从2到36,表示被解析的值的进制。即将以radix进制的数转换为十进制。

基本用法:省略radix,将括号里的值转化为整型的数,浮点数直接去掉小数点,不会进行四舍五入。即默认radix是10。

  • 如果字符串头部有空格,空格会被自动去除;
  • 字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分;这也是数字直接截断小数点后面的数的原因;
  • 如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN;
  • 如果字符串以0x或0X开头,parseInt会将其按照十六进制数解析;
  • 如果字符串以0开头,将其按照10进制解析。
var num1 = parseInt("123");  //num1 = 123
var num2 = parseInt(true);  //num2 = NaN
var num3 = parseInt(false);  //num3 = NaN
var num4 = parseInt(null);  //num4 = NaN
var num5 = parseInt(undefined);  //num5 = NaN
var num6 = parseInt('a');  //num6 = NaN
var num7 = parseInt("-123");  //num7 = -123
var num8 = parseInt("123abc");  //num8 = 123
var num9 = parseInt(123.3);  //num9 = 123
var num10 = parseInt(123.8);  //num10 = 123
var num11 = parseInt("123.3");  //num11 = 123
var num12 = parseInt("123.8");  //num12 = 123

如果第二个参数不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回NaN。如果第二个参数是0、undefined和null,则直接忽略。

2.1.3 parseFloat(string)

将解析值转换为浮点数。

2.1.4 String(mix)

将解析值转换为字符串。

2.1.5 Boolean()

将解析值转换为布尔值。

2.1.6 toString(radix)

类似于String(),都是将值转换为字符串。

写法:

var demo = 123;
var str = demo.toString();

但是,undefinednull不能用toString转换。这两种数据转换会直接报错。

括号中可以加上基底数,意思是将该数转换为指定进制的数。

var demo = 20;
var str = demo.toString(8);  //str = "24"

2.2 隐式类型转换

2.2.1 isNaN()

先将括号中的值用Number()转换为number型数据,再将转换后的数据跟NaN比较,若为NaN,则返回true,否则返回false。

2.2.2 ++/–(自加/自减) +/-(一元正负)
var a = "123";
a ++;    //a = 124

++在自加前,先将需要自加的数据调用Number转换为number数据,再进行自加。

--同理

+/-不是指加减,而是正负,其也会将后面的数据用Number()转换为数字类型。

2.2.3 +(加号)

当加号两侧存在字符串使,会调用String()将两边数据转换为字符串型。

注意

NaN + 1 //NaN
2.2.4 -(减号) *(乘号) /(除号) %(求余)

会调用Number()。

2.2.5 &&(逻辑与) ||(逻辑或) !(逻辑非)

会调用Boolean()。

2.2.6 <(小于) >(大于) <=(小于等于) >=(大于等于) ==(等于) !=(不等于)

两边都是字符串时,会比较两者ASCII码大小。

两边有数字有字符串时,会将字符串用Number()转换成数字。

var a = "3"  > 2;  //a = true
var b = "1" == 1;  //b = true
var c = true == 1;  //c = true
var d = true > false;  //d = true
var e = 1 > 2 > 3;  //相当于false > 3,所以e = false
var f = 2 > 3 < 1;  //相当于false < 1, 所以f = true

注意undefined < 0, undefined > 0, undefined == 0, null < 0, null > 0, null == 0均为false。

undefined == null为true。

NaN == NaN为false.

[] == []为false;

{} == {}为false

引用值比较的是地址,地址一样才相等

var obj = {};
var obj1 = obj;
//此时obj==obj1为ture,obj===obj1也为ture
2.2.7 ===(绝对等于)

undefined === null为false;

===两端必须完全一样才可能是true。

特例:

NaN === NaN为false;

[] === []为false;

{} === {}为false

2.2.8 !==(绝对不等于)

由于==!=会发生数据类型转换,这在某些时候会造成一定的麻烦,在会造成逻辑偏差的场合下,会用===!==来代替。

绝对等于/不等于两侧不会发生数据类型转换。此时

var a = 1 === "1";  //a = false
var b = 1 !== "1";  //b = true

但是对于NaN,NaN === NaN依旧为false。

2.2.9 特别地

若一个变量没有定义直接使用,会报错。

但是有一个特例,typeof(a),其中a没有定义也不会报错,此时typeof(a)的值为"undefined",注意这里是字符串。

因此typeof(typeof(undefined))返回值是"string"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值