1. 程式人生 > 實用技巧 >javascript資料型別判斷及資料隱式和顯示轉換

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 !!!