Javascript相当于通过引用分配?

ric*_*h97 12 javascript php pointers

有没有什么方法可以通过将局部变量指向对象属性来减少Javascript中的冗长?

例如在PHP中,我可以这样做:

$obj->subobject->property = 'Foo';
$property =& $obj->subobject->property;
$property =  'Bar';
echo $obj->subobject->property;
// output 'Bar'
Run Code Online (Sandbox Code Playgroud)

这不是一个很好的例子,但你明白了.

我想在Javascript中复制此行为.我经常不得不深入到对象中,这样做非常烦人:

if (please.stop.making.me[somevar].type.so.much.length) {
    please.stop.making.me[somevar].type.so.much[newSubObjectKey] = anObject;
}

// perform more operations on the object down here
Run Code Online (Sandbox Code Playgroud)

它会更容易阅读,更容易输入:

var subObj = is.much.easier.to.type.once;
if (subObj.length) {
     subObj[newSubObjectKey] = anObject;
}

// now that's much better
Run Code Online (Sandbox Code Playgroud)

我知道我应该知道这一点,但我只是在Javascript中推进"高级新手".

Oli*_*pro 21

在Javascript中,所有内容都按值传递,但变量的类型将决定它是否是按值传递的引用;

  • 对象是引用
  • 基元(数字,字符串等)按值传递.

简单来说,如果将变量传递给一个数组的函数,在函数中修改它将影响父类.

但是,在数组中传递值不会.当然,绝对没有什么能阻止你在一个对象中包装一个原语,以确保它像一个"指针"一样工作.


Aln*_*tak 6

您可以分配一个新变量来引用属性键链中的任何深度,只要引用的条目不是原始类型

这是有效的,因为裸对象变量实际上是对该变量的引用,因此您的新(较短)变量可以指向同一位置。

但是原始数字和字符串值是通过value传递,因此您无法创建对它们的新引用。