Tổng quan
Chia cho 0 được coi là một trường hợp đặc biệt bởi hầu hết các ngôn ngữ lập trình. Bất kỳ số nào không bao giờ có thể được chia cho 0 vì kết quả của nó là không xác định. Ảnh này bao gồm cách JavaScript xử lý một sự phân chia cho biểu thức bằng không. is considered a special case by most programming languages. Any number can never be divided by zero because its result is indeterminate. This shot covers how JavaScript handles a Divide by Zero expression.
Làm thế nào để ngôn ngữ lập trình xử lý nó?
Hầu hết các ngôn ngữ lập trình đều ném exception
trong thời gian chạy. Để xử lý ngoại lệ, họ sử dụng một khối thử.try-catch block.
JavaScript xử lý nó như thế nào?
JavaScript hành động khác với các ngôn ngữ lập trình khác. Khi nó gặp bất kỳ sự phân chia nào cho biểu thức bằng không, nó không ném một ngoại lệ.
Bây giờ, câu hỏi có thể đặt ra tại sao JavaScript hoạt động khác nhau và tại sao nó không ném bất kỳ ngoại lệ nào.
Những lý do có thể cho điều này như sau:
- JavaScript là một ngôn ngữ được đánh máy động và nó thực hiện
type-coercion
. - Ném các ngoại lệ trong thời gian chạy là bất tiện cho JavaScript.
Vì vậy, làm thế nào để JavaScript đánh giá các biểu thức này?
Hãy cùng xem điều đó trong ví dụ sau.
Thí dụ
// Declare and initialize a number with 0
const num1 = 0;
// Declare and initialize a number with a positive integer
const num2 = 10;
// Declare and initialize a number with a negative integer
const num3 = -10;
// Divide by zero with a zero
console.log["Divide by zero with a zero:", num1 / 0];
// Divide by zero with a positive integer
console.log["Divide by zero with a positive integer:", num2 / 0];
// Divide by zero with a negative integer
console.log["Divide by zero with a negative integer:", num3 / 0];
Giải trình
- Dòng 2: Chúng tôi khai báo và khởi tạo một biến
num1
với 0.: We declare and initialize a variablenum1
with 0. - Dòng 5: Chúng tôi khai báo và khởi tạo một biến
num2
với giá trị dương.: We declare and initialize a variablenum2
with a positive value. - Dòng 8: Chúng tôi khai báo và khởi tạo một biến
num3
với giá trị âm.: We declare and initialize a variablenum3
with a negative value. - Dòng 11: Chúng tôi chia biến
num1
với 0 và in đầu ra trên bảng điều khiển.: We divide the variablenum1
with 0, and print the output on the console. - Dòng 14: Chúng tôi chia biến
num2
với 0 và in đầu ra trên bảng điều khiển.: We divide the variablenum2
with 0, and print the output on the console. - Dòng 17: Chúng tôi chia biến
num3
với 0 và in đầu ra trên bảng điều khiển.: We divide the variablenum3
with 0, and print the output on the console.
Đầu ra
Đầu ra của mã trong JavaScript như sau:
- Chia số 0 cho 0 trả về nan.0 returns NaN.
- Chia số dương cho 0 trả về vô cùng.Infinity.
- Chia số âm cho 0 trả về -Infinity.-Infinity.
THẺ LIÊN QUAN
JavaScript
chia cho số không
JS
cộng đồng
Người đóng góp
Shubham Singh Kshatriya
Cách tốt nhất là theo ngữ cảnh. Nhưng đây là cách dễ nhất:
function myFunction[ input ]{
input = 0 ? 0.0001 : input; // same as if[ input == 0 ]{ input = 0.0001; }
return 1 / input;
}
Về cơ bản nếu đầu vào bằng không, hãy biến nó thành một số rất nhỏ trước khi sử dụng làm mẫu số. Hoạt động tuyệt vời cho các số nguyên, vì sau khi bộ phận của bạn, bạn có thể làm tròn chúng trở lại.
Một vài cảnh báo ngăn chặn điều này là phổ quát:
- Nó có thể gây ra dương tính sai nếu đầu vào của bạn chấp nhận số lượng thực sự nhỏ
- Nó sẽ không kích hoạt bất kỳ mã xử lý lỗi nào, nếu bạn cần làm điều gì đó đặc biệt nếu không được nhập
Vì vậy, nó là tốt nhất cho các trường hợp mục đích chung, không quan trọng. Ví dụ: nếu bạn cần trả về kết quả của một tính toán phức tạp và không quan tâm nếu câu trả lời có chính xác với n chữ số [được xác định là 0,0001 so với 0,00000001, v.v.]; Bạn chỉ không muốn nó phá vỡ một cách chia rẽ.
Như một câu trả lời khác được đề xuất, bạn cũng có thể tạo ra một chức năng toàn cầu có thể tái sử dụng.
function divisor[ n ]{ return [ n = 0 ? 0.0001 : n ]; }
function myFunction[ input ]{ return 1 / divisor[ input ]; }
Những cải tiến có thể:
function divisor[ n, orError ]{
if[ typeof n == 'undefined' || isNaN[ n ] || !n ]{
if[ orError ]{ throw new Error[ 'Divide by zero.' ]; }
return 0.000000000000001;
}else{ return 0 + n; }
}
Điều này sẽ lấy bất kỳ giá trị nào [null, số, chuỗi, đối tượng] và nếu không hợp lệ hoặc bằng không, hãy trả về giá trị giống như không an toàn. Nó cũng sẽ ép buộc đầu ra đến một số chỉ trong trường hợp nó là một chuỗi và bạn đang làm một cái gì đó kỳ lạ. Tất cả điều này sẽ đảm bảo rằng chức năng chia của bạn luôn hoạt động. Cuối cùng, đối với các trường hợp bạn muốn tự xử lý các lỗi như vậy, bạn có thể đặt tham số thứ hai thành True và sử dụng
function myFunction[ input ]{
input = 0 ? 0.0001 : input; // same as if[ input == 0 ]{ input = 0.0001; }
return 1 / input;
}
2.