今天在使用koa的使用,为了判断传入参数中是否正确,使用了object的hasOwnPrototype
,但是却发现代码报错了。
首先获取到参数:var params = ctx.query;
然后判断返回对象中是否存在指定参数,如user参数:params.hasOwnPrototype("user")
最后执行的时候,发现代码报错
执行params instanceOf Object
,发现返回的是false
获取的明明是一个对象,而且通过Object.prototype.toString.call(params
)得到的明明是[objec t Object]
,也就是确实是一个对象没错了呀,但是为什么params.hasOwnPrototype
返回是undefined呢
因为之前一直以为koa中ctx.query和express中的req.query一样,所以先在express环境下,获取传入参数,并判断是否存在指定参数,最后发现能够正常返回。那么就会说koa中的query和express中的是不一样的。于是去看了它们源码中关于query的不同,最后发现,在koa中,关于query的设置和获取使用到了querystring
,源码如下:
get query(){
const str = this.querystring;
const c = this._querycache = this._querycache || {};
return c[str] || (