当前位置: 移动技术网 > IT编程>开发语言>JavaScript > D1-JavaScript

D1-JavaScript

2019年11月02日  | 移动技术网IT编程  | 我要评论

下面的代码,我想要打印出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         })

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网