为什么导入的值会发生变异?

时间:2017-07-26 21:17:25

标签: javascript reactjs

我不明白为什么,在我定义React类的文件中,分配给导入的变量和永远不会变异的变量仍然会发生变化。

import statuses from '../statuses'; // array of 6 items

class MyComponent extends React.Component {

  constructor(props) {
    super(props);
    this.statuses = statuses;
  }

  render() {
    const statusOptions = this.statuses;
    if (statuses.length === statusOptions.length) statusOptions.push(obj);
    console.log(statuses.length); // 7 (?!?!)
  }
}

我根本不知道为什么statuses会更新,以及为什么它会像statusOptions一样发生变异。 (为了清楚起见,我还记录了statuses本身,果然,obj已被推送到数组。

2 个答案:

答案 0 :(得分:3)

statusesthis.statusesstatusOptions 所有引用指向同一个对象

推送到一个,它将出现在所有三个中。

答案 1 :(得分:1)

所有三个变量都相同,共享相同的参考。您可以使用:

this.statuses =JSON.parse(JSON.stringify(statuses))

var a=[1,2,3]
var b=a;
c=JSON.parse(JSON.stringify(a));
a.push(4);

console.log(b);
console.log(c);

这与this.statuses=statuses类似,但更改一个变量不会影响另一个变量。