尽管重新定义仍删除完整对象

时间:2019-09-25 12:57:28

标签: javascript jquery html

无法弄清楚,为什么object innerMain在每次选择更改时都会变小,尽管在每次调用object main函数的开始都用trig()的结构重新定义了它。 :

let innerMain = main;

var main = {
    1: 0,
    2: 0,
    3: 0,
    4: 0
  };

$('#sel').on('change', function(){
  trig($(this));
});


function trig(th = false){
  let innerMain = main;

  delete innerMain[th.val()];
  console.log(innerMain);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="sel">
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
</select>
<div id="result"></div>

1 个答案:

答案 0 :(得分:3)

发生这种情况是因为您参照旧(innerMain)变量创建了新变量(main),并且每次调用delete时,都会为旧变量(main调用它)

因此,您只有一个变量,可以对其进行修改。

您应该创建没有引用的新变量。 运作方式,您可以在 MDN 上阅读: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Objects https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

有效:

var main = {
    1: 0,
    2: 0,
    3: 0,
    4: 0
  };

$('#sel').on('change', function(){
  trig($(this));
});


function trig(th = false){
  let innerMain = Object.assign({}, main);

  delete innerMain[th.val()];
  console.log(innerMain);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="sel">
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
</select>
<div id="result"></div>