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

2023-06-09 11:21:43 浏览数 (1)

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

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

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

隐式类型转换

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

关于

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

代码语言:javascript复制
console.log('12'   1) // 121
console.log('12'   true) // 12true
console.log('12'   null) // 12null
console.log('12'   undefined) // 12undefined

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

代码语言:javascript复制
console.log(null   1) // 1
console.log(true   1) // 2
console.log(false   1) // 1

当 为一元操作符的时候

代码语言:javascript复制
console.log( 1) // 1
console.log( true) // 1
console.log( false) // 0
console.log( null) // 0
console.log( "1") // 1

当作为对象的键名

会被隐式转换成字符串

强制类型转换

parseInt()

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

代码语言:javascript复制
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)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数。

代码语言:javascript复制
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 。

代码语言:javascript复制
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() 来进一步判断

代码语言:javascript复制
console.log(typeof NaN) // number
console.log(typeof null) // object

instanceof

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

代码语言:javascript复制
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()

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

代码语言:javascript复制
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

代码语言:javascript复制
console.log(Array.isArray({'0': 'a', '1': 'b'}))
console.log(Array.isArray([]))

0 人点赞