javascript - 如何测试 JavaScript 对象是否只有特定的字段/属性
问题描述
我有这个函数可以测试一个对象是否有某些字段
validateServerResponseStructure(res: any) {
let isTypeCorrect: boolean = (
res.result != undefined) && (res['additional-info'] != undefined
);
return isTypeCorrect;
}
有没有一种方法可以测试res
只有result
和additional-info
属性而没有别的?
解决方案
只需检查它的长度keys
是否正好是两个。另外,如果要确保属性不是,最好使用严格的相等比较undefined
:
validateServerResponseStructure(res: any) {
let isTypeCorrect: boolean = (
res.result !== undefined
&& res['additional-info'] !== undefined
&& Object.keys(res).length === 2
);
return isTypeCorrect;
}
在不寻常的情况下,您可能具有包含该undefined
值的属性,并且您希望允许此类值,请检查键的长度,并且两者result
都additional-info
包含在键中:
const keys = Object.keys(res);
let isTypeCorrect: boolean = (
['result', 'additional-info'].every(key => keys.includes(key))
&& keys.length === 2
)
推荐阅读
- acumatica - acumatica 和 zpl 标签打印
- java - 查询需要很长时间导致 504 超时错误?
- java - Equinox 启动器 Main.run() 在每个操作上调用
- android - RecyclerView 在调用 notifyItemInserted 和 notifyItemRangeChanged 时出现重叠
- php - 将 PHP 代码下载到 excel 文件中 - 仅显示查询的第一条记录而不返回所有查询
- java - Java用奇怪的字符创建Redis键和内容
- performance - 零成本抽象:for 循环与迭代器的性能
- c++ - Assimp 错误的纹理数组
- java - 如何从天,小时和分钟获取日期的时间间隔
- arrays - 将多个范围作为 AGGREGATE 的数组参数传递