[英]Javascript setting a variable that is concatenated by a string and another variable
[英]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()
所有其他数组方法都是访问器。
您所做的另一件事是将第一个变量初始化为的内容。 在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.