No.008 JavaScript的类型转换

(以下所有内容仅用以记录学习过程中的个人理解,如有错误欢迎指出)

1. 其他转string

1.1 (强制)调用toString()方法

调用被转换数据的toString()方法。

var a = 123;
a = a.toString(); // 将数字转换为字符串并返回
var a = true;
a = a.toString(); // 将布尔值转换为字符串并返回

注意:nullundefined没有toString()方法,调用时将会报错。

1.2 (强制)调用String()函数

var a = 123, b = true;
a = String(a); b = String(b);

var c = null, d = undefined;
c = String(c); d = String(d);

对于number、boolean、string,该函数即是调用它们的toString()方法进行转换;

对于null、undefined,该函数即是直接转换成“null”和“undefined”字符串。

1.3 (隐式)数据类型+“(空串)”

var a = true;
a = a + ""; // 转换,a = "true"

原理与String()函数相同。

2. 其他转number

2.1 (强制)调用Number()函数

字符串a > 数字:

  1. a为合法数字,转换成对应数字;
  2. a为非法数字,转换成NaN;
  3. a为空串/空格串,转换成0。
var a = "123"; // 转换,a = 123
var a = "123abc"; // 转换,a = NaN
var a = ""; var a = "   "; // 转换,a = 0

布尔值a > 数字:

  1. a为true,转换成1;
  2. a为false,转换成0。
var a = true; // 转换,a = 1
var a = false; // 转换,a = 0

空值/未定义a > 数字:

  1. a为null,转换成0;
  2. a为undefined,转换成NaN。

2.2 (强制)调用parseInt() | parseFloat()函数

这两个函数专门用来将字符串转换为数字。

parseInt(),提出字符串中的有效整数位,并转换为number。

var a = "123cm"; // 转换,a = 123
var a = "123.456cm"; // 转换,a = 123
var a = "a123cm"; // 转换,a = NaN

parseFloat(),提出字符串中的有效小数位,并转换为number。

var a = "123cm"; // 转换,a = 123
var a = "123.456.789cm"; // 转换,a = 123.456
var a = "a123cm"; // 转换,a = NaN

非字符串使用这两个函数,即会将其转换成字符串再进行函数转换。

2.3 (隐式)使用一元运算符+

var a = "123";
a = +a; // 转换,a = 123

原理与Number()函数相同。

3. 其他转boolean

3.1 (强制)调用Boolean()函数

转换情况:

  1. 字符串 > 布尔值:
    空串是false,其余全是true。
  2. 数值 > 布尔值:
    0NaN是false,其余全是true。
  3. null、undefined > 布尔值:
    都是false。
  4. 对象 > 布尔值:
    都是true。

3.2 (隐式)双重非运算

为任意数据类型做两次非运算,即可将其转换为布尔值。

var a = "123";
a = !!a; // 转换, a = true

原理与Boolean()函数相同。

4. 自动转换

当遇见运算操作符时,JS往往会进行自动转换。

4.1 加法运算符+

数值+数值的情况:

NaN + (any) = NaN
 Infinity +  Infinity = Infinity
-Infinity + -Infinity = -Infinity
 Infinity + -Infinity = NaN
+0 + +0 = +0
-0 + -0 = -0
+0 + -0 = +0

数值+(非字符串) 的情况:

非字符串转为数值,然后进行加法运算。

字符串+(any) 的情况:

(any)转为字符串,然后执行字符串连接运算。

4.2 减-乘*除/模%

如果操作值有一个不是数值,则隐式调用Number()函数进行转换再运算。

4.3 逻辑运算符&&, ||, !

逻辑非 ! 通过Boolean()函数将操作值转换为布尔值,然后求反。

逻辑与&& / 逻辑或||:

  1. 如果第一个值转换后为true/false,则返回第二个值,否则返回第一个值 (不是Boolean()转换后的值)
  2. 如果有一个值为null,返回null;
  3. 如果有一个值为NaN,返回NaN;
  4. 如果有一个值为undefined,返回undefined。

4.4 关系运算符<, >, <=, >=

  1. 如果两个值都是数值,则比较数值;
  2. 如果两个值都是字符串,则比较对应的字符编码值;
  3. 如果一个值是布尔值,则将其转换为数值,再进行比较;
  4. 如果只有一个是数值,则将另一个转换为数值,再进行比较;
  5. NaN不和任何值相等(包括它自己),与任何类型的值比较大小时都返回false。

4.5 相等运算符==, !=

全等=== 和 不全等!==,比较时不会进行类型转换。

  1. 如果一个值是布尔值,则将其转换为数值,再进行比较;
  2. 如果为字符串和数值,则通过Number()函数将字符串转换为数值;
  3. undefined衍生自null,null == undefined
  4. 如果一个值为NaN,则==比较返回false,!=比较返回true。

如果要判断一个值是否是NaN,可以用isNaN()函数来判断

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值