Hướng dẫn check parameter javascript - kiểm tra tham số javascript
Bây giờ tôi đã thấy 2 phương thức để xác định xem một đối số đã được chuyển đến hàm JavaScript. Tôi đang tự hỏi nếu một phương pháp tốt hơn phương pháp khác hay nếu cái này chỉ là xấu để sử dụng?
Hoặc
Theo như tôi có thể nói, cả hai đều dẫn đến cùng một thứ, nhưng tôi chỉ sử dụng cái đầu tiên trước đây trong sản xuất. Một lựa chọn khác như đã đề cập bởi Tom:
Theo nhận xét của Juan, sẽ tốt hơn nếu thay đổi đề xuất của Tom thành:
Đã hỏi ngày 4 tháng 1 năm 2009 lúc 17:38Jan 4, 2009 at 17:38
Darryl Heindarryl HeinDarryl Hein Phù vàng 140K89 Huy hiệu vàng213 Huy hiệu đồng89 gold badges213 silver badges259 bronze badges 5 Có một số cách khác nhau để kiểm tra xem một đối số đã được truyền đến một hàm. Ngoài hai bạn đã đề cập trong câu hỏi (bản gốc) của mình - kiểm tra 7 hoặc sử dụng toán tử 8 để cung cấp các giá trị mặc định - người ta cũng có thể kiểm tra rõ ràng các đối số cho 9 qua 0 hoặc 1 nếu một người bị hoang tưởng (xem nhận xét).Sử dụng toán tử 8 đã trở thành thông lệ tiêu chuẩn - tất cả những đứa trẻ tuyệt vời làm điều đó - nhưng hãy cẩn thận: giá trị mặc định sẽ được kích hoạt nếu đối số đánh giá là 3, có nghĩa là nó thực sự có thể là 9, 5, 3, 7, 8 Bất cứ điều gì khác mà 9 trả về 3).Vì vậy, câu hỏi là khi nào nên sử dụng kiểm tra nào, vì tất cả đều mang lại kết quả hơi khác nhau. Kiểm tra 7 thể hiện hành vi 'chính xác' nhất, nhưng có thể không khả thi nếu có nhiều hơn một đối số tùy chọn.Bài kiểm tra cho 9 là 'tốt nhất' tiếp theo - chỉ 'không thành công' nếu hàm được gọi rõ ràng với giá trị 9, trong tất cả các khả năng sẽ được đối xử giống như việc bỏ qua đối số.Việc sử dụng toán tử 8 có thể kích hoạt việc sử dụng giá trị mặc định ngay cả khi một đối số hợp lệ được cung cấp. Mặt khác, hành vi của nó thực sự có thể được mong muốn.Tóm lại: Chỉ sử dụng nó nếu bạn biết bạn đang làm gì! Theo tôi, sử dụng 8 cũng là cách để đi nếu có nhiều đối số tùy chọn và người ta không muốn truyền một đối tượng theo nghĩa đen như một cách giải quyết cho các tham số được đặt tên.Một cách hay khác để cung cấp các giá trị mặc định bằng cách sử dụng 7 bằng cách rơi qua nhãn của câu lệnh chuyển đổi:
Điều này có nhược điểm là ý định của lập trình viên không rõ ràng (trực quan) và sử dụng 'số ma thuật'; Do đó, nó có thể dễ bị lỗi. Đã trả lời ngày 4 tháng 1 năm 2009 lúc 17:46Jan 4, 2009 at 17:46
ChristophchristophChristoph 161K36 Huy hiệu vàng177 Huy hiệu bạc235 Huy hiệu Đồng36 gold badges177 silver badges235 bronze badges 13 Nếu bạn đang sử dụng jQuery, một tùy chọn tốt đẹp (đặc biệt là đối với các tình huống phức tạp) là sử dụng phương pháp mở rộng của JQuery.
Nếu bạn gọi chức năng thì như thế này:
Biến tùy chọn sau đó sẽ là:
Đã trả lời ngày 30 tháng 4 năm 2013 lúc 18:16Apr 30, 2013 at 18:16
Đây là một trong số ít trường hợp tôi tìm thấy bài kiểm tra:
Hoạt động khá độc đáo và mang theo hàm ý chính xác. .really confusing.) EDIT: Đây là một ví dụ thực sự tốt về sự khác biệt về phong cách giữa các ngôn ngữ được xyt một cách lỏng lẻo và gõ mạnh; và một lựa chọn phong cách mà JavaScript có trong các thuổng. Sở thích cá nhân của tôi (không có lời chỉ trích dành cho các sở thích khác) là chủ nghĩa tối giản. Mã càng ít nói, miễn là tôi kiên định và súc tích, càng ít người khác phải hiểu để suy luận chính xác ý nghĩa của tôi. Một hàm ý của sở thích đó là tôi không muốn - không thấy nó hữu ích để - chồng chất một loạt các bài kiểm tra phụ thuộc loại. Thay vào đó, tôi cố gắng làm cho mã có nghĩa là những gì nó trông giống như nó có nghĩa là; Và chỉ kiểm tra cho những gì tôi thực sự sẽ cần phải kiểm tra. Một trong những tình trạng tăng nặng mà tôi tìm thấy trong một số mã của một số người khác là cần phải tìm hiểu xem họ có mong đợi, trong bối cảnh lớn hơn, để thực sự gặp phải các trường hợp họ đang thử nghiệm. Hoặc nếu họ đang cố gắng kiểm tra mọi thứ có thể, thì có khả năng họ không lường trước được bối cảnh hoàn toàn đủ. Điều đó có nghĩa là cuối cùng tôi cần phải theo dõi chúng hoàn toàn theo cả hai hướng trước khi tôi có thể tự tin tái cấu trúc hoặc sửa đổi bất cứ điều gì. Tôi cho rằng có một cơ hội tốt họ có thể đã đưa ra các thử nghiệm khác nhau vì họ thấy trước hoàn cảnh mà chúng sẽ cần thiết (và thường không rõ ràng với tôi). . Tôi đã thấy điều này một cách quyến rũ nhất trong việc so sánh mã ActionScript 3 toàn diện với mã JavaScript thanh lịch. AS3 có thể gấp 3 hoặc 4 lần phần lớn JS và độ tin cậy mà tôi nghi ngờ ít nhất là không tốt hơn, chỉ vì số (3-4x) của các quyết định mã hóa đã được đưa ra. Như bạn nói, Shog9, YMMV. : D
Đã trả lời ngày 4 tháng 1 năm 2009 lúc 17:53Jan 4, 2009 at 17:53
Dkretzdkretzdkretz 37.1K13 Huy hiệu vàng79 Huy hiệu bạc136 Huy hiệu đồng13 gold badges79 silver badges136 bronze badges 7 Trong ES6 (ES2015), bạn có thể sử dụng các tham số mặc định
Đã trả lời ngày 23 tháng 7 năm 2017 lúc 22:14Jul 23, 2017 at 22:14
andriy2andriy2andriy2 1211 huy hiệu bạc6 Huy hiệu đồng1 silver badge6 bronze badges 3 0
Paul Rooney 20K9 Huy hiệu vàng41 Huy hiệu bạc61 Huy hiệu Đồng9 gold badges41 silver badges61 bronze badges Đã trả lời ngày 21 tháng 8 năm 2012 lúc 9:51Aug 21, 2012 at 9:51
YasenyasenYasen 3.3101 Huy hiệu vàng26 Huy hiệu bạc22 Huy hiệu đồng1 gold badge26 silver badges22 bronze badges 2 Có sự khác biệt đáng kể. Hãy thiết lập một số trường hợp kiểm tra: 1Với phương pháp đầu tiên bạn mô tả, chỉ thử nghiệm thứ hai sẽ sử dụng giá trị mặc định. Phương pháp thứ hai sẽ mặc định tất cả trừ phương pháp thứ nhất (vì JS sẽ chuyển đổi 9, 5, 7 và 1 thành boolean 3. Và nếu bạn sử dụng phương pháp của Tom, chỉ có thử nghiệm thứ tư sẽ sử dụng mặc định!Phương pháp nào bạn chọn thực sự phụ thuộc vào hành vi dự định của bạn. Nếu các giá trị khác với 9 được cho phép đối với 7, thì có lẽ bạn sẽ muốn một số biến thể đầu tiên; Nếu một giá trị khác không, không null, không trống được mong muốn, thì phương pháp thứ hai là lý tưởng-thực sự, nó thường được sử dụng để nhanh chóng loại bỏ một loạt các giá trị như vậy khỏi xem xét.Đã trả lời ngày 4 tháng 1 năm 2009 lúc 17:57Jan 4, 2009 at 17:57
Shog9Shog9Shog9 154K34 Huy hiệu vàng227 Huy hiệu bạc232 Huy hiệu Đồng34 gold badges227 silver badges232 bronze badges Tôi xin lỗi, tôi vẫn không thể bình luận, vì vậy để trả lời câu trả lời của Tom ... trong JavaScript (không xác định! = Null) == Sai trong thực tế rằng chức năng sẽ không hoạt động với "null", bạn nên sử dụng "không xác định" Đã trả lời ngày 4 tháng 1 năm 2009 lúc 17:48Jan 4, 2009 at 17:48
Luca Matteisluca MatteisLuca Matteis 29K19 Huy hiệu vàng113 Huy hiệu bạc166 Huy hiệu Đồng19 gold badges113 silver badges166 bronze badges 1 Tại sao không sử dụng toán tử 5? Toán tử này, được đặt trước biến, biến nó thành boolean (nếu tôi hiểu rõ), vì vậy 6 và 7 (và thậm chí 8, có thể khá thú vị) sẽ trở lại 3.Đây là một ví dụ: 2Đã trả lời ngày 30 tháng 12 năm 2015 lúc 13:01Dec 30, 2015 at 13:01
RallionrlrallionrlRallionRl 2.1032 huy hiệu vàng9 Huy hiệu bạc9 Huy hiệu đồng2 gold badges9 silver badges9 bronze badges 1 Đôi khi bạn muốn không xác định như một đối số có thể nhưng bạn vẫn có những tình huống mà đối số có thể không được thông qua. Trong trường hợp đó, bạn có thể sử dụng 7 để kiểm tra xem có bao nhiêu đối số được thông qua. 3 1 -> vượt qua, chúng tôi không muốn ID trống 2 -> vượt qua, chúng tôi muốn ID không được xác định 3 -> Lỗi, chúng tôi muốn ID không được xác địnhĐã trả lời ngày 30 tháng 8 năm 2021 lúc 12:16Aug 30, 2021 at 12:16
GilbertgilbertGilbert 1.96720 Huy hiệu bạc24 Huy hiệu đồng20 silver badges24 bronze badges Có thể thuận tiện để tiếp cận phát hiện đối số bằng cách gợi lên chức năng của bạn với một đối tượng của các thuộc tính tùy chọn: 4Đã trả lời ngày 5 tháng 3 năm 2013 lúc 2:22Mar 5, 2013 at 2:22
1nfiniti1nfiniti1nfiniti 2.00414 Huy hiệu bạc19 Huy hiệu đồng14 silver badges19 bronze badges Một số lần bạn cũng có thể muốn kiểm tra loại, đặc biệt nếu bạn đang sử dụng chức năng như getter và setter. Mã sau là ES6 (sẽ không chạy trong Ecmascript 5 trở lên): 5Đã trả lời ngày 18 tháng 5 năm 2016 lúc 19:06May 18, 2016 at 19:06
nbloqsnbloqsnbloqs 3.1121 Huy hiệu vàng26 Huy hiệu bạc47 Huy hiệu đồng1 gold badge26 silver badges47 bronze badges 6Bởi vì các mảng kế thừa từ 4. Hãy xem xét ⇑ để làm cho thế giới tốt hơn.Đã trả lời ngày 2 tháng 1 năm 2020 lúc 3:13Jan 2, 2020 at 3:13 fncalledFunction (param1, param2, window.youroptionalparameter) Nếu chức năng trên được gọi từ nhiều nơi và bạn chắc chắn 2 tham số đầu tiên được truyền từ mọi nơi nhưng không chắc chắn về tham số thứ 3 thì bạn có thể sử dụng cửa sổ. window.param3 sẽ xử lý nếu nó không được xác định từ phương thức người gọi. Đã trả lời ngày 28 tháng 6 năm 2018 lúc 5:56Jun 28, 2018 at 5:56
|