Hướng dẫn how to handle nan and infinity in javascript - cách xử lý nan và vô cực trong javascript

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ị

Nan

Giá 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")
    NaN
nan

    > 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 Nan

Nan

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

true

cũ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ố:

Nan

Cambridge từ đề nghị làm việc xung quanh là khai thác thực tế rằng

là giá trị duy nhất

x

đó 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
    true
0

Để kiểm soát kết quả chuyển đổi thành số:

    > NaN !== NaN
    true
1

Cambridge từ đề nghị làm việc xung quanh là khai thác thực tế rằng

  1. 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

Hướng dẫn how to handle nan and infinity in javascript - cách xử lý nan và vô cực trong javascript

    > NaN !== NaN
    true
2

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)
    true
0 Nếu số của bạn là
    > isNaN(NaN)
    true
1,
    > isNaN(NaN)
    true
2 hoặc
    > typeof NaN
    'number'
8.

    > NaN !== NaN
    true
3

Đã 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)
    true
4, phương thức
    > isNaN(NaN)
    true
5 xác định xem giá trị truyền có phải là số hữu hạn hay không.

    > NaN !== NaN
    true
4

Đã trả lời ngày 28 tháng 12 năm 2015 lúc 7:56Dec 28, 2015 at 7:56

Hướng dẫn how to handle nan and infinity in javascript - cách xử lý nan và vô cực trong javascript

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)
    true
6 hoặc
    > isNaN(NaN)
    true
7 đơn giản hoạt động:

    > NaN !== NaN
    true
5

Xin lưu ý rằng

    > isNaN(NaN)
    true
8 ép buộc đầu vào các số.
    > isNaN(NaN)
    true
9 và
    > Number("xyz")
    NaN
    > isNaN("xyz")
    true
0 đều là
    > Number("xyz")
    NaN
    > isNaN("xyz")
    true
1 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
    true
6

Đã trả lời ngày 19 tháng 1 năm 2015 lúc 13:50Jan 19, 2015 at 13:50

Hướng dẫn how to handle nan and infinity in javascript - cách xử lý nan và vô cực trong javascript

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
    true
7

hoặc để lưu một số ký tự:

    > NaN !== NaN
    true
8

Tại sao sử dụng cái này

  1.     > Number("xyz")
        NaN
        > isNaN("xyz")
        true
    
    2 phá vỡ trên đầu vào
        > typeof NaN
        'number'
    
    8.
  2.     > 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.
  3.     > typeof NaN
        'number'
    
    5 và
        > Number("xyz")
        NaN
        > isNaN("xyz")
        true
    
    7 chỉ đọc ở chế độ nghiêm ngặt.
  4. Đó 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

Hướng dẫn how to handle nan and infinity in javascript - cách xử lý nan và vô cực trong javascript

К с соКонстантин Ван

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")
    true
8 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
    true
9

Đã 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"])
    true
2:isFinite in window,
    > Number({})
    NaN
    > isNaN({})
    true

    > Number(["xzy"])
    NaN
    > isNaN(["xzy"])
    true
2:

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"])
    true
3E 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"])
    true
4 và
    > Number({})
    NaN
    > isNaN({})
    true

    > Number(["xzy"])
    NaN
    > isNaN(["xzy"])
    true
5, 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

Hướng dẫn how to handle nan and infinity in javascript - cách xử lý nan và vô cực trong javascript

AlirezaalirezaAlireza

95,9K26 Huy hiệu vàng265 Huy hiệu bạc167 Huy hiệu đồng26 gold badges265 silver badges167 bronze badges

Làm cách nào để sửa lỗi NAN trong JavaScript?

Sử dụng ||Nhà điều hành: Nếu số Number Number là bất kỳ giá trị giả nào, nó sẽ được gán cho 0 ...
Ví dụ: số = nan;số = số ||0;Console.log (số);.
Đầu ra: 0 ..

Làm thế nào để bạn tránh Infinity trong JavaScript?

Nguyên nhân JavaScript ngăn chặn vô cực..
var f = [] ;.
Hàm Factorial (n) {.
if (n == 0 || n == 1).
trả lại 1 ;.
if (f [n]> 0).
trả lại f [n] ;.
trả về f [n] = factorial (n-1) * n ;.

Nan và Infinity có giống nhau không?

Trong các tính toán điểm nổi, NAN không giống như vô cực, mặc dù cả hai đều được xử lý như các trường hợp đặc biệt trong các biểu diễn dấu phẩy động của các số thực cũng như trong các hoạt động dấu phẩy động.NaN is not the same as infinity, although both are typically handled as special cases in floating-point representations of real numbers as well as in floating-point operations.

Bạn có thể sử dụng Infinity trong JavaScript không?

Infinity trong JavaScript đại diện cho khái niệm về một số vô hạn.Bất kỳ số lượng hữu hạn nào nhỏ hơn vô cực và bất kỳ số hữu hạn nào đều lớn hơn.So sánh các giá trị vô hạn trong JavaScript rất dễ dàng: Infinity === Infinity là đúng.Số hàm đặc biệt.. Any finite number is smaller than Infinity , and any finite number is bigger -Infinity . Comparing infinite values in JavaScript is easy: Infinity === Infinity is true . The special function Number.