基本数据类型: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([]))