js中也是存在指针的

196 阅读2分钟

「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

作者: VINCENT PASSANISI 译者:前端很美 来源:hackernoon

或许你可能认为js中是不存在指针的,不过他确实是存在指针的,本文将快速的回顾js指针是如何工作和生效的,同时还会讨论js指针以这种方式存在的可能原因。
javascript经常被认为是一种简单的编程语言,别的语言的指针通常是内存一个具体的位置中存储引用的方式,在c,golang以及c#的指针通常是由运算符&创建的,咋一看,js确实没有这个特性。然而事实证明js中也存在指针,只是存在的方式和它们不同而已,实际上,数组和对象类型的变量就是指针,下面是一个例子:

//js 指针 例子
const obj1 = {
    city: 'Boston',
    state: 'Massachusetts'
};

const obj2 = obj1;
obj2.city = 'Springfield';

console.log(obj1); // {city: 'Springfield', state: 'Massachusetts'};

我们可以看到改变了变量obj2同样也会改变obj1,实际上obj1的值只是一个指向存储了对象信息内存位置的指针,所以obj2也是那个存储了对象信息的内存的引用。
如果你不想按照上面的特性行事怎么办?如果你真的想复制obj1对象的信息,并将其存储在对象obj2中,自ES2015以来,最简洁的方法是:

const obj2 = { …obj1 };

这将告诉解释器,你希望在内存的另一个位置存储一个全新的对象,并且新对象的内容和obj1相同,但是不要忘记,obj2依然是一个指针,只是指向了一个新的对象。下面的代码也可以达到同样的效果, 尽管他不是很直观:

const obj2 = Object.assign({}, ob1j);

当我们回头想想,为什么对象和数组是指针,或许这是个很难回答的问题,但有个事实是,js是一个随着时间发展和变化的语言,因为人们的需求越来越丰富,互联网也在不断的发展,同样也需要能够与其一起发展的编程语言,指针为开发者提供强大的功能, 但是同时人们又不想为指针使用特定的运算符(&)所禁锢。