pokemonContainer.addEventListener('click', function (e) {
let favourite = getStorageItem('pokemon');
let eTargetID = e.target.dataset.id;
let found = favourite.some((el) => el.id === eTargetID);
console.log(found);
console.log(eTargetID);
if (!found) {
favourite.push(pokemonArray[e.target.dataset.id - 1]);
setStorageItem('pokemon', favourite);
}
});
我试图在一个包含对象的数组中查找id。对象的id为1。我的e.target.dataset.id是1,但它返回false。但是当我硬编码值el.id === 1时,它返回true。我做错了什么吗?为什么e.target.dataset.id也是1,它却返回false?
1条答案
按热度按时间x3naxklr1#
使用
el.id == eTargetId
而不是el.id === eTargetId
。(仅使用两个等号,而不是三个。)e.target.dataset.id
是一个JavaScript数字1
。(它是一个可以进行数学运算的对象,就像3.141
一样)但是HTML元素ID是一个JavaScript字符串
"1"
(它由字母组成,如"I have 1 apple."
)。在JavaScript中,有一个模糊相等运算符
==
,当与字符串比较时,数字被当作字符串来读,所以1=="1"
为真。还有一个严格的相等运算符,在这里字符串和数字被认为是完全不同的东西,所以
1==="1"
是假的。