Discuss / JavaScript / 新人求指教

新人求指教

Topic source

董小姐cv

#1 Created at ... [Delete] [Delete and Lock User]

大佬为啥这个比较会返回false?

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; var aCopy = arr.slice(); aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G'] aCopy === arr; // false

哪位大神解答一下不胜感激

芝草晟林

#2 Created at ... [Delete] [Delete and Lock User]

好像.slice()实现的是深拷贝

董小姐cv

#3 Created at ... [Delete] [Delete and Lock User]

也就是说这个复制完了之后数据类型不一样了是吗?

是浅拷贝吧,内存地址不同自然不同

饽饽灬

#5 Created at ... [Delete] [Delete and Lock User]

因为两数组无法进行直接比较。如需比较,需要两数组同时进行toString,之后比较才能返回true。

因为数组是Object对象,对象之间的比较实际上就是对比内存地址 我帮你改了一下 var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; var aCopy = arr; console.log(arr === aCopy); 你在对比试一下就是ture了

console-log

#7 Created at ... [Delete] [Delete and Lock User]

内存地址不同,所以返回false,还是不明白的话,可以去了解下关于堆栈的东西

莫绯的M

#8 Created at ... [Delete] [Delete and Lock User]

slice浅拷贝返回了一个新的数组,开辟了一个新的内存空间,两个肯定不想等啊

两个数组不能比较是不是相等,可以转化成字符串之后再比较 可以考虑用toString()方法

hiochou

#10 Created at ... [Delete] [Delete and Lock User]

arr.sort(); console.log('欢迎' + arr[0] + ', ' + arr[1] + ', ' + arr[2] + '和' + arr[3] + '同学!'); console.log(欢迎${arr[0]}, ${arr[1]}, ${arr[2]}和${arr[3]}同学!);


  • 1
  • 2

Reply