将对象链接到对象数组时,两个对象的值是如何链接的?

时间:2016-02-12 06:02:21

标签: javascript typescript

我有一个tes测试服务,其中有两个对象显示在我的Typescript代码中:

test: ITestView;
tests: ITestView[];

此代码检查tes.tests数组中的每个对象,当id匹配时,它会将数组中的对象指定为另一个对象tes.test

tes.tests.forEach((test: ITestRow) => {
    test.current = false;
    if (test.id == id) {
        tes.test = test; // << Linking them somehow here
        test.current = true;
    }
});

稍后我会这样做:

tes.test.current = false;

此代码将tes.tests[0].current的值设置为false,将tes.test.current设置为false。

当我现在这样做时:

tes.test = null;

此代码将tes.test的值设置为null,但不对tes.tests[]数组执行任何操作。

有人可以解释为什么它不会影响tes.tests[]数组吗?

2 个答案:

答案 0 :(得分:2)

test = foo; // test references existing object foo
tests[0] = test; // test[0] also references existing object foo
test = null; // test doesn't reference anything, but tests[0] still does

根据您的期望,您可以:

tests[0] = null; // tests[0] doesn't reference anything

或:

tests.splice(0,1); // removed the 1st item from the tests
// not tests array became shorter!

答案 1 :(得分:0)

我认为快速而简单的答案是

tes.test = null;

不会摧毁它指向的对象。 tes.test现在什么都没有。

为了澄清,tes.test.current = false更改了两个对象是因为它引用了对象current指向的tes.test键。

tes.test = null;

上面的代码没有对tes.tests []进行任何更改,因为它简单使tes.test指向任何内容而不是更改它指向的对象。 我希望我很清楚!