Javascript将一个变量设置为另一个变量

Javascript将一个变量设置为另一个变量,javascript,reverse,naming-conventions,Javascript,Reverse,Naming Conventions,我最近开始学习JavaScript,在变量命名方面有点问题。例如,在Ruby中我通常会这样做: no_spaces = 'the gray fox'.gsub(/\s/, '') => "thegrayfox" reversed = no_spaces.reverse() => "xofyargeht" no_spaces => "thegrayfox" reversed => "xofyargeht" 然而,同样的事情在JavaScript中不起作用。下面是发生的情

我最近开始学习JavaScript,在变量命名方面有点问题。例如,在Ruby中我通常会这样做:

no_spaces = 'the gray fox'.gsub(/\s/, '')
=> "thegrayfox"
reversed = no_spaces.reverse()
=> "xofyargeht"

no_spaces
=> "thegrayfox"
reversed
=> "xofyargeht"
然而,同样的事情在JavaScript中不起作用。下面是发生的情况:

var noSpaces = 'the gray fox'.replace(/\s/g, '').split('')
noSpaces
=> [ 't', 'h', 'e', 'g', 'r', 'a', 'y', 'f', 'o', 'x' ]
var reversed = noSpaces.reverse().join('')

noSpaces
=> [ 'x', 'o', 'f', 'y', 'a', 'r', 'g', 'e', 'h', 't' ]
reversed
=> 'xofyargeht'
在这里,
reverse()
似乎是罪魁祸首,但它很可能发生在其他函数中。我的代码中是否有我没有意识到的问题,或者这只是JS的一个奇怪之处?

是一种变异的方法,所以它的ruby等价物应该是
相反,而不是反向<代码>。要保留原始阵列,必须先克隆它:

> noSpaces = 'the gray fox'.replace(/\s/g, '').split('')
["t", "h", "e", "g", "r", "a", "y", "f", "o", "x"]
> reversed = noSpaces.slice(0).reverse()
["x", "o", "f", "y", "a", "r", "g", "e", "h", "t"]
> noSpaces
["t", "h", "e", "g", "r", "a", "y", "f", "o", "x"]
以下是上列出的所有数组mutator方法:

所有其他数组方法都是访问器。

是一种变异方法,因此它的ruby等价物应该是
相反,而不是反向<代码>。要保留原始阵列,必须先克隆它:

> noSpaces = 'the gray fox'.replace(/\s/g, '').split('')
["t", "h", "e", "g", "r", "a", "y", "f", "o", "x"]
> reversed = noSpaces.slice(0).reverse()
["x", "o", "f", "y", "a", "r", "g", "e", "h", "t"]
> noSpaces
["t", "h", "e", "g", "r", "a", "y", "f", "o", "x"]
以下是上列出的所有数组mutator方法:

所有其他数组方法都是访问器。

在这里是一个非常好的资源:

反向方法将调用数组对象的元素转置到位,改变数组,并返回对数组的引用

你需要阅读这些文档,确保你了解它们是如何工作的

在这里是一个非常好的资源:

反向方法将调用数组对象的元素转置到位,改变数组,并返回对数组的引用


你需要阅读这些文档,确保你了解它们是如何工作的

您所做的一件不同的事情是您将第一个变量初始化为什么。在Ruby中,初始化为从中删除空格的字符串。在JavaScript中,您将其初始化为从字符串中删除空格的字符数组

正确的JavaScript解决方案是:

var noSpaces = 'the gray fox'.replace(/\s/g, '')
noSpaces
=> "thegrayfox"
var reversed = noSpaces.split('').reverse().join('')

noSpaces
=> "thegrayfox"
reversed
=> 'xofyargeht'
事实上,正如thg435所指出的,JavaScript reverse()方法在适当的位置更改了数组,但是数组只是临时的,所以它的更改(在本例中)无关紧要


注意:字符只是我在JavaScript中用于长度为1的字符串的一个花哨的词。

您所做的一件不同的事情是您将第一个变量初始化为什么。在Ruby中,初始化为从中删除空格的字符串。在JavaScript中,您将其初始化为从字符串中删除空格的字符数组

正确的JavaScript解决方案是:

var noSpaces = 'the gray fox'.replace(/\s/g, '')
noSpaces
=> "thegrayfox"
var reversed = noSpaces.split('').reverse().join('')

noSpaces
=> "thegrayfox"
reversed
=> 'xofyargeht'
事实上,正如thg435所指出的,JavaScript reverse()方法在适当的位置更改了数组,但是数组只是临时的,所以它的更改(在本例中)无关紧要


注意:字符只是我在JavaScript中用于长度为1的字符串的一个花哨的词。

Ahh,这更有意义。(:我想我已经习惯了Ruby在大多数普通方法中使用单独的bang方法。^^^感谢大家的提醒和简单的解决方法!:DAlso,感谢mutator方法的列表!已经给出了绿色检查。啊,这更有意义。(:我想我已经习惯了Ruby在大多数普通方法中使用单独的bang方法。^^^感谢大家的提醒和简单的解决方法!:DAlso,感谢mutator方法的列表!已经给出了绿色检查。听起来像是一个计划。c:我想我已经习惯了Ruby中有函数和bang对应项(反向和反向!)很高兴知道我必须保持警惕,注意哪些是可变的,哪些不是!听起来像是一个计划。c:我想我已经习惯了Ruby,那里有函数和对应的对象(反向和反向!)。很高兴知道我必须保持警惕,并注意哪些是可变的,哪些不是!感谢解决方案!我首先将其移动到数组的唯一原因是,您不能对Ruby中的字符串调用reverse。^^如果我知道它是可变函数,我可能会有不同的想法。:O您提供的似乎确实是更符合逻辑的是,即使reverse不是一个可变函数。^^但是仍然执行相同的操作。区别在于第一个变量指向什么。是的,我明白你的意思。这是一个细微的区别,但在这种情况下非常重要!感谢解决方案!这是我将其移动到数组fir的唯一原因st是因为在Ruby中不能对字符串调用reverse。^^如果我知道它是一个可变函数,我可能会有不同的想法。:O尽管reverse不是一个可变函数,但您提供的似乎更符合逻辑。^^仍然执行相同的操作。区别在于您的第一个变量点是什么是的,我明白你的意思。这是一个微妙的区别,但在这种情况下,这是非常重要的一点!