对象属性未被清除

时间:2016-11-20 02:40:26

标签: javascript object

var fields = {date:{type:'date'}};    
var createField = function(field, settings)
{
    var myArgs = {};
    myArgs = fields[field];
    console.log(fields[field]);
    console.log(myArgs);
    console.log(settings);
    if('label' in settings && settings.label) myArgs.label = settings.label;
    // write html
    var html = '';
    myArgs = null;
    return html;
}
var type = 'date';
createField(type, {label:'Date of Birth'});
// log prints no "label" in fields[field] or myArgs, but does in settings
createField(type, {});
// log prints label of "Date of Birth" in both fields[field] and myArgs, but not in settings

WTF?

换句话说,我的函数从头开始创建一个变量,我在代码中的其他任何地方都没有使用它:myArgs。它从页面顶部不变的声明中获取有关字段的args。如果传递给函数的settings有标签,则会将标签添加到myArgs变量。然后在返回退出函数之前,我清除myArgs

label每次在myArgs传递后都会显示在settings中,即使后续settings没有传递它也是如此。

编辑 FTR,label不应在myArgsfields[field]中打印。它在后者中不存在,并且在前者打印时不应该存在YET。

*更新* 小提琴:https://jsfiddle.net/Lxqvt6mk/2/

1 个答案:

答案 0 :(得分:0)

您将fields.date分配给myArgs,然后修改myArgs。修改myArgs正在修改fields.date,因为maArgs是指它。它是一个对象。将其分配给变量时,它不会被复制。您只需要对内存中的同一个对象进行两次引用。您可以在调用函数之前和之后比较fields的值。

下次,请在粘贴前检查您的代码。最好的解决方案是插入一个可运行的代码段。

祝你好运!