1 背景
经常在express 框架中处理body参数等等操作,而有时经常没有传入某个对象参数,而程序里又对该对象的属性进行了操作,这就会导致比较严重的后果。没有异常捕获就会导致宕机,比如下列code:
let item = {
high:23,
width:32
}
let test = undefined;
console.info(item.high);
try{
console.info(test.high);
}catch(e){
console.info(e)
}
console.info("hello node");
把try catch语句去掉就会导致根本程序跑不到hello node语句。所以我们对对象属性操作前对应该对对象是否为空进行判断。
2 方法
Javascirpt 原生并没有提供判断对象是否为空的方法。经过查阅资料,在浏览器上 可以使用JQuery的方法进行判断。但在node环境内需要自己实现方法进行判断。
2.1 Jquery 的isEmptyObject
$.isEmptyObject({})
true
$.isEmptyObject({foo:1})
False
2.2 node
我们可以看到Jquery isEmptyObject方法的实现:
function isEmptyObject(e) {
var t;
for (t in e)
return !1;
return !0
}
for…in循环遍历对象自身的和继承的可枚举属性(但不含 Symbol 属性)。
2.3 判断对象属性个数
经常在写接口测试时,需要对返回对象进行check ,通过对上面for in 可以写个方法来判断对象成员个数
let checkObjectKeyNum = function(object, targetNum){
let objectPrototypeCount = 0;
for (let i in object){
objectPrototypeCount++;
}
return expect(objectPrototypeCount).to.be.equal(targetNum);
}