Cho đoạn code sau. Kết quả là:
const ar = [5, 1, 3, 7, 25];
const ar1 = ar;
console.log(ar1.sort());
([5, 25].indexOf(ar[1]) != -1 &&
console.log(ar.reverse())) ||
(ar[3] == 25 && console.log(ar));
console.log(ar1);
Hãy suy nghĩ và trả lời câu hỏi trước khi xem đáp án
Lời giải:
Báo saiconst ar1 = ar có nghĩa ar1 và ar cùng tham chiếu đến một array trong bộ nhớ. ar1.sort() sẽ sắp xếp chính nó và ar1 cũng sẽ thay đổi theo.
Bạn nên nhớ hàm sort của array sẽ chuyển đổi các phần tử sang string trước khi sắp xếp chúng theo alphabet, vậy dòng console.log đầu tiên là [1, 25, 3, 5, 7].
Tiếp theo [5, 25].indexOf(ar[1]) != -1 trả về true nên (ar.reverse()) sẽ được gọi. ar.reverse() sẽ sắp xếp arr theo chiều ngược lại, ar bây giờ sẽ là [7, 5, 3, 25, 1], và được in ra ở console.log thứ hai.
console.log không trả về giá trị nào nên ta có thể viết lại như sau:
undefined || (ar[3] == 25 && console.log(ar));
undefined là falsy, nên ar[3] == 25 được gọi và kết quả là true vì phần tử thứ 3 của ar giờ là 25, tiếp theo thì console.log(ar) thứ ba được in ra với kết quả là [7, 5, 3, 25, 1].
Cuối cùng vì ar1 và ar cùng tham chiếu đến một array nên dòng console.log(ar1); thứ tư cũng sẽ in ra ([7, 5, 3, 25, 1]).