2017-11-02 16 views
6

Trong JS, thực hiện truy cập đọc trên biến không khai báo cho phép ngoại lệ tham chiếu.Tại sao ngoại lệ tham chiếu không xuất hiện trong trường hợp thuộc tính không được khai báo?

tôi đã cố gắng mã sau:

var obj = { }; 
console.log(obj.v1); 

này in không xác định

console.log(v2); 

Trong khi điều này ném ngoại lệ.

Lý do cho hành vi khác nhau là gì? Tôi đã mong đợi ngoại lệ trong cả hai trường hợp vì cả phiên bản v1 và v2 đều không được khai báo.

EDIT: Khó hiểu hơn là thực tế là nếu v2 được khai báo trong phạm vi toàn cục, nó sẽ trở thành thuộc tính của đối tượng cửa sổ. Vì vậy, nó không trở thành tương tự như trường hợp mà tôi đang truy cập một tài sản không khai báo của đối tượng cửa sổ? Giống như trường hợp 1?

Trả lời

1
var obj = { }; 

console.log(obj.v1); 

obj được xác định nhưng thuộc tính v1 không tồn tại, do đó, đầu ra undefined.


console.log(v2); 

v2 không được khai báo như vậy, đầu ra như Uncaught ReferenceError: ...


cho window.v2 ra là undefined nhưng chỉ v2 đầu ra là: ReferenceError.

var foo = 1; 
// Explicit global/window variable (new variable) 

bar = 2; 
// Implicit global/window variable (property of default global object) 
+0

nhưng nếu v2 được khắc phục trong phạm vi toàn cầu, nó sẽ trở thành tài sản của đối tượng cửa sổ. Vì vậy, nó không trở thành tương tự như trường hợp mà tôi truy cập tài sản không khai báo của đối tượng cửa sổ? giống như trường hợp 1? – theLearner

+0

Nguyên nhân là thuộc tính mặc định của đối tượng 'global' hoặc' window'. –

+0

"nó sẽ trở thành tài sản của đối tượng cửa sổ" -> cho đầu ra 'window.v2' là' undefined' nhưng chỉ cho 'v2' là tham chiếuError. –

Các vấn đề liên quan