Javascript 有没有办法使$.extend不向目标传播空值属性

Javascript 有没有办法使$.extend不向目标传播空值属性,javascript,jquery,Javascript,Jquery,下面是一行已执行代码,其中设置了方法中的defaultOptions列表 到一堆空值,还有一些例外 var passedOptions = $.extend({},defaultOptions, configOptions); defaultOptions = { "method":"POST", "url":"", "params":null, "data":null, "headers":null, "xsrfHeaderName":nul

下面是一行已执行代码,其中设置了方法中的defaultOptions列表 到一堆空值,还有一些例外

var passedOptions = $.extend({},defaultOptions, configOptions);

defaultOptions =
{ 
    "method":"POST",
    "url":"",
    "params":null,
    "data":null,
    "headers":null,
    "xsrfHeaderName":null,
    "xsrfCookieName":null,
    "transformRequest":null,
    "transformResponse":null,
    "cache":false,
    "timeout":null,
    "withCredentials":false,
    "reqsponseType":null
}

configOptions = 
 {
    "url":"someurl/blahblah",
    "data": "username":"me@email.com",
    "email":"me@email.com"
 }
这是我想要的PasseOptions的样子

passOptions = 
{
   "method":"POST",
   "url":"someurl/blahblah",
   "data": "username":"me@email.com",
   "email":"me@email.com"
   "cache" : false,
   "withCredentials" : false
}

基本上是这两者的组合,但具有空值的属性不会复制到目标。这可能吗???

您可以手动执行:

var passedOptions={};
for(var i in defaultOptions){
    if(defaultOptions[i] != null){
        passedOptions[i]=defaultOptions[i];
    }
}
for(var i in configOptions){
    if(configOptions[i] != null){
        passedOptions[i]=configOptions[i];
    }
}

我找到了答案,尽管它不忽略空值,但它允许将对象向下合并到目标,同时忽略具有未定义值的属性。将所有空值替换为未定义的无效值


想到这一点,我只是不知道jquery中是否有一些本机的东西可以做到这一点,因为jquery应该忽略null和未定义的键(),但它没有,可能是因为一个错误,ticket似乎读取到它将忽略$的参数。扩展到如果configOptions本身为null,那么它将忽略它,但我考虑的是更深层的实现,它忽略了最终目标的任何objectN中的null子属性,因此目标是两个对象的合并,减去所有null或未定义的值属性。