隐式强制类型转换指的是那些隐藏的强制类型转换,反作用也不是很明显,事实上,只要本身以为不够明显的强制类型转换均可以算做隐式强制类型转换,接下来,此文将会介绍几种常见的隐式类型转换。函数
转换规则:编码
若是只有一个操做数是字符串,则将另外一个操做数转换为字符串,而后再将两个字符串拼接起来code
举例:对象
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'
转换规则:字符串
举例:io
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
场景:console
以上的场景中非布尔值会被隐式的强制转为布尔值,转换规则遵循上篇文章的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
相等操做符分为宽松相等==和严格相等===,这两个都用来判断值是否相等,区别在于在判断两边操做数是否相等时,宽松相等容许进行强制类型转换,而严格相等不容许进行强制类型转换,所以下面只会介绍宽松相等在比较时的强制类型转换
转换规则:function
举例:class
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
比较操做符包括小于(<)、大于(>)、小于等于(<=)、和大于等于(>=)
转换规则:
举例:
console.log('11' < 3) // false console.log(true < 2) // true const h = { valueOf: function () { return '22' } } console.log(h > 1) // true
这篇文章对JS中的常见隐式强制类型转换作了一个小结,但愿能对你们理解有所帮助。若是有错误或不严谨的地方,欢迎批评指正,若是喜欢,欢迎点赞