CẬP NHẬT: Phần mới Phát hiện NAN NAN. New section “Detecting NaN”.
Bài đăng này xem xét hai giá trị đặc biệt có thể là kết quả của các hoạt động thường trả về các số: NAN và INFINITY.
Nan
Giá trị
NanGiá trị
Trong JavaScript là viết tắt của một số không phải là một số. Nó chủ yếu chỉ ra rằng phân tích cú pháp một chuỗi đã sai:> Number["xyz"] NaNnan
> NaN !== NaN true
Có một số phẩm chất giống như công tử. Tên của nó là không phải là một số, nhưng nó cũng không phải là một số [được kích hoạt bởi một tweet của Ariya Hidayat]:
> typeof NaN 'number'
Tuy nhiên, loại của nó là số số.
Phát hiện NanNan
isNaN[]là giá trị JavaScript duy nhất không bằng chính nó. Không có sự bình đẳng theo ý của bạn, bạn phải sử dụng chức năng toàn cầu
> isNaN[NaN] true
để phát hiện nó.
isNaN[]Kit Cambridge [thông qua Mathias Bynens] chỉ ra một cạm bẫy của
true: Nó ép buộc đối số của nó thành số và do đó sẽ trả về
> Number["xyz"] NaN > isNaN["xyz"] true
Đối với các chuỗi không thể chuyển đổi thành số:
Cho cùng một lý do,isnan
truecũng sẽ trở lại
> Number[{}] NaN > isNaN[{}] true > Number[["xzy"]] NaN > isNaN[["xzy"]] true
Đối với nhiều đối tượng:
Tham khảo [1] để biết chi tiết về thuật toán chuyển đổi. Có thể ghi đègiá trị của
> var obj = { valueOf: function [] { return NaN } }; > Number[obj] NaN > isNaN[obj] true
Để kiểm soát kết quả chuyển đổi thành số:
NanCambridge từ đề nghị làm việc xung quanh là khai thác thực tế rằng
là giá trị duy nhấtx
đó là không phản xạ [x! == x
function myIsNaN[x] { return x !== x; }
]:
Cho cùng một lý do,isnan
Number.isNaN[]cũng sẽ trở lại
Number.isNaN = function [value] { return typeof value === 'number' && isNaN[value]; };
Đối với nhiều đối tượng:
Tham khảo [1] để biết chi tiết về thuật toán chuyển đổi. Có thể ghi đè
> 3/0 Infinity
giá trị của
> NaN !== NaN true0
Để kiểm soát kết quả chuyển đổi thành số:
> NaN !== NaN true1
Cambridge từ đề nghị làm việc xung quanh là khai thác thực tế rằng
- là giá trị duy nhất
109
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi có một loạt các tính toán JavaScript mà [chỉ trong IE] hiển thị vô cực tùy thuộc vào lựa chọn người dùng.
Làm thế nào để một người dừng từ
> typeof NaN 'number'5 xuất hiện và ví dụ, hiển thị
> typeof NaN 'number'6 thay thế?
Mosh Feu
Phù vàng 27.2K15 Huy hiệu vàng86 Huy hiệu đồng15 gold badges86 silver badges127 bronze badges
hỏi ngày 18 tháng 1 năm 2011 lúc 13:24Jan 18, 2011 at 13:24
> NaN !== NaN true2
Thay vào đó, bạn có thể sử dụng chức năng
> typeof NaN 'number'7, tùy thuộc vào cách bạn muốn điều trị
> typeof NaN 'number'8.
> typeof NaN 'number'7 Trả về
> isNaN[NaN] true0 Nếu số của bạn là
> isNaN[NaN] true1,
> isNaN[NaN] true2 hoặc
> typeof NaN 'number'8.
> NaN !== NaN true3
Đã trả lời ngày 18 tháng 1 năm 2011 lúc 13:27Jan 18, 2011 at 13:27
LukehlukehLukeH
256K57 Huy hiệu vàng360 Huy hiệu bạc409 Huy hiệu đồng57 gold badges360 silver badges409 bronze badges
7
Trong
> isNaN[NaN] true4, phương thức
> isNaN[NaN] true5 xác định xem giá trị truyền có phải là số hữu hạn hay không.
> NaN !== NaN true4
Đã trả lời ngày 28 tháng 12 năm 2015 lúc 7:56Dec 28, 2015 at 7:56
Zangwzangwzangw
39,5K18 Huy hiệu vàng154 Huy hiệu bạc187 Huy hiệu đồng18 gold badges154 silver badges187 bronze badges
1
Một
> isNaN[NaN] true6 hoặc
> isNaN[NaN] true7 đơn giản hoạt động:
> NaN !== NaN true5
Xin lưu ý rằng
> isNaN[NaN] true8 ép buộc đầu vào các số.
> isNaN[NaN] true9 và
> Number["xyz"] NaN > isNaN["xyz"] true0 đều là
> Number["xyz"] NaN > isNaN["xyz"] true1 chẳng hạn.
Đã trả lời ngày 16 tháng 12 năm 2013 lúc 10:06Dec 16, 2013 at 10:06
Ryanveryanveryanve
48K29 Huy hiệu vàng95 Huy hiệu bạc133 Huy hiệu Đồng29 gold badges95 silver badges133 bronze badges
4
Trên thực tế n === N + 1 sẽ hoạt động cho các số lớn hơn 51 bit, ví dụ:
> NaN !== NaN true6
Đã trả lời ngày 19 tháng 1 năm 2015 lúc 13:50Jan 19, 2015 at 13:50
YuriyuriYuri
Huy hiệu đồng 1491 Bạc5 Huy hiệu Đồng1 silver badge5 bronze badges
2
Thực hiện so sánh đơn giản ol ol:
> NaN !== NaN true7
hoặc để lưu một số ký tự:
> NaN !== NaN true8
Tại sao sử dụng cái này
> Number["xyz"] NaN > isNaN["xyz"] true
2 phá vỡ trên đầu vào> typeof NaN 'number'
8.> Number["xyz"] NaN > isNaN["xyz"] true
4 và> Number["xyz"] NaN > isNaN["xyz"] true
5 có thể được xác định lại; Chúng có thể cấu hình.> typeof NaN 'number'
5 và> Number["xyz"] NaN > isNaN["xyz"] true
7 chỉ đọc ở chế độ nghiêm ngặt.- Đó là giải pháp ngắn nhất.
Đã trả lời ngày 14 tháng 5 năm 2021 lúc 21:35May 14, 2021 at 21:35
К с соКонстантин Ван
10,9k7 Huy hiệu vàng54 Huy hiệu bạc65 Huy hiệu Đồng7 gold badges54 silver badges65 bronze badges
Tôi thích sử dụng Lodash vì nhiều lý do mã hóa phòng thủ cũng như khả năng đọc. ES6
> Number["xyz"] NaN > isNaN["xyz"] true8 là tuyệt vời và không có vấn đề với các giá trị không phải là số, nhưng nếu không thể thực hiện được, bạn đã có lodash hoặc muốn mã briefer: _.isfinite
> NaN !== NaN true9
Đã trả lời ngày 30 tháng 9 năm 2019 lúc 23:46Sep 30, 2019 at 23:46
random_user_namerandom_user_namerandom_user_name
Huy hiệu vàng 25K773 Huy hiệu bạc108 Huy hiệu đồng7 gold badges73 silver badges108 bronze badges
Tôi đã gặp phải một kịch bản yêu cầu tôi kiểm tra xem giá trị thuộc loại
> typeof NaN 'number'8 hoặc
> typeof NaN 'number'5 nhưng truyền chuỗi là kết quả hợp lệ. Bởi vì nhiều chuỗi văn bản sẽ tạo ra
> typeof NaN 'number'8 dương tính giả, tôi đã tạo ra một giải pháp đơn giản để phá vỡ điều đó:
> typeof NaN 'number'0
Mã trên chuyển đổi các giá trị thành chuỗi và kiểm tra xem chúng có hoàn toàn bằng NAN hoặc Vô cực không [bạn sẽ cần thêm một trường hợp khác cho Vô cực âm].
So:
> typeof NaN 'number'1
Đã trả lời ngày 30 tháng 9 năm 2019 lúc 21:37Sep 30, 2019 at 21:37
Dmitrizzledmitrizzledmitrizzle
7126 Huy hiệu bạc11 Huy hiệu đồng6 silver badges11 bronze badges
4
Bạn có thể sử dụng isfinite trong cửa sổ,
> Number[{}] NaN > isNaN[{}] true > Number[["xzy"]] NaN > isNaN[["xzy"]] true2:isFinite in window,
> Number[{}] NaN > isNaN[{}] true > Number[["xzy"]] NaN > isNaN[["xzy"]] true2:
Bạn có thể viết một chức năng như:
> typeof NaN 'number'2
Và sử dụng như:
> typeof NaN 'number'3
Bạn cũng có thể
> Number[{}] NaN > isNaN[{}] true > Number[["xzy"]] NaN > isNaN[["xzy"]] true3E cũng kiểm tra xem giá trị cũng là số và chính xác hơn để kiểm tra
> Number[{}] NaN > isNaN[{}] true > Number[["xzy"]] NaN > isNaN[["xzy"]] true4 và
> Number[{}] NaN > isNaN[{}] true > Number[["xzy"]] NaN > isNaN[["xzy"]] true5, v.v.
Hoặc bạn có thể polyfill nó như thế này:polyfill it like this:
> typeof NaN 'number'4
Đã trả lời ngày 31 tháng 5 năm 2018 lúc 14:37May 31, 2018 at 14:37
AlirezaalirezaAlireza
95,9K26 Huy hiệu vàng265 Huy hiệu bạc167 Huy hiệu đồng26 gold badges265 silver badges167 bronze badges