下麵的代碼,我想要列印出hey jack,結果卻列印出hey rose,為什麼? 這裡問題出在{ name: 'jack' } != { name: 'jack' }。對象是複雜數據類型,複雜數據類型的值存儲在堆記憶體,棧記憶體儲的是複雜數據類型的地址(地址指向真實數據),當比較兩個對象時,JavaSc ...
下麵的代碼,我想要列印出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 })