JavaScript 数据类型转换的两种形式

本文详细介绍了JavaScript中的各种类型转换,包括显式和隐式转换。显式转换涉及toString(),Number(),Boolean()等方法,而隐式转换涵盖isNaN()函数,自增/自减运算符,正/负号,加号运算以及逻辑和关系运算符。还特别讨论了在比较和转换字符串、数字、布尔值、null、undefined时的规则和注意事项。
摘要由CSDN通过智能技术生成

显式类型转换

  • toString()
  • String()

  • Number()
  • parseInt(string)
  • parseFloat(string)

  • Boolean()

隐式类型转换

isNaN ()

解释:判断指定的参数是否为 NaN(非数字类型),返回结果为 Boolean 类型。也就是说:任何不能被转换为数值的参数,都会让这个函数返回 true

  1. 调用Number(参数)函数;
  2. Number(参数)的返回结果和NaN进行比较。
console.log(isNaN('123')); // 返回结果:false。
console.log(isNaN('abc')); // 返回结果:true。因为 Number('abc') 的返回结果是 NaN
console.log(isNaN(null)); // 返回结果:false
console.log(isNaN(undefined)); // 返回结果:true
console.log(isNaN(NaN)); // 返回结果:true

自增/自减运算符:++、—-

  1. 调用Number(参数)函数;
  2. Number(参数)的返回结果进行 加 1 操作。

正号/负号:+a、-a

任何值做+a、-a、/a运算时,运算结果都会自动转换为 Number 类型。 内部调用的是 Number() 函数。

加号:+

  • 字符串 + 数字
    • 当加号的两边,只要有一个是字符串的时候,就会调用String()函数将数字转为字符串,然后再计算。导致最终的运算结果是字符串。
  • Boolean + 数字
    • Boolean 型和数字型相加时, true 按 1 来算 ,false 按 0 来算。这里其实是先调 Number() 函数,将 Boolean 类型转换为 Number类型,然后再和 数字相加。
  • null + 数字
    • 等价于:0 + 数字
  • undefined + 数字
    • 计算结果:NaN

运算符:-、*、/

任何非 Number 类型的值做-、*、/运算时,会调用Number()函数再运算,运算结果是 Number 类型。

逻辑运算符:&&、||、!

非布尔值进行与或运算时,会先调用Boolean()再运算,但运算结果是原值
&&:前者true则返回后者的值,前者false则返回前者的值,不执行后者
||:前者true则返回前者的值,不执行后者,前者false则返回后者的值
&&优先级高于||

关系运算符:<、>、<=、>=、==

  • 关系运算符,得到的运算结果都是布尔值:要么是true,要么是false。
  • 对于非数值进行比较时,会将其转换为数字然后再比较。
  • 如果符号两侧的值都是字符串时,不会将其转换为数字进行比较。比较两个字符串时,比较的是字符串的Unicode编码因此:当我们在比较两个字符串型的数字时,一定一定要先转型再比较大小,比如 parseInt()
  • 任何值和NaN做任何比较都是false,即NaN == NaN为false
  • undefined 衍生自 null,所以这两个值做相等判断时,会返回true。即undefined == null为true
  • 当非 Boolean 类型的数值和 Boolean类型的数值做==时,会先把前者进行隐式转换为 Boolean类型,然后再做比较;且不会改变前者的数据类型。
const a = 1;
console.log(a == true); // 打印结果:true
console.log(typeof a); // 打印结果:number。可见,上面一行代码里,a 做了隐式类型转换,但是 a 的数据类型并没有发生变化,仍然是 Number 类型
console.log(0 == true); // 打印结果:false

转换成字符串

利用“+”的隐式类型转换:字符串拼接

变量+"" 或者 变量+"abc"
c = c + "" 等价于 c = String(c)。

调用toString()

变量.toString()

  • 不影响原变量
  • null 和 undefined 这两个值没有 toString()方法
  • Number 类型的变量,在调用 toString()时,可以在方法中传递一个整数作为参数。此时它将会把数字转换为指定的进制,如果不指定则默认转换为 10 进制。

String()

String(变量)

  • 对于 Number 和 Boolean 而言,本质上就是调用toString()方法。
  • 但是对于 null 和 undefined,则不会调用 toString()方法。它会将 null 直接转换为 “null”。将 undefined 直接转换为 “undefined”。

prompt()

prompt()就是专门用来弹出能够让用户输入的对话框。重要的是:用户不管输入什么,都当字符串处理。
即返回时是用户输入的字符串

转换成数字

Number()

  • 字符串 --> 数字
    • 如果字符串中是纯数字,则直接将其转换为数字。
    • 如果字符串是一个空串或者是一个全是空格的字符串,则转换为 0。
    • 只要字符串中包含了其他非数字的内容(小数点按数字来算),则转换为 NaN。
  • 布尔 --> 数字
    • true 转成 1
    • false 转成 0
  • null --> 数字
    • 结果为:0
  • undefined --> 数字
    • 结果为:NaN

parseInt()

parseInt(argument)
parseInt(argument,num)
第二个参数辅助表示第一个参数的进制
parseInt()的作用是将字符串中的有效的整数内容转为数字,如果对非 String使用 parseInt()或 parseFloat(),它会先将其转换为 String 然后再操作。

  • 字符串 --> 数字
    • 只保留字符串最开头的数字,后面的中文自动消失。
    • 如果字符串不是以数字开头,则转换为 NaN。
    • 如果字符串是一个空串或者是一个全是空格的字符串,转换时会报错。
  • Boolean --> 数字
    • 结果为:NaN
  • Null --> 数字
    • 结果为:NaN
  • Undefined --> 数字
    • 结果为:NaN
  • 数字 --> 数字
    • 取整,不四舍五入
var a = 168.23;
console.log(parseInt(a)); 
//打印结果:168  (因为是先将 a 转为字符串"168.23",然后然后再操作)
var b = true;
console.log(parseInt(b)); 
//打印结果:NaN (因为是先将 b 转为字符串"true",然后然后再操作)
var c = null;
console.log(parseInt(c)); 
//打印结果:NaN  (因为是先将 c 转为字符串"null",然后然后再操作)
var d = undefined;
console.log(parseInt(d)); 
//打印结果:NaN  (因为是先将 d 转为字符串"undefined",然后然后再操作)
var a = '110';
var num = parseInt(a, 16); // 将a当成十六进制来看待,转换成十进制的num
console.log(num);//272

var a = '5';
var num = parseInt(a, 2); //将a当成二进制来看待,转换成十进制的num
console.log(num); // NaN。二进制中没有5这个数,转换失败。

parseFloat()

转换结果为浮点数,其余类似parseInt()

转换成布尔

Boolean()

  • 数字 --> 布尔
    • 除了 0 和 NaN,其余的都是 true。
  • 字符串 —> 布尔
    • 除了空串、全是空格的字符串、字符串’0’,其余的都是 true。
  • null 和 undefined 都会转换为 false。
  • 引用数据类型会转换为 true。空数组[]和空对象{},转换结果也是 true

!!

使用 !!可以显式转换为 Boolean 类型。比如 !!3的结果是true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值