簡體   English   中英

從 object 獲取值時,unshift() 是否會更改源 object?

[英]When taking values from an object, does unshift() change the source object?

當我設置以下代碼的基本情況時,引發了這個問題:

function withoutReverse(str, arrayFor = []){
    arrayFor.unshift(str[0]);
    if (str.length === 1) 
    return arrayFor.join("");
    else return withoutReverse(str.slice(1), arrayFor)  }

  let hola = "hello";  
  withoutReverse(hola);//-->olleh

我認為基數應該是str.length === 0 ,因為我假設 unshift 從字面上將源 object 中的每個元素放入arrayFor 然后,我意識到這就是我使用slice的目的。

我在 mdn 中沒有找到確鑿的信息。 我對嗎? unshift()並沒有真正采用這些值(當存儲在對象中時)? 如果是這樣,在 memory 中是如何處理的?

謝謝

當您接到第 5 個電話時:

console.log(str) // "o"
arrayFor.unshift(str[0]); // str[0] === "o" 
console.log(str.length) // "1" because accessing the property here does not change it.

因此,您的退出條件現在為真。

對於 JS 中的函數:

  • 數字/字符串/布爾值作為值傳遞
  • 數組/對象作為引用傳遞

關於字符串的額外信息:

與某些編程語言(例如 C)不同,JavaScript 字符串是不可變的。 這意味着一旦創建了字符串,就無法修改它。

來源 MDN

return 'cat'[1] // 返回 "a"

當使用括號表示法進行字符訪問時,嘗試刪除這些屬性或為這些屬性賦值將不會成功。 所涉及的屬性既不可寫也不可配置。 (有關詳細信息,請參閱 Object.defineProperty()。)

來源 MDN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM