在HTML中检索JavaScript映射值是指在网页中访问和操作JavaScript定义的映射数据结构(Map或普通对象)的值。JavaScript提供了多种数据结构来存储键值对,最常见的是普通对象(Object)和ES6引入的Map对象。
const obj = {
key1: 'value1',
key2: 'value2'
};
const map = new Map();
map.set('key1', 'value1');
map.set('key2', 'value2');
// 点表示法
const value1 = obj.key1;
// 方括号表示法
const value2 = obj['key2'];
// 检查属性是否存在
if ('key1' in obj) {
console.log('key1 exists');
}
// 获取所有键
const keys = Object.keys(obj);
// 获取所有值
const values = Object.values(obj);
// 使用get方法
const value1 = map.get('key1');
// 检查键是否存在
if (map.has('key1')) {
console.log('key1 exists');
}
// 获取所有键值对
for (const [key, value] of map.entries()) {
console.log(key, value);
}
// 获取所有键
const keys = [...map.keys()];
// 获取所有值
const values = [...map.values()];
<!DOCTYPE html>
<html>
<head>
<title>检索JavaScript映射值示例</title>
<script>
// 定义一个对象
const userData = {
name: '张三',
age: 30,
email: 'zhangsan@example.com'
};
// 定义一个Map
const productMap = new Map();
productMap.set('p001', {name: '笔记本电脑', price: 5999});
productMap.set('p002', {name: '智能手机', price: 3999});
function displayUserInfo() {
const name = userData.name;
const age = userData['age'];
document.getElementById('userInfo').innerHTML = `
<p>姓名: ${name}</p>
<p>年龄: ${age}</p>
<p>邮箱: ${userData.email}</p>
`;
}
function displayProducts() {
let html = '<ul>';
for (const [id, product] of productMap.entries()) {
html += `<li>${product.name} - 价格: ¥${product.price} (ID: ${id})</li>`;
}
html += '</ul>';
document.getElementById('productList').innerHTML = html;
}
function getProductById() {
const productId = document.getElementById('productId').value;
if (productMap.has(productId)) {
const product = productMap.get(productId);
document.getElementById('productDetail').innerHTML = `
<p>产品名称: ${product.name}</p>
<p>产品价格: ¥${product.price}</p>
`;
} else {
document.getElementById('productDetail').innerHTML = '<p>未找到该产品</p>';
}
}
</script>
</head>
<body>
<h1>用户信息</h1>
<button onclick="displayUserInfo()">显示用户信息</button>
<div id="userInfo"></div>
<h1>产品列表</h1>
<button onclick="displayProducts()">显示所有产品</button>
<div id="productList"></div>
<h2>按ID查询产品</h2>
<input type="text" id="productId" placeholder="输入产品ID">
<button onclick="getProductById()">查询</button>
<div id="productDetail"></div>
</body>
</html>
原因: 当尝试访问对象或Map中不存在的键时,会返回undefined。
解决方案:
// 对象
const value = obj.nonExistentKey !== undefined ? obj.nonExistentKey : defaultValue;
// Map
const value = map.has('nonExistentKey') ? map.get('nonExistentKey') : defaultValue;
// 或者使用逻辑或运算符
const value = map.get('nonExistentKey') || defaultValue;
原因: for...in循环会遍历对象自身和原型链上的可枚举属性。
解决方案:
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
// 只处理对象自身的属性
console.log(key, obj[key]);
}
}
原因: Map在频繁添加删除键值对时性能更好,Object在字面量创建时更高效。
解决方案: 根据使用场景选择合适的数据结构:
没有搜到相关的文章