# 或||
的兼容性写法1
# 应用场景描述
当请求携带当前的token去请求资源接口时,当前的token是过期的。后端发现token过期会进行续命上,并验证了token没有被篡改。续命上的token是一个新生成的token,并要通过响应头的方式返回给前端。(new-token响应头的属性。)
前端拦截后端过来的响应请求,并提取http报文当中的new-token对应的值。(k-v对形式)如果有值说明前端是携带已经过期的token进行请求的。如果没值前端是带着没有过期的token进行资源请求。
const newToken = args.header['new-token'] || args.header['New-Token']
1
从请求头args.header
中获取new-token
或New-Token
的值,优先取小写形式的键,如果不存在则尝试大写形式的键。如果都不存在返回的是undefined。
# 举例子说明
const args = {
header: {
'content-type': 'application/json',
'new-token': 'abc123', // 小写形式
'Accept': 'text/html'
}
};
1
2
3
4
5
6
7
2
3
4
5
6
7
- 当执行
const newToken = args.header['new-token'] || args.header['New-Token']
时:- 会先尝试读取小写的
new-token
(值为'abc123'
) - 因为存在且不为假值(
false
/null
/undefined
/0
/''
等),直接返回'abc123'
- 不会再检查大写的
New-Token
- 会先尝试读取小写的
- 如果请求头只有大写形式:
const args = {
header: {
'New-Token': 'xyz789' // 只有大写形式
}
};
1
2
3
4
5
2
3
4
5
- 尝试
args.header['new-token']
会得到undefined
- 于是通过
||
继续尝试args.header['New-Token']
,最终得到'xyz789'
- 如果两种形式都不存在:
const args = { header: {} };
1
- 最终
newToken
会是undefined
# 总结知识点
false
= null
= undefined
= 0
= ''