你可能不知道的JS函式

2021-10-16 19:35:13 字數 1349 閱讀 3656

日常業務寫的太多已經麻痺了神經,很多本該知道的知識早已拋之腦後,大家都知道在js中函式是一等公民,但是竟然連它的特性都不清楚,真是慚愧。

在日常業務開發中,通常都會在資料中給乙個預設值,然後在請求後端資料後替換掉預設值,如果完全替換整個物件肯能並不是我們想要的,也可能會出現一些為止的錯誤,又或者需要對一些資料做修改,這個時候就需要我們寫乙個函式去替換每個key對應的value,就在昨天我也遇到了同樣的事情,廢話就不多說了,直接上**。

// form1為原始資料

// form2為後端返回資料

const

mapform

=(form1, form2)

=>}}

const form1 =

const form2 =

mapform

(form1, form2)

console.

log(form1)

//

上面**很明顯可以看出在呼叫mapform函式後form1的值已經和form2完全一致,其實這也正是我想要看到的,只是當時比較疑惑,因為之前並不知道js中函式如果傳遞複雜型別的話,形式引數和實際引數存在弱引用,所以這會導致form1的資料改變。

如果在你的**中也存在類似的情況,並且你不希望form1的物件改變,有個比較方便的辦法就是直接使用json.parse(json.stringify(obj)的方式處理,**修改如下:

...

- mapform(form1, form2)

+ mapform(json.parse(json.stringify(form1), form2)

console.log(form1) //

因為直接使用json.parse(json.stringify(obj)的方式並不安全,某些資料型別並不會如願,所以可以嘗試使用lodash庫提供的clonedeep函式,方式如下:

const objects =[,

]const deep = _.

clonedeep

(objects)

console.

log(deep[0]

=== objects[0]

)// false

如果覺得這篇文章對你有幫助,幫忙點個關注,謝謝,後續會陸續更新文章。

你可能不知道的東西

元素可以分為塊級元素,行內元素以及行內塊級元素。行內元素的margin或者padding只有margin left和margin right以及padding left和padding right有效果,margin top margin bottom padding top padding bot...

你可能不知道的const

眾所周知,使用 const 宣告的變數必須同時初始化為某個值。一經宣告,在其生命週期的任何時候都不能再重新賦予新值 const a syntaxerror 常量宣告時沒有初始化 const b 3 console.log b 3 b 4 typeerror 給常量賦值const 宣告只應用到頂級原語...

你可能不知道的python logging機制

先來看幾個例子,先想一下執行結果,答案稍後揭曉 例一 mylogger logging.getlogger mylogger mylogger.info mylogger info mylogger.warning mylogger warning 例二 mylogger logging.getlo...