JavaScript中的类型转换、判断类型相关知识

目录

隐式类型转换

关于 +

当字符串 +上任意值时,就会按照字符串的拼接去计算

当Boolean、null这些类型的值会被转换为数值0、1

当 + 为一元操作符的时候

当作为对象的键名

强制类型转换

parseInt()

parseFloat()

Number()

判断变量类型的方法

typeof

instanceof

Object.prototype.toString.call()

Array.isArray


基本数据类型:String、Number、Boolean、Null、Undefined、Symbol、BigInt

引用数据类型:Object【Object是个大类,function函数、array数组、date日期...等都归属于Object】

不同的类型之间运算需要先对数据的类型进行转换,这里就包括隐式类型转换和强制类型转换

隐式类型转换

通常在一些数学运算中,比如:+ - * / > < == 这些运算会发生隐式转换,除了 + 其他都会转换成数值型。

关于 +

当字符串 +上任意值时,就会按照字符串的拼接去计算

console.log('12' + 1) // 121
console.log('12' + true) // 12true
console.log('12' + null) // 12null
console.log('12' + undefined) // 12undefined

当Boolean、null这些类型的值会被转换为数值0、1

console.log(null + 1) // 1
console.log(true + 1) // 2
console.log(false + 1) // 1

当 + 为一元操作符的时候

console.log(+1) // 1
console.log(+true) // 1
console.log(+false) // 0
console.log(+null) // 0
console.log(+"1") // 1

当作为对象的键名

会被隐式转换成字符串

强制类型转换

parseInt()

parseInt函数将其第一个参数转换为一个字符串,对该字符串进行解析,然后返回一个整数或 NaN

console.log(parseInt('')) // NaN
console.log(parseInt('123ab')) // 123
console.log(parseInt('ab123')) // NaN
console.log(parseInt('123.93aa')) // 123

parseFloat()

如果 parseFloat 在解析过程中遇到了正号(+)、负号(-)、数字(0-9)、小数点(.)、或者科学记数法中的指数(e 或 E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数

console.log(parseFloat('')) // NaN
console.log(parseFloat('123.33ab')) // 123.33
console.log(parseFloat('ab123')) // NaN
console.log(parseFloat('123')) // 123
console.log(parseFloat('+1')) // 1
console.log(parseFloat('-1')) // -1
console.log(parseFloat('12+1')) // 12
console.log(parseFloat('12-1')) // 12
console.log(parseFloat('.1')) // 0.1

Number()

当 Number 作为普通函数调用时,它将参数强制转换为数值原始值。BigInt 被转换为数值。如果值不能转换,则返回 NaN。只要参数带有无效字符就会被转换为 NaN

console.log(Number('')) // 0
console.log(Number('123ab')) // NaN
console.log(Number('ab123')) // NaN
console.log(Number('123.93aa')) // NaN

Number 与上面两个方法最大的不同点是:

1、parseInt 和 parseFloat 可以将以数字开头的字符串转换为数值

2、Number 可以将空字符串转换为 0

判断变量类型的方法

typeof

typeof 判断结果有:"undefined" "boolean" "number" "bigint" "string" "symbol" "function" "object"

NaN会被判断为"number",null也会被判断为 "object",所以我们可以用 object.is() 来进一步判断

console.log(typeof NaN) // number
console.log(typeof null) // object

instanceof

instanceof 运算符用于检测构造函数(第二个元素)的 prototype 属性是否出现在某个实例对象(第一个元素)的原型链上。返回一个布尔值。

let str = new String('sss')
let num = new Number()
console.log(num instanceof Number) // true
console.log(num instanceof Object) // true
console.log(str instanceof String) // true

Object.prototype.toString.call()

最精确的判断变量类型的方式

console.log(Object.prototype.toString.call('sss')) // [object String]
console.log(Object.prototype.toString.call(11)) // [object Number]
console.log(Object.prototype.toString.call(true)) // [object Boolean]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
console.log(Object.prototype.toString.call(null)) // [object Null]
console.log(Object.prototype.toString.call(NaN)) // [object Number]
console.log(Object.prototype.toString.call(() => {})) // [object Function]
console.log(Object.prototype.toString.call([])) // [object Array]
console.log(Object.prototype.toString.call({})) // [object Object]

Array.isArray

用来判断该变量是否是一个数组,返回 Boolean

console.log(Array.isArray({'0': 'a', '1': 'b'}))
console.log(Array.isArray([]))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值