Hướng dẫn javascript declare variable in while loop - javascript khai báo biến trong vòng lặp while

Câu hỏi là một chút ngày, nhưng tôi nghĩ rằng câu trả lời đều bỏ lỡ một sự khác biệt quan trọng. Đó là, một vòng lặp while mong đợi một biểu thức đánh giá một điều kiện, tức là, một boolean hoặc giá trị có thể được chuyển đổi thành boolean. Xem tài liệu Mozilla để biết chi tiết.

Một gán thuần túy (không có khởi tạo) được ép buộc vào boolean thông qua giá trị trả về mặc định của nó (giá trị của phía bên phải).

A

Bạn có thể dễ dàng kiểm tra điều này trong bảng điều khiển của mình:

var foo = 42; // undefined
bar = 42      // 42

Chỉ riêng các giá trị trả lại không trả lời câu hỏi, vì undefined là FALSEY, nhưng cho thấy ngay cả khi JS cho phép bạn đặt var vào một điều kiện, nó sẽ luôn luôn đánh giá sai.

Những người khác đã đề cập đến các tuyên bố

const iterator = document.createNodeIterator(
  document,
  NodeFilter.SHOW_COMMENT,
);
let currentNode;
while (currentNode = iterator.nextNode()) {
  console.log(currentNode.textContent.trim());
}
2 và chúng cho phép khai báo và khởi tạo các biến. Điều này là đúng, nhưng tài liệu giải thích rằng
const iterator = document.createNodeIterator(
  document,
  NodeFilter.SHOW_COMMENT,
);
let currentNode;
while (currentNode = iterator.nextNode()) {
  console.log(currentNode.textContent.trim());
}
2 mong đợi một tuyên bố hoặc xét xử.

Ý kiến ​​có thể khác nhau, nhưng đối với tôi, tất cả những điều này làm tăng thêm sự nhất quán dễ hiểu không phải là một sự khó hiểu trong hành vi liên quan đến các vòng lặp. Một vòng lặp while được coi là một phiên bản lặp của câu lệnh

const iterator = document.createNodeIterator(
  document,
  NodeFilter.SHOW_COMMENT,
);
let currentNode;
while (currentNode = iterator.nextNode()) {
  console.log(currentNode.textContent.trim());
}
5 giống với vòng lặp
const iterator = document.createNodeIterator(
  document,
  NodeFilter.SHOW_COMMENT,
);
let currentNode;
while (currentNode = iterator.nextNode()) {
  console.log(currentNode.textContent.trim());
}
2. Nếu có sự khó hiểu trong tất cả những điều này, thì đó là sự phân kỳ bán buôn của
const iterator = document.createNodeIterator(
  document,
  NodeFilter.SHOW_COMMENT,
);
let currentNode;
while (currentNode = iterator.nextNode()) {
  console.log(currentNode.textContent.trim());
}
2 từ cú pháp bình thường của ngôn ngữ.

Trong một số trường hợp, có thể có ý nghĩa khi sử dụng một bài tập làm điều kiện-nhưng khi bạn làm, có một cú pháp thực hành tốt nhất mà bạn nên biết và làm theo.

Hãy xem xét ví dụ sau, lặp lại các nhận xét của tài liệu, đăng nhập chúng vào bảng điều khiển.

const iterator = document.createNodeIterator(
  document,
  NodeFilter.SHOW_COMMENT,
);
let currentNode;
while (currentNode = iterator.nextNode()) {
  console.log(currentNode.textContent.trim());
}

Đó không phải là một ví dụ thực hành tốt, do dòng sau đây cụ thể:

