2016-08-31 22 views
15

Có bất kỳ nhà điều hành trong các nguyên cảo được sử dụng similer để Elvis Operator của angular2, tôi muốn nói hãy supppose tôi có để có được chìa khóa từ đối tượng như thế này:Thay Elvis điều hành của Angular2 trong nguyên cảo

this.myForm.name.first_name 

và trong trường hợp first_name does't tồn tại vì vậy nó sẽ ném lỗi first_name of undefined,

yes i có thể Handel lỗi này bằng Ternary operator của nguyên cảo như thế này

this.myForm.name ? this.myForm.name.first_name : '' 

nhưng đôi khi phím đang nhận được quá lâu,

như vậy là có bất kỳ nhà điều hành như Elvis Operator của angular2 trong nguyên cảo để tôi có thể sử dụng như thế này

this.myForm?.name?.first_name 
+2

downvote tại sao? đây có phải là câu hỏi không hợp lệ không? –

+2

Bạn đang đề cập đến [toán tử điều hướng an toàn (?.)] (Https://en.wikipedia.org/wiki/Safe_navigation_operator). [Toán tử Elvis (?:)] (Https://en.wikipedia.org/wiki/Elvis_operator) là một thuật toán thứ cấp để đánh giá ngầm định toán hạng nhất nếu đúng. –

Trả lời

21

Không có hành elvis trong nguyên cảo và, theo như tôi biết, không có gì so sánh được.

Để tham khảo, hãy xem yêu cầu tính năng tại Suggestion: "safe navigation operator", i.e. x?.y. explanation for not implementing it là những điều sau (theo ý kiến ​​của tôi, là một lý do hợp lệ):

Đóng này ngay bây giờ. Vì thực sự không có bất cứ điều gì cụ thể về TypeScript có thể yêu cầu ở cấp độ biểu thức, loại thay đổi nhà điều hành lớn này sẽ xảy ra tại ủy ban ES spec chứ không phải ở đây. Các cuộc tổng hợp chung để đánh giá lại điều này sẽ là một đề xuất ES cụ thể đạt tới giai đoạn tiếp theo, hoặc sự đồng thuận chung của ủy ban ES rằng tính năng này sẽ không xảy ra trong một thời gian dài (để chúng ta có thể định nghĩa ngữ nghĩa và được hợp lý chắc chắn rằng họ sẽ "giành chiến thắng").

Alternatives để ký hiệu đó sẽ là sử dụng logic và nhà điều hành, try/catch hoặc một hàm helper như getSafe(() => this.myForm.name.first_name) như mô tả trong this post.


Cập nhật tháng 7 2017: Như JGFMK chỉ ra trong các ý kiến, có một đề nghị ECMAScript gọi Optional Chaining for JavaScript. Nếu/khi đề xuất đạt đến Giai đoạn 4, đề xuất đó sẽ được thêm vào đặc tả ngôn ngữ.

+0

cảm ơn cho câu trả lời của bạn, là có bất kỳ thay thế cho điều này ngoài các nhà điều hành ternary? –

+0

@PardeepJain Những gì bạn có thể làm là gán các đối tượng rỗng khi các thuộc tính nhất định không được xác định: 'this.myForm.name = this.myForm.name || {} '. Sau đó, bạn có thể chắc chắn rằng 'tên' được định nghĩa. Một cách khác là xác định cấu trúc dữ liệu mặc định và sau đó ghi đè lên nó bằng dữ liệu thực tế của bạn bằng cách sử dụng ['Object.assign'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ Đối tượng/chỉ định). – str

+0

hmm cũng có thể, cảm ơn :) –

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