JavaScript隐式类型规则整理

x33g5p2x  于2022-03-28 转载在 Java  
字(0.7k)|赞(0)|评价(0)|浏览(239)

一、写在前面
今天看到一个面试题目,关于js的隐式类型转化的题目,但是我不会,下面将题目附上。

// 哪些为真?
if([])
if({})
if([]==false)
if({}==false)
if([] == ![])

二、转化规则
如果再次遇到这种题目,我们记住这个图即可。

1、如果要是其中一个值为布尔值,则将其转化为Number类型的值
2、如果其中一个值为字符串类型的,另一个值为数值类型的值,则将其转化为Number类型的值再比较。
3、如果其中一个值为对象,另一个不为对象,则调用ToPromitive方法,则进行比较,ToPrimitive先调用toString方法,然后再调用valueof方法。
4、如果两个都是对象,则判断指向是否一样。
三、看上述题目
3.1

if([]) {
	console.log('真的')
}

[]转化为布尔值,则为true,所以打印会执行。
3.2

if({}) {
	console.log('真的')
}

{}转化为布尔值,则为true,所以打印会执行。
3.3

if([] == false){
	console.log('真的')
}

因为右边是布尔值,所以右边应该转化为number类型,此时右边的值为0,左边也应该转化为number类型,此时转化为number类型的值为0,所以此时相等。会打印结果.
3.4

if({}==false){
	console.log('真的')
}

因为右边为布尔值,此时应该将其转化为number类型的值,此时右边的值为0,左边的值应该转化为number类型,此时转化为1,所以不相等,不会打印。
3.5

if([] == ![]){
	console.log('真的')	
}

因为右边![]false,转化为number类型的值为0,并且左边转化为number类型的值为0,所以此时相等,可以打印。

相关文章

微信公众号

最新文章

更多