繁体   English   中英

Javascript设置一个变量等于另一个变量

[英]Javascript Setting a variable equal to another variable

我最近开始学习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的一个奇怪问题?

reverse是一种变异方法,因此其红宝石等效性将是reverse! reverse 要保留原始数组,您必须首先克隆它:

> 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"]

这是MDN上列出的所有数组更改器方法:

* pop()
* push()
* reverse()
* shift()
* sort()
* splice()
* unshift()

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

MDN是一个非常好的资源:

reverse方法将调用数组对象的元素转置到位,对数组进行突变,并返回对该数组的引用。

您需要阅读文档,并确保您了解它们如何工作。

您所做的另一件事是将第一个变量初始化为的内容。 在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的字符串的一个花哨的单词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM