JS基础测试35期(js对象相关)

简答题:

所有题目共用一个上下文
已知对象:

1
2
3
4
5
const object1 = {
userid: 123,
username: "王二",
tel: "13208033621",
};
  • 一句话说明 encodeURI 和 encodeURIComponent 的主要区别?
  • 把 object1 转变成 userid=123&username=%E7%8E%8B%E4%BA%8C 这种字符串形式
  • 获取当前 URL 地址栏中的第一个?后面查询的内容(包括问号)
  • 把?后面的查询字符串转换成 object1 这样的键值对对象格式
  • 如果键值有重复,则值以数组呈现.

相关解答:

1.encodeURI函数假设参数是完整的URIs,encodeURIComponent()函数假设参数是URI中单独的一部分

因为这两种差异,endodeURI 不会将 URI 保留字符编码,encodeURIComponent 会忽略保留字符,把这些当作普通字符编码

2.将对象转成字符串

1
2
3
4
5
6
7
8
9
const object1 = {
userid: 123,
username: "王二",
tel: "13208033621",
};
var s = Object.entries(object1)
.map(([k, v]) => k + "=" + encodeURIComponent(v))
.join("&");
console.log(s);

控制台运行结果

3.获取当前 URL 地址栏中的第一个?后面查询的内容(包括问号)

1
location.search;

4.最佳实现方案:

1
2
3
4
5
6
7
var urlString = location.search;
var urlSearchParams = new URLSearchParams(urlString);
var urlObj = {};
for (let [key, value] of urlSearchParams.entries()) {
urlObj[key] = value;
}
console.log(urlObj);

5.实现方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var urlString = location.search;
var urlSearchParams = new URLSearchParams(urlString);
var repeatUrlObj = {};
for (let [key, value] of urlSearchParams.entries()) {
if (!repeatUrlObj[key]) {
repeatUrlObj[key] = value;
} else if (repeatUrlObj[key] && typeof repeatUrlObj[key] === "string") {
repeatUrlObj[key] = [repeatUrlObj[key]];
repeatUrlObj[key].push(value);
} else {
repeatUrlObj[key].push(value);
}
}
console.log(repeatUrlObj);

控制台打印结果