Hướng dẫn javascript check parameter type - loại tham số kiểm tra javascript
Phương thức GetVartype (bên dưới) hoạt động cho hầu hết các biến. Kiểm tra fiddle này. Đầu tiên nó sử dụng loại rất nhanh cho các trường hợp kết quả đáng tin cậy. Sau đó, nó sử dụng một phương pháp ToString đắt tiền hơn cho các trường hợp khác. Cuối cùng, nếu nó đang xử lý một đối tượng được đặt tên (được trả về bởi Firefox cho các đối tượng như tài liệu.location), nó sẽ kiểm tra các đối tượng giống như mảng và báo cáo chúng dưới dạng mảng.getVarType method (below) works for almost all variables. Check out this fiddle. It first uses the very fast typeof for cases where the results are reliable. Then it uses a more expensive toString method for other cases. Finally, if it is dealing with a named object (as returned by Firefox for objects like document.location) it checks for Array-like objects and reports them as arrays. Show So sánh, typeof là nghèo nàn đáng xấu hổ. Loại ([]) trả về 'đối tượng', typeof (new Number ()) trả về đối tượng. Nó cũng trả về 'đối tượng' cho nhiều biến số khác không (cho mục đích thực tế) đối tượng. Xem kết quả fiddle để so sánh.typeof is embarrassingly poor. typeof([]) returns 'object', typeof(new Number()) returns object. It also returns 'object' for many other variables that aren't (for practical purposes) objects. See the fiddle results for a comparison.
Chế độ thất bại duy nhất có thể xảy ra nếu bạn đang kiểm tra một mảng có tên trống (ví dụ: một đối tượng DOM có thể suy nghĩ trống bên cạnh styleSheetList). Nhưng trên có thể thêm những người đó vào type_of_map khi cần thiết. Tôi hy vọng điều đó sẽ giúp! 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? Nội dung chính ShowShow
Bạn có thể kiểm tra NULL với toán tử loại () trong JavaScript.Thật kỳ lạ, nếu bạn kiểm tra với typeof (), một biến null sẽ trả về đối tượng.with the typeof() operator in JavaScript. Curiously, if you check with typeof() , a null variable will return object .
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? Nội dung chính Show
Làm thế nào để bạn kiểm tra xem một hàm được thực thi trong javascript?
HoặcJan 4, 2009 at 17:38 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.Darryl Hein Một lựa chọn khác như đã đề cập bởi Tom:90 gold badges214 silver badges259 bronze badges 5 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:38Darryl Heindarryl HeinDarryl Hein Phù vàng 140K90 Huy hiệu vàng214 Huy hiệu đồng90 gold badges214 silver badges259 bronze badgesCó 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.Jan 4, 2009 at 17:46Một cách hay khác để cung cấp các giá trị mặc định bằng cách sử dụng Christoph
13 Đ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. 6Đã trả lời ngày 4 tháng 1 năm 2009 lúc 17:46Jan 4, 2009 at 17:46 7ChristophchristophChristoph 8161K36 Huy hiệu vàng179 Huy hiệu bạc236 Huy hiệu Đồng36 gold badges179 silver badges236 bronze badgesApr 30, 2013 at 18:16 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. 9Nếu bạn gọi chức năng thì như thế này: Biến tùy chọn sau đó sẽ là:really confusing.) EDIT: Đã trả lời ngày 30 tháng 4 năm 2013 lúc 18:16Apr 30, 2013 at 18:16 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:53Jan 4, 2009 at 17:53 Dkretzdkretzdkretzdkretz 37.1K13 Huy hiệu vàng80 Huy hiệu bạc136 Huy hiệu đồng13 gold badges80 silver badges136 bronze badges13 gold badges80 silver badges136 bronze badges 7 Trong ES6 (ES2015), bạn có thể sử dụng các tham số mặc định 0Đã trả lời ngày 23 tháng 7 năm 2017 lúc 22:14Jul 23, 2017 at 22:14Jul 23, 2017 at 22:14 andriy2andriy2andriy2andriy2 Huy hiệu Huy hiệu 1411 Bạc6 Huy hiệu Đồng1 silver badge6 bronze badges1 silver badge6 bronze badges 3 0Paul Rooney 20.1k9 Huy hiệu vàng41 Huy hiệu bạc61 Huy hiệu Đồng9 gold badges41 silver badges61 bronze badges9 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:51Aug 21, 2012 at 9:51 YasenyasenYasenYasen 3,3401 Huy hiệu vàng26 Huy hiệu bạc22 Huy hiệu đồng1 gold badge26 silver badges22 bronze badges1 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à 51 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:57Jan 4, 2009 at 17:57 Shog9Shog9Shog9Shog9 154K34 Huy hiệu vàng227 Huy hiệu bạc232 Huy hiệu Đồng34 gold badges227 silver badges232 bronze badges34 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:48Jan 4, 2009 at 17:48 Luca Matteisluca MatteisLuca MatteisLuca Matteis 29K19 Huy hiệu vàng113 Huy hiệu bạc166 Huy hiệu Đồng19 gold badges113 silver badges166 bronze badges19 gold badges113 silver badges166 bronze badges 1 Tại sao không sử dụng toán tử 55? 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 56 và 57 (và thậm chí 58, 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:01Dec 30, 2015 at 13:01 RallionrlrallionrlRallionRlRallionRl 2.1532 huy hiệu vàng9 Huy hiệu bạc9 Huy hiệu đồng2 gold badges9 silver badges9 bronze badges2 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 61 -> vượt qua, chúng tôi không muốn ID trống 62 -> vượt qua, chúng tôi muốn ID không được xác định 63 -> 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:16Aug 30, 2021 at 12:16 GilbertgilbertGilbertGilbert 2.02720 Huy hiệu bạc24 Huy hiệu đồng20 silver badges24 bronze badges20 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:22Mar 5, 2013 at 2:22 1nfiniti1nfiniti1nfiniti1nfiniti 2.00414 Huy hiệu bạc19 Huy hiệu đồng14 silver badges19 bronze badges14 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:06May 18, 2016 at 19:06 nbloqsnbloqsnbloqsnbloqs 3.1121 Huy hiệu vàng26 Huy hiệu bạc48 Huy hiệu đồng1 gold badge26 silver badges48 bronze badges1 gold badge26 silver badges48 bronze badges 6Bởi vì các mảng kế thừa từ 64. 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: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:56Jun 28, 2018 at 5:56 Làm thế nào để bạn kiểm tra xem một hàm được thực thi trong javascript?Bạn có thể bỏ == true vì cả hai đều trả lại booleans.Nếu điều kiện này nếu (function1 () && function2 ()) {là đúng, điều đó có nghĩa là các hàm này đã được thực thi và trả về đúng.Chỉ cần lưu ý rằng nếu hàm đầu tiên không trả về đúng hoặc thứ hai sẽ không được thực thi.if (function1() && function2() ){ is true, it means that these functions was executed and returned true. just be aware of that if the first function doesn't return true or the second won't be executed.if (function1() && function2() ){ is true, it means that these functions was executed and returned true. just be aware of that if the first function doesn't return true or the second won't be executed. Làm thế nào để bạn kiểm tra xem một biến có phải là một hàm javascript không?Để kiểm tra xem một biến có chức năng loại hay không, hãy sử dụng toán tử loại, ví dụ:typeOf myVarable === 'hàm'.Toán tử typeOf trả về một chuỗi cho biết loại giá trị.Nếu loại biến là hàm, một chuỗi chứa hàm từ được trả về.Đã sao chép!use the typeof operator, e.g. typeof myVariable === 'function' . The typeof operator returns a string that indicates the type of the value. If the type of the variable is a function, a string containing the word function is returned. Copied!use the typeof operator, e.g. typeof myVariable === 'function' . The typeof operator returns a string that indicates the type of the value. If the type of the variable is a function, a string containing the word function is returned. Copied! JavaScript có vượt qua bản sao không?Trong JavaScript, các đối tượng và mảng được truyền qua tham chiếu.objects and arrays are passed by reference.objects and arrays are passed by reference. Làm thế nào để bạn kiểm tra xem một cái gì đó là null trong javascript?Bạn có thể kiểm tra NULL với toán tử loại () trong JavaScript.Thật kỳ lạ, nếu bạn kiểm tra với typeof (), một biến null sẽ trả về đối tượng.with the typeof() operator in JavaScript. Curiously, if you check with typeof() , a null variable will return object .with the typeof() operator in JavaScript. Curiously, if you check with typeof() , a null variable will return object . |