是否有一些基于条件设置属性的语法?
data: {
userId: 7,
actionId: 36,
express: (myCondition ? true : null) // does not work
}
我希望express
要么被设置为一个值,要么根本不被设置(即,不应该有名为express
的键),并且在定义之后没有额外的语句。我知道我可以将它用作布尔值,但接收方正在使用isset()
检查,我想知道是否可以避免修改它。
编辑:似乎没有直接解决上述问题的方法。以下是近距离的建议:
JSON.stringify (Chris Kessel,dystroy):
var json = JSON.stringify( {
data: {
userId: 7,
actionId: 36,
express: (myCondition ? true : null)
}
});
一个匿名函数 (Paulpro):
var data = new function(){
this.userId = 7;
this.actionId = 36;
myCondition && (this.express = true);
};
a extra statement (x4rf41):
data: {
userId: 7,
actionId: 36
}
if(myCondition) data["express"] = true;
Eval (我的一个前同事):
eval("data = {userId: 7, actionId: 36 " + (myCondition ? ", express: true}" : "}"))
Conditional definition (不知道如何标记这个):
data = (
(myCondition && { userId: 7, actionId: 36, express: true }) ||
(!myCondition && { userId: 7, actionId: 36 })
);
发布于 2013-08-02 22:52:32
如下所示:
data: {
userId: 7,
actionId: 36,
express: (myCondition ? true : undefined)
}
当您将对象stringify为JSON时,值为JSON的属性不会被写入。
编辑:从评论中看,实际上并没有涉及到JSON。OP使用的是$.ajax
,所以可能使用了$.param
。不幸的是,$.param
确实为值为undefined
的属性创建了一个条目。因此,如果没有任何补充代码行,可能就没有解决方案。
发布于 2017-10-21 05:36:24
data: {
userId: 7,
actionId: 36,
...myCondition && {express: true}
}
请注意,如果您使用的是Flow,则该语法可能会生成类型检查错误。您可以更明确地、也可以不那么简洁地编写上面的代码,如下所示:
data: {
userId: 7,
actionId: 36,
...(myCondition ? {express: true} : {})
}
发布于 2013-08-02 23:16:33
如果您使用匿名函数而不是对象文字表示法来定义对象,则可以做到这一点:
var data = new function(){
this.userId = 7;
this.actionId = 36;
myCondition && (this.express = true);
};
得到的data
对象是完全相同的,除了它的constructor
将是匿名函数,而不是window.Object
。
https://stackoverflow.com/questions/18019854
复制相似问题