Hướng dẫn convert undefined to number javascript - chuyển đổi không xác định thành javascript số

Giới thiệu

Bản gốcChuyển đổi thành số Được chuyển đổi thành chuỗi Chuyển đổi thành Boolean
chưa xác địnhNan"chưa xác định"sai

Mã demo

Resultview bản demo trong cửa sổ riêng biệt

<!DOCTYPE html>
<html>
<body>

<p>Converting undefined to other types:

<p id="demo" style="font-family:courier">

<script> var x = undefined;/*from w w w. ja v a 2s. c om*/ document.getElementById("demo").innerHTML = "Number : " + Number(x) + "
"
+ "String : " + String(x) + "
"
+ "Boolean: " + Boolean(x);
  • Trước
  • Tiếp theo

Hướng dẫn liên quan

  • Sử dụng toán tử có điều kiện (ternary) để so sánh các giá trị chuỗi
  • Kiểm tra sai hoặc null để kiểm tra lỗi
  • Phân biệt giữa giá trị trả về chuỗi và chuỗi bằng cách sử dụng JavaScript với giá trị được xác định trước
  • Chuyển đổi NULL thành Số, Chuỗi và Boolean
  • Chuyển đổi một đối tượng thành số, chuỗi và boolean

Thay vì kludging nó để bạn có thể tiếp tục, tại sao không sao lưu và tự hỏi tại sao bạn lại chạy vào NAN ngay từ đầu?

Nếu bất kỳ đầu vào số nào cho hoạt động là NAN, đầu ra cũng sẽ là NAN. Đó là cách mà tiêu chuẩn điểm nổi hiện tại của IEEE hoạt động (nó không chỉ là JavaScript). Hành vi đó là vì một lý do chính đáng: ý định cơ bản là để bạn không sử dụng kết quả không có thật mà không nhận ra đó là không có thật.

Cách thức hoạt động của NAN là nếu có điều gì đó không ổn trong một số hoạt động phụ trợ phụ (tạo ra NAN ở cấp độ thấp hơn), kết quả cuối cùng cũng sẽ là NAN, bạn sẽ nhận ra ngay lập tức là một lỗi ngay cả khi Logic xử lý lỗi (ném/bắt có thể?) Vẫn chưa hoàn thành.

Nan là kết quả của một phép tính số học luôn cho thấy một cái gì đó đã trở nên tồi tệ trong các chi tiết của số học. Đó là một cách để máy tính nói "gỡ lỗi cần thiết ở đây". Thay vì tìm cách nào đó để tiếp tục với một số số mà hầu như không đúng (là 0 thực sự là những gì bạn muốn?), Tại sao không tìm thấy vấn đề và khắc phục nó.