while (currentNode = iterator.nextNode()) {

Hiệu ứng của dòng đó là tốt - trong đó, mỗi lần tìm thấy một nút bình luận:

  1. const iterator = document.createNodeIterator(
      document,
      NodeFilter.SHOW_COMMENT,
    );
    let currentNode;
    while (currentNode = iterator.nextNode()) {
      console.log(currentNode.textContent.trim());
    }
    
    8 Trả về nút bình luận đó, được gán cho
    const iterator = document.createNodeIterator(
      document,
      NodeFilter.SHOW_COMMENT,
    );
    let currentNode;
    while (currentNode = iterator.nextNode()) {
      console.log(currentNode.textContent.trim());
    }
    
    9.
  2. Do đó, giá trị của
    while (currentNode = iterator.nextNode()) {
    
    0 là sự thật.
  3. Vì vậy, cuộc gọi
    while (currentNode = iterator.nextNode()) {
    
    1 thực thi và vòng lặp tiếp tục.

Sau đó, khi không còn các nút bình luận nào trong tài liệu:

  1. const iterator = document.createNodeIterator(
      document,
      NodeFilter.SHOW_COMMENT,
    );
    let currentNode;
    while (currentNode = iterator.nextNode()) {
      console.log(currentNode.textContent.trim());
    }
    
    8 trả về null.
  2. Do đó, giá trị của
    while (currentNode = iterator.nextNode()) {
    
    0 cũng là
    while (currentNode = iterator.nextNode()) {
    
    4, đó là giả.
  3. Vì vậy, vòng lặp kết thúc.

Nhưng mặc dù mã hoạt động như mong đợi, vấn đề với dòng cụ thể đó là: Các điều kiện thường sử dụng các toán tử so sánh như

while (currentNode = iterator.nextNode()) {
5, nhưng
while (currentNode = iterator.nextNode()) {
6 trong dòng đó không phải là toán tử so sánh - thay vào đó, đó là toán tử gán. Vì vậy,
while (currentNode = iterator.nextNode()) {
6 trông giống như đó là một lỗi đánh máy cho
while (currentNode = iterator.nextNode()) {
5 - mặc dù nó thực sự không phải là một lỗi đánh máy.

Do đó, trong các trường hợp như thế, một số IDE và các công cụ in mã như Eslint và JShint-để giúp bạn bắt được một lỗi đánh máy có thể để bạn có thể sửa nó-sẽ báo cáo một cảnh báo như sau:

Dự kiến ​​một biểu thức có điều kiện và thay vào đó thấy một bài tập.

Nhưng có một cách thực hành tốt nhất để tránh cảnh báo đó: làm cho mã được thể hiện rõ hơn cho thấy nó dự định điều kiện là liệu giá trị của bài tập

while (currentNode = iterator.nextNode()) {
0 có phải là sự thật hay không. Và bạn làm điều đó một cách tối thiểu bằng cách đặt các dấu ngoặc đơn bổ sung làm toán tử nhóm xung quanh nhiệm vụ:

const iterator = document.createNodeIterator(
  document, NodeFilter.SHOW_COMMENT);
let currentNode;
while ((currentNode = iterator.nextNode())) {
  console.log(currentNode.textContent.trim());
}

Nhưng thực tế thực sự tốt nhất là tiến thêm một bước và làm cho mã rõ ràng hơn - bằng cách thêm một toán tử so sánh để biến điều kiện thành một so sánh rõ ràng:

const iterator = document.createNodeIterator(
  document, NodeFilter.SHOW_COMMENT);
let currentNode;
while ((currentNode = iterator.nextNode()) !== null) {
  console.log(currentNode.textContent.trim());
}

Cùng với việc ngăn chặn bất kỳ cảnh báo nào trong IDE và các công cụ in mã, những gì mã đó thực sự đang làm sẽ rõ ràng hơn nhiều đối với bất kỳ ai đi cùng sau này, những người cần đọc và hiểu nó hoặc sửa đổi nó.

Bạn có thể khai báo một biến trong vòng lặp thời gian không?

Có. Bạn có thể khai báo một biến bên trong bất kỳ vòng lặp nào (bao gồm làm trong khi vòng lặp. you can declare a variable inside any loop(includes do while loop.

Bạn có thể khai báo các biến trong một JavaScript vòng lặp không?

Khóa học JavaScript đầy đủ đầy đủ!Vì vậy, trong JavaScript quá, các biến có thể được khai báo bên trong hoặc bên ngoài vòng lặp theo người dùng dễ dàng ở bất cứ đâu trong cơ thể chức năng.Và ngay cả các khai báo biến không phải là các lệnh được thực thi tại thời gian chạy.the variables can be declared inside or outside the loop as per the users ease anywhere in the function body. And even variable declarations are not commands that are executed at the run-time.

Bạn có thể khai báo một biến trong câu lệnh IF JavaScript không?

Phạm vi biến đổi.Java cho phép bạn khai báo các biến trong phần thân của một thời gian hoặc nếu câu lệnh, nhưng điều quan trọng là phải nhớ những điều sau đây: một biến chỉ có sẵn từ tuyên bố của nó cho đến cuối niềng răng mà nó được khai báo.Java allows you to declare variables within the body of a while or if statement, but it's important to remember the following: A variable is available only from its declaration down to the end of the braces in which it is declared.

Chúng ta có thể sử dụng trong khi vòng lặp trong JavaScript không?

Các vòng lặp có thể thực thi một khối mã miễn là một điều kiện được chỉ định là đúng..