Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript内联将未定义替换为空字符串_Javascript_String_Undefined_Ternary Operator - Fatal编程技术网

Javascript内联将未定义替换为空字符串

Javascript内联将未定义替换为空字符串,javascript,string,undefined,ternary-operator,Javascript,String,Undefined,Ternary Operator,我有这个功能: function callWS(input) { var output = { "type" : input["type"] || "", "mark" : input["mark"] || "", "model" : input["model"] || "", "year" : input["year"] || "" }; return output; } 我希望用户以多种方

我有这个功能:

function callWS(input) {
    var output = {
        "type"  : input["type"]  || "",
        "mark"  : input["mark"]  || "",
        "model" : input["model"] || "",
        "year"  : input["year"]  || ""
    };

    return output;
}
我希望用户以多种方式调用此函数:

callWS(); ==> {"type":"","mark":"","model":"","year":""}
callWS({"type":"moto"}); ==> {"type":"moto","mark":"","model":"","year":""}
callWS({"type":"moto","mark":"audi"}); ==> {"type":"moto","mark":"audi","model":"","year":""}
如果参数未定义,则将其初始化为空字符串。目前,我的功能在第一种情况下不起作用,但在另一种情况下起作用

当我像
callWS()
那样调用它时,我得到:

Uncaught TypeError: Cannot read property 'type' of undefined
老实说,我不知道为什么它适用于2和3的情况下,但我需要使它的第一个案件也工作。我知道如果我使用:

if (input["type"])
可以,但我需要一个内联解决方案。这有可能吗?

在ES6中,将其写成

function callWS({type = "", mark = "", model = "", year = ""} = {}) {
  return {type, mark, model, year};
}
这里有另一种不涉及ES6的方法。许多库包含一个
default
实用程序,如果缺少某些属性,它会将这些属性应用于另一个对象

function deflt(obj, defaults) {
  var keys = Object.keys(defaults);
  for (var i = 0; i < keys.length: i++) {
    var key = keys[i];
    if (!(key in obj)) obj[key] = defaults[key];
  }
  return obj;
}

注意:如前所述,这将返回输入的修改版本。如果这不是您想要的,请根据需要进行调整。

您还必须为
输入
变量本身提供默认值

function callWS(input) {
   input = input || {};
   ...
}
否则,您将访问不存在(未定义)对象上的属性,这将导致错误(您现在拥有的)


另一方面,在JS中访问现有对象上不存在的属性不会被视为错误。

您可以编写自己的
扩展方法并使用它。
通过这种方式,您可以拥有一个默认对象,为其指定默认值,然后将其与传递到函数中的对象合并

功能扩展(a、b){
for(b中的var键){
如果(b.hasOwnProperty(键)){
a[键]=b[键];
}
}
返回a;
}
函数callWS(输入){
var defaultInput={
“类型”:“,
“标记”:“,
“范本”:“,
“年份”:”
}
var输出=扩展(默认输入,输入);
返回输出;
}
log(callWS());
log(callWS({“type”:“moto”});

log(callWS({“type”:“moto”,“mark”:“audi”}))
您还必须为
输入
本身提供默认值。只需将
input=input | |{}
添加到
callWS
的开头,将您的函数定义为
function callWS(input={})
@torazaburo-该项目不包括ES6@François Wahl-不幸的是,该项目没有使用jQuery,它没有使用任何外部库。@paulalexandru因此该部分,如果您不使用jQuery,您可以轻松编写自己的查询:)我在示例中也只使用了JavaScript,但您已经对其进行了排序:)不幸的是,该项目没有使用ES6yes@torazaburo,但他希望创建具有属性的对象,而不是undefined@torazaburo好吧,现在我明白了,对不起,树上的圆点让我错了
function callWS(input) {
   input = input || {};
   ...
}