隐式强制类型转换指的是那些隐藏的强制类型转换,反作用也不是很明显,事实上,只要本身以为不够明显的强制类型转换均可以算做隐式强制类型转换,接下来,此文将会介绍几种常见的隐式类型转换。函数
转换规则:ui
举例:编码
console.log(1 + true) // 2
console.log('1' + '1') // '11'
console.log(1 + '1') // '11'
console.log('1' + 'true') // '1true'
var a = {
valueOf: function() {
return 2
},
toString: function() {
return 1
}
}
var b = {b: 1}
console.log(a + '1') // '21'
console.log(b + '1') // '[object Object]1'
复制代码
转换规则:spa
举例:code
console.log(5 - '1') // 4
console.log(5 - true) // 4
console.log(5 - null) // 5
console.log(5- undefined) // NaN
const c = {
valueOf: function() {
return '1'
}
}
console.log(5 - c) // 4
复制代码
场景:对象
以上的场景中非布尔值会被隐式的强制转为布尔值,转换规则遵循上篇文章的ToBoolean转换规则
举例:字符串
const d = 11
const e = null
let f
const g = f ? d : e
console.log(g) // null
console.log(d && e) // null
console.log(d || e) // 11
复制代码
相等操做符分为宽松相等==和严格相等===,这两个都用来判断值是否相等,区别在于在判断两边操做数是否相等时,宽松相等容许进行强制类型转换,而严格相等不容许进行强制类型转换,所以下面只会介绍宽松相等在比较时的强制类型转换
转换规则:string
举例:it
console.log(null == undefined) // true
console.log('NaN' == NaN) // false
console.log(5 == NaN) // false
console.log(NaN == NaN) // false
console.log(NaN != NaN) // true
console.log(false == 0) // true
console.log(true == 1) // true
console.log(true == 2) // false
console.log(undefined == 0) // false
console.log(null == 0) // false
console.log('5' == 5) // true
复制代码
比较操做符包括小于(<)、大于(>)、小于等于(<=)、和大于等于(>=) 转换规则:io
举例:
console.log('11' < 3) // false
console.log(true < 2) // true
const h = {
valueOf: function () {
return '22'
}
}
console.log(h > 1) // true
复制代码
这篇文章对JS中的常见隐式强制类型转换作了一个小结,但愿能对你们理解有所帮助。若是有错误或不严谨的地方,欢迎批评指正,若是喜欢,欢迎点赞