下面的代码,我想要打印出hey jack,结果却打印出hey rose,为什么?
1 function greet(person) { 2 if (person == {name: ‘jack‘}) { 3 console.log(‘hey jack‘) 4 return 5 } else { 6 console.log(‘hey rose‘) 7 return 8 } 9 } 10 greet({name: ‘jack‘})
这里问题出在{ name: ‘jack‘ } != { name: ‘jack‘ }。对象是复杂数据类型,复杂数据类型的值存储在堆内存,栈内存储的是复杂数据类型的地址(地址指向真实数据),当比较两个对象时,JavaScript都会比较对象在内存中的引用地址。这个例子中,两个对象虽然都有相同的属性和值,但它们在内存中地址是不同的,所以是两个不同的对象。
正确的解决方法应该是比较对象属性的值:
1 function greet(person) { 2 if (person.name === ‘jack‘) { 3 console.log(‘jack‘); 4 return 5 } else { 6 console.log(‘rose‘); 7 return 8 } 9 } 10 greet({ 11 name: ‘jack‘ 12 })
原文:https://www.cnblogs.com/zxx0320/p/11779340.html