Tôi đã nhầm lẫn bản thân mình một chút với một thử nghiệm suy nghĩ và bây giờ tôi đang tìm một số lời khuyên. Giới thiệu về các tham chiếu ECMAscript và phương pháp Array.prototype.indexOf()
.Làm thế nào để indexOf của Javascript() giải quyết tham chiếu
Cho phép bắt đầu dễ dàng:
var container = [ ];
// more code
container.push(5);
container.push(7);
container.push(10);
Vì vậy, bây giờ chúng tôi đã đẩy một số "giá trị nguyên thủy" vào mảng ECMAScript của chúng tôi (đã hoặc chưa tuyên bố đó là sự thật, tôi sẽ trở lại cho), tại ít nhất tôi tưởng tượng nó như thế này cho đến nay. Một cuộc gọi đến
container.indexOf(7);
sẽ trả lại 1
như mong đợi. Câu hỏi lớn tôi đang có là, nếu .indexOf()
thực sự so sánh giá trị nguyên thủy hoặc nếu trong thực tế, đối tượng Number()
được tạo + được lưu trữ và tham chiếu của nó được so sánh. Điều này trở nên một chút rõ ràng hơn nếu chúng ta lại viết rằng như vậy:
var a = 5,
b = 7,
c = 10;
var container = [ ];
container.push(a);
container.push(b);
container.push(c);
container.indexOf(b);
Cho đến thời điểm này, người ta có thể vẫn dễ dàng cho rằng tất cả .indexOf()
cần phải làm là để so sánh giá trị, nhưng bây giờ cho phép xem xét một cái gì đó như thế này:
var a = { name: 'a', value: 5 },
b = { name: 'b', value: 10 },
c = { name: 'c', value: 15 };
var container = [ ];
// more code
container.push(a);
container.push(b);
container.push(c);
Ở đây, chúng ta điền rằng mảng container với đối tượng tài liệu tham khảo và vẫn còn, .indexOf()
công trình như mong đợi
container.indexOf(b) // === 1
trong khi một cuộc gọi như thế này
container.indexOf({ name: 'b', value: 10 });
rõ ràng trả -1
vì chúng ta đang tạo ra một đối tượng mới và có được một tham chiếu mới. Vì vậy, ở đây nó phải so sánh nội bộ tài liệu tham khảo với nhau, phải không?
Có thể một số thiên tài spec ECMAscript xác nhận rằng hoặc thậm chí tốt hơn liên kết tôi một số tài liệu về điều đó?
Một câu hỏi bên về vấn đề này sẽ là nếu có bất kỳ có thể cách để truy cập vào một lưu trữ nội bộ đối tượng tham chiếu trong một lexicalEnvironment tương ứng Hoạt Object.
Nếu đây làm việc bất cứ nơi nào tương tự như các ngôn ngữ khác, sau đó 'indexOf' hoạt động trên băm đối tượng mà đối tượng thường có giá trị khác nhau và các đối tượng nguyên thủy thường có một băm liên tục dựa trên giá trị của chúng (đối với các số nguyên, điều này thường chỉ là giá trị số nguyên). Vì vậy, hai đối tượng int '5' và' 5' đều có hàm băm '5' và như vậy là“ giống nhau ”. – poke
Tôi bắt đầu viết một câu trả lời, nhưng sau đó nó trở thành một bài đăng trên blog vì vậy tôi đã dừng lại và không được khuyến khích viết lại nó. Nhưng nếu bạn quan tâm: http://pastie.org/4828933 – Zirak