javascript数据类型判断及数据隐式和显示转换

数据类型判断

数据类型有 number  string  boolean  null  undefined  function object 这些,那如何去判断数据对应的是哪种类型呢

typeof可以判断对应数据类型  写法: typeof data 或者 typeof(data) , 一般习惯写后面这种

返回值有 number string boolean object undefined function 这些

代码如下:

console.log(typeof(123)) //number
console.log(typeof('true')) //string
console.log(typeof(true))  //boolean
console.log(typeof(null))  //object
console.log(typeof(undefined)) //undefined
console.log(typeof({})) //object
console.log(typeof([])) //object
console.log(typeof(NaN)) //number
console.log(typeof(function(){})) //function
console.log(typeof(a)) //undefined a未定义也不会报错

其中对于数组和对象无法区分,可以用 instanceof 去判断

console.log([] instanceof Array)  // true
console.log({} instanceof Array)  // false

如果只用其中一种方法就可以判断,则需要通过 toString() 方法,对 对象原型调用 toString()方法,通过改变this指向来获得对应的类型,如下

console.log(Object.prototype.toString.call('123')) //[object String]
console.log(Object.prototype.toString.call({})) //[object Object]
console.log(Object.prototype.toString.call([])) //[object Array]
console.log(Object.prototype.toString.call(123)) //[object Number]
console.log(Object.prototype.toString.call(true)) //[object Boolean]
console.log(Object.prototype.toString.call(null)) //[object Null]

但是对undefined类型会报错,所以undefined类型只有在typeof方法中才不会报错

数据显示转换
显示转换number, number转换有Number()  parseInt()  parseFloat() 方法

console.log(Number('123')); //123
console.log(Number(true)); //1
console.log(Number(false)); //0
console.log(Number(NaN)); //NaN
console.log(Number('abc')); //NaN
console.log(Number(undefined)); //NaN

console.log(parseInt('123abc')) //123  只为变成整形,只看数字位,直到非数字位就截断
console.log(parseInt('abc')) //NaN
console.log(parseInt(true)) //NaN
console.log(parseInt(10, 16)) //16  表示10为基底,这是16进制,转为10进制

console.log(parseFloat('100.2')) //100.2  只为转换为浮点型
console.log(parseFloat('100.2abc')) //100.2
console.log(parseFloat('100.2.3')) //100.2

其它

String() 显示转换字符串
Boolean() 显示转换布尔值
toSting() 转换字符串  undefined和null不能用toString()

var a = 10
console.log(a.toString()) //123
console.log(a.toString(2)) //1010 表示以a为基底,转为2进制
console.log(a.toString(16)) //a 表示以a为基底,转为16进制

数据隐式转换

// isNaN()
console.log(isNaN(123)) //false
console.log(isNaN('123')) //false
console.log(isNaN('abc')) //true   先隐式转换成Number类型

// + - / % *
console.log(+'123')  //123 number类型
console.log(false < 1)  //true
console.log(2 < 1 < 3) //true  2 < 1为false flase < 3为true
console.log(2 < 3 < 1) //false 2 < 3为true  true < 1为false

console.log(undefined < 0) //false
console.log(undefined > 0) //false
console.log(undefined == 0) //false
console.log(null < 0) //false
console.log(null > 0) //false
console.log(null == 0) //false
console.log(undefined == null) //true

不发生隐式转换

// === 全等  !== 全不等
console.log('123' === 123)  //false

end !!!

原文地址:https://www.cnblogs.com/lyjfight/p/13306818.html