azl397985856 / fe-interview

宇宙最强的前端面试指南 (https://lucifer.ren/fe-interview)
Apache License 2.0
2.84k stars 260 forks source link

【每日一题】- 2019-12-25 - 以下两段代码有什么不同? #88

Closed azl397985856 closed 4 years ago

azl397985856 commented 4 years ago
  1. 代码片段1
list.slice().sort(sortFunc)
  1. 代码片段2
list.sort(sortFunc)
yunlovebo commented 4 years ago
  1. 排序的是list的副本,list本身不变
  2. 排序的是list本身
MayRain1999 commented 4 years ago

slice 不会修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。原数组的元素会按照下述规则拷贝:

azl397985856 commented 4 years ago

slice 不会修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。原数组的元素会按照下述规则拷贝:

  • 如果该元素是个对象引用 (不是实际的对象),slice 会拷贝这个对象引用到新的数组里。两个对象引用都引用了同一个对象。如果被引用的对象发生改变,则新的和原来的数组中的这个元素也会发生改变。
  • 对于字符串、数字及布尔值来说(不是 StringNumber或者 Boolean 对象),slice 会拷贝这些值到新的数组里。在别的数组里修改这些字符串或数字或是布尔值,将不会影响另一个数组。
  • 如果向两个数组任一中添加了新元素,则另一个不会受到影响

非常详细。 简单来说就是slice是浅拷贝