Trong bài viết này, chúng ta sẽ xem xét cách tạo số ngẫu nhiên trong JavaScript với 9, xây dựng hàm mà bạn có thể sử dụng lại cho nhiều mục đích — chẳng hạn như tải hình ảnh ngẫu nhiên, chọn phần tử ngẫu nhiên từ một mảng và tạo số ngẫu nhiên Show
Tính ngẫu nhiên trong JavaScriptViệc có thể thêm yếu tố ngẫu nhiên vào chương trình của bạn luôn hữu ích. Bạn có thể muốn thêm gia vị cho trang web của mình bằng cách thêm một số kiểu ngẫu nhiên, tạo cụm từ ngẫu nhiên hoặc thêm yếu tố may rủi vào trò chơi (ví dụ: chúng được sử dụng rộng rãi trong trò chơi Numble này) Thật không may, thực sự rất khó để tạo ra một giá trị thực sự ngẫu nhiên (trừ khi bạn có quyền truy cập vào một số chất phóng xạ… hoặc một con khỉ với bàn phím. Để giải quyết vấn đề này, các ngôn ngữ lập trình sử dụng các phương thức xác định để tạo ra các số giả ngẫu nhiên. Đây là những số có vẻ như là ngẫu nhiên nhưng thực tế được tạo bởi các hàm chấp nhận các giá trị gốc dựa trên các sự kiện như thời gian hoặc vị trí của con trỏ chuột JavaScript có hàm 0, là một phương thức của đối tượng 1 được tích hợp sẵn. Tiêu chuẩn ECMAScript không chỉ định cách chức năng này sẽ tạo ra một số ngẫu nhiên, do đó, tùy thuộc vào nhà cung cấp trình duyệt để triển khai. Tại thời điểm viết bài, tất cả các trình duyệt chính hiện đang sử dụng thuật toán xorshift128+ trong nền để tạo số giả ngẫu nhiênĐể sử dụng nó, chỉ cần nhập 9 và nó sẽ trả về một số thập phân dấu phẩy động giả ngẫu nhiên giữa 0 (bao gồm) và 1 (độc quyền)
Điều này có thể được biểu diễn dưới dạng bất đẳng thức sau
Nhưng nếu bạn muốn một số ngẫu nhiên lớn hơn 1 thì sao? . tất cả những gì bạn cần làm là nhân với một hệ số tỷ lệ để tăng tỷ lệ — ví dụ: nhân kết quả với 10 sẽ tạo ra giá trị từ 0 (bao gồm) đến 10 (không bao gồm)
Lý do cho điều này có thể được nhìn thấy nếu chúng ta nhân cả hai vế của bất đẳng thức trước với 10
Nhưng kết quả vẫn là một số thập phân dấu phẩy động. Nếu chúng ta muốn một số nguyên ngẫu nhiên thì sao? . tất cả những gì chúng ta cần làm là sử dụng hàm 3 để làm tròn giá trị được trả về xuống số nguyên bên dưới. Đoạn mã sau sẽ gán một số nguyên ngẫu nhiên từ 0 đến 9 bao gồm biến 4 0Lưu ý rằng, mặc dù chúng ta nhân với 10, nhưng giá trị trả về chỉ lên đến 9 Chúng ta có thể tổng quát hóa phương thức này để tạo một hàm sẽ trả về một số nguyên ngẫu nhiên trong khoảng từ 0 đến tối đa, nhưng không bao gồm, số được cung cấp làm đối số 1Bây giờ chúng ta có thể sử dụng hàm này để trả về một chữ số ngẫu nhiên trong khoảng từ 0 đến 9 2Vì vậy, bây giờ chúng ta có một cách để tạo một số nguyên ngẫu nhiên. Nhưng còn một số nguyên ngẫu nhiên nằm giữa hai giá trị khác nhau, không phải lúc nào cũng bắt đầu từ số 0 thì sao? . Ví dụ: nếu chúng tôi muốn tạo một số nguyên ngẫu nhiên trong khoảng từ 6 đến 10, chúng tôi sẽ bắt đầu bằng cách sử dụng mã ở trên để tạo một số nguyên ngẫu nhiên trong khoảng từ 0 đến 4, sau đó thêm 6 vào kết quả 3Lưu ý rằng, để tạo một số nguyên ngẫu nhiên giữa 5 và 6, chúng ta thực sự phải nhân với 7Chúng ta có thể khái quát hóa phương thức này để tạo một hàm sẽ trả về một số nguyên ngẫu nhiên giữa hai giá trị 7Đây chỉ đơn giản là một dạng mã tổng quát mà chúng tôi đã viết để lấy một số ngẫu nhiên trong khoảng từ 6 đến 10, nhưng với 6 được thay thế bằng tham số 8 và 10 được thay thế bằng tham số 9. Để sử dụng nó, chỉ cần nhập hai đối số để biểu thị giới hạn trên và dưới của số ngẫu nhiên (đã bao gồm). Vì vậy, để mô phỏng tung một con xúc xắc sáu mặt, chúng ta có thể sử dụng đoạn mã sau để trả về một số nguyên trong khoảng từ 1 đến 6 0Để cho thấy hàm 00 hoạt động như thế nào, tôi đã nối nó với một số HTML trong bản trình diễn bên dưới, vì vậy bạn có thể thay đổi các giá trị của 8 và 9 và tạo một số nguyên ngẫu nhiên bằng cách nhấp vào nút (có thể được sử dụng để sao chép hàm Xem Bút Bây giờ chúng ta có một số hàm để tạo số nguyên ngẫu nhiên, chúng ta có thể sử dụng chúng để thực hiện một số điều thú vị Tải một hình ảnh ngẫu nhiênĐể bắt đầu, chúng ta sẽ sử dụng hàm 03 để tải một ảnh ngẫu nhiên từ trang web Lorem Picsum. Trang web này cung cấp cơ sở dữ liệu về hình ảnh giữ chỗ, mỗi hình ảnh có ID số nguyên duy nhất. Điều này có nghĩa là chúng ta có thể tạo một liên kết đến một hình ảnh ngẫu nhiên bằng cách chèn một số nguyên ngẫu nhiên vào URLTất cả những gì chúng ta cần làm là thiết lập HTML sau sẽ hiển thị hình ảnh có ID là 0 0Sau đó, chúng tôi có thể kết nối JavaScript sau để tạo một số nguyên ngẫu nhiên cho ID và cập nhật HTML để hiển thị một hình ảnh mới một cách ngẫu nhiên khi nhấp vào nút 1Bạn có thể thấy điều này trên bản demo CodePen bên dưới Xem bút Tạo màu ngẫu nhiênTrong HTML và CSS, màu sắc được biểu thị bằng ba số nguyên từ 0 đến 255, được viết ở dạng thập lục phân (cơ số 16). Cái đầu tiên đại diện cho màu đỏ, cái thứ hai màu xanh lá cây và cái thứ ba màu xanh lam. Điều này có nghĩa là chúng ta có thể sử dụng hàm 03 để tạo màu ngẫu nhiên bằng cách tạo ba số ngẫu nhiên trong khoảng từ 0 đến 255 và chuyển đổi chúng thành cơ số 16. Để chuyển đổi một số thành một cơ số khác, bạn có thể cung cấp một đối số cho phương thức 05, vì vậy đoạn mã sau sẽ trả về một số thập lục phân ngẫu nhiên trong khoảng từ 0 đến FF (255 ở dạng thập lục phân) 2Bây giờ chúng ta có thể viết hàm 06 sẽ trả về mã màu HTML 3Điều này trả về một mẫu chữ bắt đầu bằng ký tự băm mà tất cả các mã màu HTML bắt đầu bằng và sau đó nối ba số nguyên ngẫu nhiên trong khoảng từ 0 đến 255 trong cơ sở 16 vào cuối Gọi hàm 06 sẽ trả về một chuỗi màu HTML ngẫu nhiên 4Tôi đã nối chức năng này với một nút HTML để nó thay đổi màu nền của tài liệu mỗi khi nút được nhấp vào trong bản demo CodePen bên dưới Xem Bút Tạo một lá thư ngẫu nhiênChúng ta đã có một hàm để tạo một số nguyên ngẫu nhiên, nhưng còn các chữ cái ngẫu nhiên thì sao? . Trong cơ số 36, các số nguyên từ 10 đến 35 được biểu thị bằng các chữ cái “a” đến “z”. Bạn có thể kiểm tra điều này bằng cách chuyển đổi một số giá trị thành cơ số 36 trong bảng điều khiển bằng phương pháp 05 5Bây giờ chúng ta đã biết điều này, thật dễ dàng để viết một hàm 09 sử dụng hàm 03 của chúng ta để tạo một số nguyên ngẫu nhiên trong khoảng từ 10 đến 35 và trả về biểu diễn chuỗi 36 cơ sở của nó 6Gọi 09 sẽ trả về một chữ cái viết thường ngẫu nhiên từ “a” đến “z” 7Tôi đã kết nối chức năng này với một nút HTML để bạn có thể thấy nó hoạt động như thế nào trong bản demo CodePen bên dưới Xem Bút Tạo chuỗi ngẫu nhiênBây giờ chúng ta có thể tạo các chữ cái ngẫu nhiên, chúng ta có thể ghép chúng lại với nhau để tạo chuỗi các chữ cái ngẫu nhiên. Hãy viết một hàm 12 chấp nhận một tham số duy nhất, 13 — đại diện cho số lượng chữ cái ngẫu nhiên mà chúng ta muốn trong chuỗi được trả về. Chúng ta có thể tạo một chuỗi các chữ cái ngẫu nhiên bằng cách tạo một mảng hoặc chiều dài 13 và sau đó sử dụng phương thức 15 để thay đổi từng phần tử thành một chữ cái ngẫu nhiên. Sau đó, chúng ta có thể sử dụng phương thức 16 để chuyển đổi mảng thành một chuỗi ký tự ngẫu nhiên 8Gọi 17 sẽ trả về một chuỗi ngẫu nhiên gồm các chữ cái 13 9Tôi đã kết nối chức năng này với một nút HTML để bạn có thể thấy nó hoạt động như thế nào trong bản demo CodePen bên dưới Xem Bút Chọn một phần tử ngẫu nhiên từ một mảngViệc có thể chọn một phần tử ngẫu nhiên từ một mảng thường rất hữu ích. Điều này khá dễ thực hiện bằng cách sử dụng chức năng 03 của chúng tôi. Chúng ta có thể chọn ngẫu nhiên một chỉ mục trong mảng, sử dụng độ dài của mảng làm đối số và trả về phần tử tại chỉ mục đó từ mảng 0Ví dụ: lấy mảng sau đại diện cho danh sách các loại trái cây 1Bạn có thể chọn một miếng trái cây ngẫu nhiên bằng cách sử dụng đoạn mã sau 2Tạo một cụm từ ngẫu nhiênBây giờ chúng ta có một hàm chọn một phần tử ngẫu nhiên từ các mảng, chúng ta có thể sử dụng nó để tạo các cụm từ ngẫu nhiên. Bạn thường thấy kỹ thuật này được sử dụng làm tên người dùng giữ chỗ trên các trang web. Để bắt đầu, hãy tạo ba mảng, một mảng chứa các chuỗi tính từ, một mảng chứa màu sắc và các danh từ khác, tương tự như các mảng được hiển thị bên dưới 3Bây giờ chúng ta có ba mảng này, việc tạo một cụm từ ngẫu nhiên thật dễ dàng bằng cách sử dụng hàm 20 của chúng ta. Chúng tôi chỉ cần chọn một phần tử ngẫu nhiên từ mỗi mảng và nối chúng, với khoảng cách giữa chúng để tạo thành một cụm từ 4Gọi 21 sẽ trả về một cụm từ ngẫu nhiên nghe hơi buồn cười — với màu sắc, tính từ và danh từ 5Tôi đã kết nối chức năng này với một nút HTML để bạn có thể tạo một số cụm từ thú vị bằng cách nhấn nút trong bản demo CodePen bên dưới Xem Bút Tạo mật khẩu ngẫu nhiênCông dụng cuối cùng của các số nguyên ngẫu nhiên mà chúng ta sẽ xem xét là tạo một chuỗi mật khẩu ngẫu nhiên. Các quy tắc phổ biến cho một mật khẩu là nó chứa ít nhất
Một ví dụ phù hợp với các quy tắc này có thể là 6Chúng tôi đã có các hàm có thể tạo từng phần tử này cho chúng tôi. Trước hết, chúng tôi sẽ sử dụng 22 để tạo một chuỗi ngẫu nhiên gồm sáu chữ cái. Sau đó, chúng tôi sẽ sử dụng hàm 20 để chọn một ký tự đặc biệt từ một mảng, sau đó chúng tôi sẽ sử dụng 24 để trả về một chữ số ngẫu nhiên. Tất cả những gì chúng ta cần làm sau đó là nối chúng lại và chúng ta sẽ có một mật khẩu được tạo ngẫu nhiênChúng ta có thể kết hợp chúng thành một hàm sẽ trả về một chuỗi mật khẩu ngẫu nhiên 7Gọi 25 sẽ trả về một mật khẩu ngẫu nhiên vượt qua ba quy tắc ở trên 8Tôi đã kết nối chức năng này với một nút HTML để bạn có thể thử tạo một số mật khẩu ngẫu nhiên bằng cách nhấn nút trong bản demo CodePen bên dưới Xem Bút Một điều cần lưu ý là tất cả các hàm chúng tôi đã viết sử dụng hàm 03 mà chúng tôi đã viết lúc đầu như thế nào. Ví dụ, hàm 25 mà chúng ta vừa viết bao gồm các hàm 03, 20 và 12… và hàm 12 sử dụng hàm 09. Đây là nền tảng của lập trình. sử dụng các hàm làm khối xây dựng cho các hàm phức tạp hơnkết thúcChúng tôi đã thảo luận về cách tạo số ngẫu nhiên trong JavaScript hữu ích. Tôi hy vọng bạn tìm thấy hướng dẫn này hữu ích. Chức năng 03 chắc chắn là một chức năng hữu ích cần có trong tủ khóa của bạn và sẽ giúp bạn thêm một số tính ngẫu nhiên vào các dự án của mìnhBạn có thể xem tất cả các ví dụ trong bài viết này trong bản demo CodePen sau Xem Bút đọc liên quan
Chia sẻ bài viết nàyDarren Jones Darren Jones là một lập trình viên tự học, thích viết mã bằng JavaScript, Haskell và Ruby. Ông là tác giả của Learn to Code using JavaScript, JavaScript. Làm quen với Ninja và Khởi động Sinatra. Anh ấy cũng là người tạo ra Nanny State, một giải pháp thay thế nhỏ cho React. Anh ấy dạy Toán và Tin học tại một trường trung học địa phương ở Manchester và có thể được tìm thấy trên Twitter @daz4126 Java Math có thực sự ngẫu nhiên không?Thật bất ngờ, câu trả lời là Toán. random() không thực sự tạo ra một số ngẫu nhiên .
JavaScript Math có an toàn không?Ghi chú. Toán. random() không cung cấp các số ngẫu nhiên được bảo mật bằng mật mã . Không sử dụng chúng cho bất cứ điều gì liên quan đến bảo mật. Thay vào đó, hãy sử dụng API Web Crypto và chính xác hơn là cửa sổ. tiền điện tử. phương thức getRandomValues().
Toán ngẫu nhiên () có thiên vị không?Vấn đề với cách tiếp cận này là nó thiên vị . Có những con số được trả về có nhiều khả năng xảy ra hơn những con số khác. Để hiểu điều này, bạn cần hiểu rằng Toán học. random() là RNG 32 bit trong Chrome và Safari và RNG 53 bit trong Edge và Firefox.
Tại sao Toán ngẫu nhiên không ngẫu nhiên?random() được triển khai bằng trình tạo số giả ngẫu nhiên (PRNG). Điều này có nghĩa là số ngẫu nhiên được lấy từ trạng thái bên trong, được xử lý bằng thuật toán xác định cho mọi số ngẫu nhiên mới . Nó có vẻ ngẫu nhiên đối với người dùng vì thuật toán được điều chỉnh theo cách nó xuất hiện như vậy. |