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

标签 javascript string undefined ternary-operator

我有这个功能:

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"])

可以解决问题,但我需要一个内联解决方案。这有可能吗?

最佳答案

您还必须为 input 变量本身提供默认值。

function callWS(input) {
   input = input || {};
   ...
}

否则您会访问不存在(未定义)对象的属性,这会导致错误(您现在所拥有的)。

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

关于Javascript内联用空字符串替换未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41126054/

相关文章:

JavaScript:获取未定义的值

javascript - 如何在 JavaScript 中用空字符串替换 'undefined'

javascript - 如何从 Javascript 或 Nodejs 执行 Python 脚本?

c++ - 使用预处理器进行字符串连接

javascript - 在 For 循环中延迟 jQuery Ajax

c++ - 在 C++ 中填充 STL 字符串

java - 如何从字符串的开头和结尾删除换行符?

javascript - 无法读取未定义的属性 'canvas'

javascript - AngularJS中的错误处理 http get then construct

javascript - 当用户滚动时,粘性导航栏重新出现