Javascript 如何检测数组是否由迭代器(或数组排列)创建

Javascript 如何检测数组是否由迭代器(或数组排列)创建,javascript,spread-syntax,Javascript,Spread Syntax,假设我们有: const foo = [1,2,3]; const bar = [1,...foo,3]; 有没有办法从bar中知道它是从foo中包含的项目创建的 我想使用代理,但bar是带扩展运算符的init,所以我们不能先代理bar…不,没有办法这样做。bar是一个普通数组,通过扩展语法的数组文本、concat调用或循环中的push创建的数组之间没有区别。为什么需要知道这一点?问题不是为什么,而是如何创建。值是值,语言不会记录从一个地方到另一个地方分配的内容。@8HoLoN我们试图挑战您的

假设我们有:

const foo = [1,2,3];
const bar = [1,...foo,3];
有没有办法从bar中知道它是从foo中包含的项目创建的


我想使用代理,但bar是带扩展运算符的init,所以我们不能先代理bar…

不,没有办法这样做。bar是一个普通数组,通过扩展语法的数组文本、concat调用或循环中的push创建的数组之间没有区别。

为什么需要知道这一点?问题不是为什么,而是如何创建。值是值,语言不会记录从一个地方到另一个地方分配的内容。@8HoLoN我们试图挑战您的前提。你不需要知道,如果你想知道你可能做错了什么。考虑到这是不可能的,如果我们知道您想要实现的目标,我们可以建议一种可行的替代方法。@8HoLoN因此拦截foo的用法,并编写const bar=reactive=>[1,…foo,3];。在创建反应式系统时,您要么需要显式,要么需要借助编译器的帮助。注意,对于const foo=1,您遇到了相同的问题;常数条=foo+1;或常量foo=[];常数条=foo==baz;-bar的值中没有任何东西指向foo的用法way@8HoLoN仅当在循环之前创建代理而不是普通数组时。关键是你不能事后作出决定。如果您能够控制创建数组的代码,您当然已经知道它是如何创建的,以及从何处创建的。这就是为什么我想知道是否可以使用类似的方法,不是检测推送,而是检测扩展操作符。