2015-11-07 99 views
2

嘿家伙我明白,以下将扭转传递给函数的字符串工作:语法JavaScript的反向功能

function reverseString(str) { 
 
return str.split('').reverse().join(''); 
 
    
 
} 
 

 
reverseString("hello");

但是有人可以帮助我了解为什么以下韩元”工作?

function reverseString(str) { 
 
    str.split(' '); 
 
    str.reverse(); 
 
    str.join(' '); 
 
    return str; 
 
    }

+0

str = str.split(''); str = ... – Hitmands

+0

请允许我挑选一些挑剔的东西,让你知道这段代码不起作用。 JavaScript是UTF-16,所以像'“Hi!”.split('')。reverse()。join('');'这样的东西不会给出预期的输出(如果你的字体没有支持:最后一个字是U + 1F601的表情符号,它被翻译成两个字符,需要正确的顺序才能工作)。所以如果你想使用它,你必须注意输入是受限制的,或者使用一个为它制作的数据包,例如:https://www.npmjs.com/package/esrever,这只是第一个谷歌吐出来的。 – deamentiaemundi

回答

3

这些功能不修改字符串;字符串是不可变的。这些函数返回新值。

因此,像

str.split(''); 

语句是一个有效的语句,但它没有实际效果,因为返回数组被忽略。在引用的第一个示例中,返回的值用作对象上下文,从中访问和调用后续函数。其中的return语句返回链中最后一个函数调用的结果(调用.join())。

1

尝试使用var,如果预期的结果是重新定义str,使用set str = /*new value */

function reverseString(str) { 
 
    var copy = str.split(""); 
 
    copy.reverse(); 
 
    str = copy.join(""); 
 
    return str; 
 
} 
 

 
console.log(reverseString("hello"))

1

首先,字符串是不可改变的,您可以创建新的必要的字符串,使用类似的方法第一个通过操作/调用方法返回值。

第一功能调用方法。意思是一个函数(仅用于对象/引用类型)的返回值来调用其方法来计算新结果。

str.split('').reverse().join(''); 

在此,分割返回阵列和阵列的反向方法逆转阵列(索引),最后加入方法加入与“”的数组元素作为分隔符的内容。

而在第二个函数它只是一个连续的语句调用。我想在str.join(' ');字符串原型中没有称作join的函数。

0

该方法调用被链接,以便每个方法使用前一个返回值。如果你保持的返回值,你可以做单独的声明相同,这样就可以在接下来的语句中使用它:

function reverseString(str) { 
 
    var arr = str.split(''); 
 
    arr = arr.reverse(); 
 
    var result = arr.join(''); 
 
    return result; 
 
} 
 

 
console.log(reverseString("hello"));

还要注意有split('')split(' ')之间的差异。第一个在每个角色之间进行拆分,而第二个角色在空间角色进行拆分。