当Javascript中没有定义集合时,为什么push不起作用?

Ala*_*an2 0 javascript

我有以下代码:

var maxNum = formData.answers = null ? Math.max.apply(Math, formData.answers.map(function (o) { return o.number; })) : 0;
var emptyAnswer = {
    "number": maxNum + 1,
    "correct": false,
    "name": "",
    "notes": "",
    "topicId": formData.topicId
};
formData.answers.push(emptyAnswer);
Run Code Online (Sandbox Code Playgroud)

如果我已经将答案集合作为formData的一部分,但是如果formData.answers为null则该代码无效,则代码可以正常工作.它给出了一个信息:

TypeError: Object 0 has no method 'push'
    at Object.$scope.modalAddAnswer (http://127.0.0.1:81/Content/app/admin/controllers/question-controller.js:113:30)
Run Code Online (Sandbox Code Playgroud)

如果目前没有定义答案,有没有办法可以重构它以使其工作.

Ted*_*opp 5

formData.answers在此声明中指定0 :

var maxNum = formData.answers = null ? Math.max.apply(Math, formData.answers.map(function (o) { return o.number; })) : 0;
Run Code Online (Sandbox Code Playgroud)

我的猜测是,你正在试图比较formData.answersnull.您想使用!=(或!==)而不是第二个=:

var maxNum = formData.answers != null ? Math.max.apply(Math, formData.answers.map(function (o) { return o.number; })) : 0;
Run Code Online (Sandbox Code Playgroud)

这解释了关于"对象0没有方法'推送'的奇怪消息".但请注意,如果formData.answersnull,那么你push仍然无法工作; 你需要设置formData.answers一个空数组.我建议这段代码:

var maxNum = 0;
if (formData.answers == null) {
    formData.answers = [];
} else if (formData.answers.length > 0) {
    maxNum = Math.max.apply(Math,
        formData.answers.map(function (o) { return o.number; }));
}
formData.answers.push(emptyAnswer);
Run Code Online (Sandbox Code Playgroud)