Trên mọi trang web nói về VBScript, toán tử '&
' được liệt kê là toán tử nối chuỗi. Tuy nhiên, trong một số mã mà tôi đã thừa hưởng gần đây, tôi thấy toán tử '+
' đang được sử dụng và tôi không thấy bất kỳ lỗi nào do việc này. Đây có phải là phương án được chấp nhận không?Sự khác biệt giữa + và toán tử của VBScript là gì?
Trả lời
Toán tử + bị quá tải, trong khi toán tử & thì không. Toán tử & chỉ thực hiện nối chuỗi. Trong một số vòng tròn, toán tử & được sử dụng như một phương pháp hay nhất vì nó rõ ràng và do đó không thể có bất kỳ hiệu ứng ngoài ý muốn nào do việc quá tải.
+
nhà điều hành có thể phản tác dụng khi chuỗi có thể được hiểu là số. Nếu bạn không muốn bất ngờ khó chịu sử dụng & để nối chuỗi.
Toán tử &
thực hiện chuỗi nối, nghĩa là buộc các toán hạng được chuyển thành chuỗi (như gọi số CStr
trên chúng trước). +
, đến lượt nó, thêm lực nếu một trong các biểu thức là số. Ví dụ:
1 & 2
mang đến cho bạn 12
, trong khi
1 + 2
"1" + 2
1 + "2"
cung cấp cho bạn 3
.
Vì vậy, bạn nên sử dụng &
để ghép chuỗi vì nó giúp loại bỏ sự mơ hồ.
+1 để chỉ định số chuỗi + số. Câu trả lời được chấp nhận không đề cập đến các chuỗi số chuyển đổi vbscript thành số. – baacke
Trong một số trường hợp, + sẽ ném một ngoại lệ; ví dụ như sau:
Sub SimpleObject_FloatPropertyChanging(fvalue, cancel)
'fvalue is a floating point number
MsgBox "Received Event: " + fvalue
End Sub
Bạn sẽ nhận được một ngoại lệ khi nguồn đối tượng COM bắn sự kiện - bạn phải làm một trong hai điều sau đây:
MsgBox "Received Event: " & fvalue
hoặc
MsgBox "Received Event: " + CStr(fvalue)
Nó có thể là tốt nhất trong cả hai trường hợp để sử dụng CStr(value)
; nhưng sử dụng & cho mỗi bình luận ở trên cho chuỗi nối là hầu như luôn luôn thực hành tốt nhất.
- 1. Sự khác biệt giữa heuristic và thuật toán là gì?
- 2. Sự khác biệt giữa isEqualToString và toán tử == trong Mục tiêu C là gì?
- 3. Sự khác biệt giữa <> và! = Toán tử trong MySQL là gì?
- 4. Sự khác biệt giữa & và && trong MATLAB là gì?
- 5. Sự khác biệt giữa '&' và ',' trong Generics Java là gì?
- 6. Sự khác biệt giữa chẩn đoán và metaheuristics là gì?
- 7. sự khác biệt giữa ngSwitch và ngInclude là gì?
- 8. Sự khác biệt giữa nguyên tử trong Lisp thường và nguyên tử trong Clojure là gì?
- 9. Sự khác nhau giữa toán tử dấu chấm (.) Và -> trong C++ là gì?
- 10. Sự khác nhau giữa "||" là gì toán tử và hàm concat trong Oracle?
- 11. Trong Actionscript 3, sự khác nhau giữa toán tử "in" và phương thức "hasOwnProperty" là gì?
- 12. Sự khác biệt giữa VB.NET và các phiên bản trước của VB là gì?
- 13. Sự khác biệt của toán tử điều kiện giữa C và C++
- 14. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 15. Sự khác biệt giữa Tên và CanonicalName là gì?
- 16. là gì sự khác biệt giữa SQL_Latin1_General_CP1_CI_AS và SQL_Latin1_General_CP1_CI_AI
- 17. Sự khác biệt giữa đúc và co giật là gì?
- 18. Sự khác biệt giữa GetHostEntry và GetHostByName là gì?
- 19. Sự khác biệt giữa gói android.opengl và javax.microedition.khronos.opengles là gì?
- 20. Sự khác biệt giữa DBI và DBD là gì?
- 21. Sự khác biệt giữa "gọi" và "gọi" là gì?
- 22. Sự khác biệt giữa exit() và abort() là gì?
- 23. sự khác biệt giữa những gì là [[], []] và [[]] * 2
- 24. SQLAlchemy: Sự khác biệt giữa flush() và commit() là gì?
- 25. Sự khác biệt giữa ".equals" và "==" là gì?
- 26. Sự khác biệt giữa Raphael và gRaphael là gì?
- 27. Sự khác biệt giữa nghỉ và thoát là gì?
- 28. Sự khác biệt giữa "new A()" và "A.newInstance()" là gì?
- 29. Sự khác biệt giữa ascx và .cshtml là gì?
- 30. Sự khác biệt giữa dispatch_get_global_queue và dispatch_queue_create là gì?
* 'Toán tử + bị quá tải' * - * quá tải * theo nghĩa nào? – Wolf
@wolf trong VB toán tử + có thể thực hiện cả phép cộng và nối, phụ thuộc vào ngữ cảnh. –
Vâng, tôi đã đọc điều này. Tôi thấy từ * quá tải * chính nó quá tải đến nỗi tôi ước, câu trả lời có thể chính xác hơn một chút vào thời điểm này. – Wolf