我们作为JavaScript的开发人员,大家可以下挑战自己!如果你能完美的答对每一个问题那很强,但如果你答错了,并知道为什么答错了,我认为这可以更好的提升自己!希望这些题对大家有帮助!
问题1:数组排序比较
考虑以下数组。在不同的排序条件中会输出什么?
const arr1 = [‘a’, ‘b’, ‘c’];
const arr2 = [‘b’, ‘c’, ‘a’];
console.log(
arr1.sort() === arr1,
arr2.sort() == arr2,
arr1.sort() === arr2.sort()
);
答案: true, true, false
这里有几个概念在起作用。首先,数组 sort 方法对原始数组进行排序,并返回对该数组的引用。这意味着在编写 arr2.sort() 时,将对 arr2 数组对象进行排序。
事实证明,在比较对象时,数组的排序顺序并不重要。由于 arr1.sort() 和 arr1 指向内存中的同一对象,因此第一个相等测试返回 true。第二个比较也是如此:arr2.sort() 和 arr2 指向内存中的同一对象。
在第三个测试中,arr1.sort() 和 arr2.sort() 的排序顺序相同;但是,它们指向内存中的不同对象。因此,第三项测试的结果为 false。
问题2:set 一组对象
考虑下面的对象 Set 集合,它们散布到一个新的数组中。会输出什么?
const mySet = new Set([{ a: 1 }, { a: 1 }]);
const result = […mySet];
console.log(result);
答案:[{a: 1}, {a: 1}]。
尽管 Set 对象确实会删除重复项,但是尽管具有相同的键值对,但我们使用 Set 创建的两个值是对内存中不同对象的引用。这与 {a:1} === {a:1} 为 false 的原因相同。
应该注意的是,如果集合是使用对象变量创建的