Một vấn đề phổ biến trong JavaScript là cả parseInt(...)parseFloat(...) sẽ trả lại NAN nếu đưa ra một đối số vô nghĩa (

function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
0,
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
1, v.v.). Khắc phục sự cố ở cấp độ thấp nhất có thể thay vì ở cấp độ cao hơn. Sau đó, kết quả của tính toán tổng thể có cơ hội tốt để có ý nghĩa và bạn không thay thế một số số ma thuật (0 hoặc 1 hoặc bất cứ điều gì) cho kết quả của toàn bộ tính toán. (Thủ thuật của (parseInt (foo.value) |

Có lẽ để dễ dàng mã hóa, bạn muốn có một hàm để lấy giá trị từ người dùng, làm sạch nó và cung cấp giá trị mặc định nếu cần thiết, như thế này:

function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}

Thuộc tính toàn cầu

function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 đại diện cho giá trị nguyên thủy
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2. Đây là một trong những loại nguyên thủy của JavaScript.
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2
property represents the primitive value
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2. It is one of JavaScript's primitive types.

Thử nó

Cú pháp

Sự mô tả

function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 là một tài sản của đối tượng toàn cầu. Đó là, nó là một biến trong phạm vi toàn cầu. Giá trị ban đầu của
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 là giá trị nguyên thủy
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2.

Trong tất cả các trình duyệt phi pháp lý,

function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 là một tài sản không thể cấu hình được, không có khả năng. (Ngay cả khi điều này không phải là trường hợp, hãy tránh ghi đè nó.)

Một biến chưa được gán một giá trị là loại

function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2. Một phương thức hoặc câu lệnh cũng trả về
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 nếu biến đang được đánh giá không có giá trị được gán. Một hàm trả về
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 nếu một giá trị không phải là
// DON'T DO THIS

(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");
1.

Lưu ý: Mặc dù bạn có thể sử dụng

function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 như một định danh (tên biến) trong bất kỳ phạm vi nào khác ngoài phạm vi toàn cầu (vì
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 không phải là một từ dành riêng), nhưng làm như vậy là một ý tưởng rất tồi sẽ khiến mã của bạn khó duy trì và gỡ lỗi.
While you can use
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 as an identifier (variable name) in any scope other than the global scope (because
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 is not a reserved word), doing so is a very bad idea that will make your code difficult to maintain and debug.

// DON'T DO THIS

(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");

Ví dụ

Bình đẳng nghiêm ngặt và không xác định

Bạn có thể sử dụng

function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2 và các toán tử bất bình đẳng và bất bình đẳng nghiêm ngặt để xác định xem một biến có giá trị hay không. Trong mã sau, biến
// DON'T DO THIS

(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");
5 không được khởi tạo và câu lệnh
// DON'T DO THIS

(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");
6 đánh giá là true.

let x;
if (x === undefined) {
  // these statements execute
} else {
  // these statements do not execute
}

Lưu ý: Toán tử bình đẳng nghiêm ngặt (trái ngược với toán tử bình đẳng tiêu chuẩn) phải được sử dụng ở đây, bởi vì

// DON'T DO THIS

(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");
7 cũng kiểm tra xem
// DON'T DO THIS

(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");
5 có phải là
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
0 hay không, trong khi bình đẳng nghiêm ngặt không. Điều này là do
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
0 không tương đương với
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2.
The strict equality operator (as opposed to the standard equality operator) must be used here, because
// DON'T DO THIS

(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");
7 also checks whether
// DON'T DO THIS

(() => {
  const undefined = "foo";
  console.log(undefined, typeof undefined); // foo string
})();

((undefined) => {
  console.log(undefined, typeof undefined); // foo string
})("foo");
5 is
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
0, while strict equality doesn't. This is because
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
0 is not equivalent to
function getFoobarFromUser(elementid) {
        var foobar = parseFloat(document.getElementById(elementid).innerHTML)
        if (isNaN(foobar)) foobar = 3.21;       // default value
        return(foobar.toFixed(2));
}
2.

Xem so sánh bình đẳng và sự giống nhau để biết chi tiết.

Toán tử loại và không xác định

Ngoài ra,

let x;
if (x === undefined) {
  // these statements execute
} else {
  // these statements do not execute
}
2 có thể được sử dụng:

let x;
if (typeof x === "undefined") {
  // these statements execute
}

Một lý do để sử dụng

let x;
if (x === undefined) {
  // these statements execute
} else {
  // these statements do not execute
}
2 là nó không gây ra lỗi nếu biến chưa được khai báo.

// x has not been declared before
// evaluates to true without errors
if (typeof x === 'undefined') {
  // these statements execute
}

// Throws a ReferenceError
if (x === undefined) {

}

Tuy nhiên, có một sự thay thế khác. JavaScript là một ngôn ngữ có phạm vi tĩnh, vì vậy biết nếu một biến được khai báo có thể được đọc bằng cách xem liệu nó có được khai báo trong một bối cảnh kèm theo hay không.

Phạm vi toàn cầu bị ràng buộc với đối tượng toàn cầu, do đó, việc kiểm tra sự tồn tại của một biến trong bối cảnh toàn cầu có thể được thực hiện bằng cách kiểm tra sự tồn tại của một thuộc tính trên đối tượng toàn cầu, ví dụ, sử dụng toán tử ____34, ví dụ::

if ("x" in window) {
  // These statements execute only if x is defined globally
}

Void Toán tử và không xác định

Toán tử

let x;
if (x === undefined) {
  // these statements execute
} else {
  // these statements do not execute
}
5 là một giải pháp thay thế thứ ba.

let x;
if (x === void 0) {
  // these statements execute
}

// y has not been declared before
if (y === void 0) {
  // throws Uncaught ReferenceError: y is not defined
}

Thông số kỹ thuật

Sự chỉ rõ
Thông số kỹ thuật ngôn ngữ Ecmascript # Sec-under được xác định
# sec-undefined

Tính tương thích của trình duyệt web

Bảng BCD chỉ tải trong trình duyệt

Xem thêm

Là không xác định một số javascript?

Một biến chưa được gán một giá trị là loại không xác định.Một phương thức hoặc câu lệnh cũng trả về không xác định nếu biến đang được đánh giá không có giá trị được gán.Một hàm trả về không xác định nếu một giá trị không được trả về. . A method or statement also returns undefined if the variable that is being evaluated does not have an assigned value. A function returns undefined if a value was not returned .

Làm cách nào để thay đổi nan của tôi thành số?

Để chuyển đổi NAN thành một số, chúng tôi sử dụng toán tử hoặc toán tử với NAN và bất kỳ số nào và toán tử hoặc toán tử sẽ trả về số đó.use the OR operator with NaN and any number and the OR operator will return that Number.

Không xác định == false trong javascript?

Giá trị boolean của không xác định là sai.Giá trị của không chỉ không xác định mà cả NULL, FALSE, NAN, Chuỗi trống cũng là sai.. The value of Not only undefined but also null, false, NaN, empty string is also false.

Tôi có thể trả lại không xác định trong JavaScript không?

Một biến không xác định hoặc bất cứ điều gì không có giá trị sẽ luôn trả về "không xác định" trong JavaScript.Điều này không giống như NULL, mặc dù thực tế là cả hai đều ngụ ý một trạng thái trống.Thông thường bạn sẽ gán một giá trị cho một biến sau khi bạn khai báo nó, nhưng điều này không phải lúc nào cũng đúng.. This is not the same as null, despite the fact that both imply an empty state. You'll typically assign a value to a variable after you declare it, but this is not always the case.