Response to @Vishwas G (không phải là một bình luận bởi vì mã khối không được hỗ trợ trong ý kiến):
Như Daniel đã chỉ ra, nếu đối tượng "a" trong ví dụ của bạn không tồn tại ở nơi đầu tiên, nỗ lực của bạn để truy cập "b" trên "a" sẽ gây ra lỗi. Điều này xảy ra trong trường hợp bạn đang mong đợi một cấu trúc sâu, chẳng hạn như một đối tượng JSON có thể, ví dụ, có định dạng "content.social.avatar". Nếu "xã hội" không tồn tại, sau đó cố truy cập "content.social.avatar" sẽ gây ra lỗi.
Dưới đây là một ví dụ tổng hợp cụ thể của một sâu cấu trúc bài thi sở hữu tồn tại nơi cách tiếp cận "không xác định" có thể gây ra một lỗi trong trường hợp "hasOwnProperty()" cách tiếp cận không:
// Missing property "c". This is the "invalid data" case.
var test1:Object = { a:{b:"hello"}};
// Has property "c". This is the "valid data" case.
var test2:Object = { a:{b:{c:"world"}}};
Bây giờ các bài kiểm tra ...
// ** Error ** (Because "b" is a String, not a dynamic
// object, so ActionScript's type checker generates an error.)
trace(test1.a.b.c);
// Outputs: world
trace(test2.a.b.c);
// ** Error **. (Because although "b" exists, there's no "c" in "b".)
trace(test1.a && test1.a.b && test1.a.b.c);
// Outputs: world
trace(test2.a && test2.a.b && test2.a.b.c);
// Outputs: false. (Notice, no error here. Compare with the previous
// misguided existence-test attempt, which generated an error.)
trace(test1.hasOwnProperty("a") && test1.a.hasOwnProperty("b") && test1.a.b.hasOwnProperty("c"));
// Outputs: true
trace(test2.hasOwnProperty("a") && test2.a.hasOwnProperty("b") && test2.a.b.hasOwnProperty("c"));
Lưu ý rằng ngôn ngữ anh chị em của JavaScript của JavaScript sẽ không tạo ra lỗi trong ví dụ test1. Tuy nhiên, nếu bạn mở rộng hệ thống phân cấp đối tượng thêm một cấp, bạn cũng sẽ gặp phải các lỗi trong JavaScript:
// ** Error (even in JavaScript) ** because "c" doesn't even exist, so
// test1.a.b.c.d becomes an attempt to access a property on undefined,
// which always yields an error.
alert(test1.a.b.c.d)
// JavaScript: Uncaught TypeError: Cannot read property 'd' of undefined
Nguồn
2015-12-06 19:41:31
điều này có thể gây ra lỗi nếu nó không tồn tại ở nơi đầu tiên. bạn sẽ thấy lỗi nếu bạn đang tạo một đối tượng động như tìm kiếm ["b"] trong 'var a: Object = {a: '1'}' – Daniel
(Điều này không hoạt động) – Lego
var a; a = a {a: 1}; dấu vết (a ["b"]), kết quả đầu ra "không xác định", nhưng không tạo ra bất kỳ lỗi nào. Vì vậy, vấn đề khi sử dụng theo cách này? –