2015-11-07 31 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(' ')之間的差異。第一個在每個角色之間進行拆分,而第二個角色在空間角色進行拆分。