JavaScript 常见的隐式类型转换结果

114 阅读2分钟

1.前言

很早之前就了解到js有隐式类型转换这个东西的,但是一直没有了解和总结,所以都是用写java那一套去写js,写的是没有啥问题,都是总是写if(a != undefined && a != "")这些臃肿的代码也太难看了,现在有时间也总结一下js中的隐式类型转换,以后写的能更加简洁。
注:环境为node 10.13.0

2.隐式转换--if判断

let i = 0
if (i) // false,false转成数字则是0
//=====================================

let i = 1
if (i) // true,true转成数字则是1
//=====================================

let str = ''
if(str) // false
//=====================================

let str = ' '
if(str) // true(字符串有空格的)
//=====================================

let array = []
if (array) // true
//=====================================

let obj = {}
if (obj) // true
//=====================================

let obj = undefined
if (obj) // false
//=====================================

let num = NaN
if (num) // false 
//=====================================

3.隐式转换--比较运算符


let a = "1"
let b = 1
console.log( a == b)//true,字符串转成数字再比较
console.log( a === b)//false
//=====================================

let a = "1"
let b = true
console.log( a == b)//true,两者都转成数字再进行比较,true-> 1,false-> 0
console.log( a === b)//false
//=====================================

let a = 1
let b = true
console.log( a == b)//true, 布尔值转成数字再比较
console.log( a === b)//false
//=====================================

let a = ["1","2","3"]
let b = "1,2,3"
console.log( a == b)//true,数组转字符串再比较
console.log( a === b)//false
//=====================================


let a = ["1"]
let b = 1
console.log( a == b)//true,//数组转字符串再转数字,最后比较
console.log( a === b)//false
//=====================================

let a = []
let b = 0
console.log( a == b)//true,//数组转字符串('')再转数字(0),最后比较
console.log( a === b)//false
//=====================================

let a = null
let b = null
console.log(a == b)//true
console.log(a === b)//true
//=====================================

let a = NaN
let b = NaN
console.log(a == b)//false NaN是一种特殊的数值类型的值,但是不等于任何数字,包括自己
console.log(a === b)//false
//=====================================

let a = []
let b = []
console.log(a == b)//false,对象比较地址,地址不同为false
console.log(a === b)//false
//=====================================

let a = {}
let b = {}
console.log(a == b)//false,对象比较地址,地址不同为false
console.log(a === b)//false