Hướng dẫn javascript declare variable inside if condition - javascript khai báo biến bên trong điều kiện if

143

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 đã chuyển một năm trước từ các ngôn ngữ OO cổ điển như Java sang JavaScript. Mã sau đây chắc chắn không được khuyến nghị (hoặc thậm chí không đúng) trong Java:

if(dayNumber = getClickedDayNumber(dayInfo))
{
    alert("day number found : " + dayNumber);
}
function getClickedDayNumber(dayInfo)
{
    dayNumber = dayInfo.indexOf("fc-day");
    if(dayNumber != -1) //substring found
    {
        //normally any calendar month consists of "40" days, so this will definitely pick up its day number.
        return parseInt(dayInfo.substring(dayNumber+6, dayNumber+8));
    }
    return false;
}

Về cơ bản, tôi chỉ phát hiện ra rằng tôi có thể gán một biến cho một giá trị trong câu lệnh IF điều kiện và ngay lập tức kiểm tra giá trị được gán như thể nó là boolean.

Để đặt cược an toàn hơn, tôi thường tách nó thành hai dòng mã, hãy gán trước sau đó kiểm tra biến, nhưng bây giờ tôi đã tìm thấy điều này, tôi chỉ tự hỏi liệu nó có thực hành tốt hay không trong mắt các nhà phát triển JavaScript có kinh nghiệm?

Hướng dẫn javascript declare variable inside if condition - javascript khai báo biến bên trong điều kiện if

Carson

4.5522 Huy hiệu vàng29 Huy hiệu bạc38 Huy hiệu Đồng2 gold badges29 silver badges38 bronze badges

Hỏi ngày 5 tháng 4 năm 2010 lúc 1:49Apr 5, 2010 at 1:49

Michael Maomichael MaoMichael Mao

9.61823 Huy hiệu vàng75 Huy hiệu bạc91 Huy hiệu Đồng23 gold badges75 silver badges91 bronze badges

1

Tôi sẽ không giới thiệu nó. Vấn đề là, nó trông giống như một lỗi phổ biến khi bạn cố gắng so sánh các giá trị, nhưng sử dụng một

if (value = someFunction()) {
    ...
}
2 thay vì
if (value = someFunction()) {
    ...
}
3 hoặc
if (value = someFunction()) {
    ...
}
4. Ví dụ, khi bạn thấy điều này:

if (value = someFunction()) {
    ...
}

Bạn không biết đó có phải là những gì họ có nghĩa là làm hay nếu họ có ý định viết bài này:

if (value == someFunction()) {
    ...
}

Nếu bạn thực sự muốn thực hiện bài tập tại chỗ, tôi cũng khuyên bạn nên thực hiện một so sánh rõ ràng:

if ((value = someFunction()) === ) {
    ...
}

Đã trả lời ngày 5 tháng 4 năm 2010 lúc 2:05Apr 5, 2010 at 2:05

Matthew CrumLeymatthew CrumleyMatthew Crumley

Huy hiệu vàng 100k2424 gold badges107 silver badges128 bronze badges

9

Tôi thấy không có bằng chứng cho thấy nó không phải là thực hành tốt. Vâng, nó có thể trông giống như một sai lầm nhưng điều đó dễ dàng được khắc phục bằng cách bình luận hợp lý. Lấy ví dụ:

if (x = processorIntensiveFunction()) { // declaration inside if intended
    alert(x);
}

Tại sao chức năng đó được phép chạy lần thứ 2 với:

alert(processorIntensiveFunction());

Bởi vì phiên bản đầu tiên trông tệ? Tôi không thể đồng ý với logic đó.

Borisdiakur

9.3177 Huy hiệu vàng63 Huy hiệu bạc95 Huy hiệu Đồng7 gold badges63 silver badges95 bronze badges

Đã trả lời ngày 13 tháng 3 năm 2013 lúc 6:47Mar 13, 2013 at 6:47

7

Tôi đã làm điều đó nhiều lần. Để bỏ qua cảnh báo JavaScript, tôi thêm hai parens:

if ((result = get_something())) { }

Bạn nên tránh nó, nếu bạn thực sự muốn sử dụng nó, hãy viết một nhận xét ở trên nó nói những gì bạn đang làm.

Đã trả lời ngày 5 tháng 4 năm 2010 lúc 1:53Apr 5, 2010 at 1:53

5

Có một trường hợp khi bạn làm điều đó, với ____ 15 vòng. Khi đọc các tệp, bạn thường thích như thế này:
When reading files, you usualy do like this:

void readFile(String pathToFile) {
    // Create a FileInputStream object
    FileInputStream fileIn = null;
    try {
        // Create the FileInputStream
        fileIn = new FileInputStream(pathToFile);
        // Create a variable to store the current line's text in
        String currentLine;
        // While the file has lines left, read the next line,
        // store it in the variable and do whatever is in the loop
        while((currentLine = in.readLine()) != null) {
            // Print out the current line in the console
            // (you can do whatever you want with the line. this is just an example)
            System.out.println(currentLine);
        }
    } catch(IOException e) {
        // Handle exception
    } finally {
        try {
            // Close the FileInputStream
            fileIn.close();
        } catch(IOException e) {
            // Handle exception
        }
    }
}

Nhìn vào ________ 15 vòng ở dòng 9. Ở đó, một dòng mới được đọc và lưu trữ trong một biến, và sau đó nội dung của vòng lặp được chạy. Tôi biết đây không phải là một câu nói 17, nhưng tôi đoán một vòng lặp trong thời gian cũng có thể được đưa vào câu hỏi của bạn.

Lý do cho điều này là khi sử dụng

if (value = someFunction()) {
    ...
}
8, mỗi khi bạn gọi
if (value = someFunction()) {
    ...
}
9, nó sẽ đọc dòng tiếp theo trong tệp, vì vậy nếu bạn đã gọi nó từ vòng lặp chỉ bằng
if (value == someFunction()) {
    ...
}
0 mà không cần gán biến, thay vì gọi
if (value == someFunction()) {
    ...
}
1 và Sau đó gọi nó từ bên trong vòng lặp, bạn sẽ chỉ nhận được mỗi dòng thứ hai.

Hy vọng bạn hiểu, và chúc may mắn!

User229044 ♦

226K40 Huy hiệu vàng325 Huy hiệu bạc334 Huy hiệu đồng40 gold badges325 silver badges334 bronze badges

Đã trả lời ngày 29 tháng 11 năm 2014 lúc 14:44Nov 29, 2014 at 14:44

Hướng dẫn javascript declare variable inside if condition - javascript khai báo biến bên trong điều kiện if

Daniel Kvistdaniel KvistDaniel Kvist

2.9225 huy hiệu vàng26 Huy hiệu bạc49 Huy hiệu đồng5 gold badges26 silver badges49 bronze badges

Nếu bạn tham khảo cuốn sách Martin Fowlers Refactoring cải thiện thiết kế của mã hiện có! Sau đó, có một số trường hợp nó sẽ là thực hành tốt, ví dụ. Các điều kiện phức tạp dài để sử dụng một chức năng hoặc cuộc gọi phương thức để khẳng định trường hợp của bạn:

"Motivation

Một trong những lĩnh vực phổ biến nhất của sự phức tạp trong một chương trình nằm ở logic có điều kiện phức tạp. Khi bạn viết mã vào các điều kiện kiểm tra và làm nhiều việc khác nhau tùy thuộc vào các điều kiện khác nhau, bạn nhanh chóng kết thúc bằng một phương pháp khá dài. Độ dài của một phương pháp tự nó là một yếu tố làm cho nó khó đọc hơn, nhưng điều kiện làm tăng độ khó. Vấn đề thường nằm ở thực tế là mã, cả trong điều kiện kiểm tra và trong các hành động, cho bạn biết điều gì xảy ra nhưng có thể dễ dàng che khuất tại sao nó xảy ra.

Như với bất kỳ khối mã lớn nào, bạn có thể làm cho ý định của mình rõ ràng hơn bằng cách phân tách nó và thay thế các đoạn mã bằng một cuộc gọi phương thức được đặt theo ý định của khối mã đó. > Với các điều kiện bạn có thể nhận được lợi ích thêm bằng cách thực hiện điều này cho phần có điều kiện và từng lựa chọn thay thế. Bằng cách này, bạn làm nổi bật điều kiện và làm cho nó rõ ràng những gì bạn> đang phân nhánh. Bạn cũng làm nổi bật lý do cho sự phân nhánh. "

Và vâng, câu trả lời của anh ấy cũng có giá trị cho việc triển khai Java. Nó không gán hàm có điều kiện cho một biến mặc dù trong các ví dụ.

Đã trả lời ngày 18 tháng 6 năm 2013 lúc 21:03Jun 18, 2013 at 21:03

Allanallanallan

611 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges

Tôi đến đây từ Golang, nơi phổ biến để thấy một cái gì đó giống như

if (err := doSomething(); err != nil) {
    return nil, err
}

Trong đó

if (value == someFunction()) {
    ...
}
2 chỉ được đặt vào khối
if (value = someFunction()) {
    ...
}
7 đó. Như vậy, đây là những gì tôi đang làm trong ES6, có vẻ khá xấu xí, nhưng không tạo ra các quy tắc Eslint khá nghiêm ngặt của tôi, và đạt được điều tương tự.

{
  const err = doSomething()
  if (err != null) {
    return (null, err)
  }
}

Các niềng răng bổ sung xác định một mới, uh, "phạm vi từ vựng"? Điều đó có nghĩa là tôi có thể sử dụng

if (value == someFunction()) {
    ...
}
4 và
if (value == someFunction()) {
    ...
}
2 không có sẵn cho khối bên ngoài.

Đã trả lời ngày 3 tháng 5 năm 2019 lúc 13:15May 3, 2019 at 13:15

Adam Barnesadam BarnesAdam Barnes

2.75019 huy hiệu bạc24 Huy hiệu đồng19 silver badges24 bronze badges

Bạn cũng có thể làm điều này trong Java. Và không, nó không phải là một thực hành tốt. :)

.

Đã trả lời ngày 5 tháng 4 năm 2010 lúc 1:50Apr 5, 2010 at 1:50

Hướng dẫn javascript declare variable inside if condition - javascript khai báo biến bên trong điều kiện if

Ben Zottoben ZottoBen Zotto

69.4K23 Huy hiệu vàng138 Huy hiệu bạc204 Huy hiệu đồng23 gold badges138 silver badges204 bronze badges

8

Bạn cũng có thể thực hiện các bài tập trong các câu lệnh IF trong Java. Một ví dụ điển hình sẽ là đọc một cái gì đó và viết nó ra:

http://www.exampledepot.com/egs/java.io/CopyFile.html?l=new

Mật mã:

if (value = someFunction()) {
    ...
}
0

Đã trả lời ngày 5 tháng 4 năm 2010 lúc 6:44Apr 5, 2010 at 6:44

NitrodistnitrodistNitrodist

1.5365 huy hiệu vàng23 Huy hiệu bạc34 Huy hiệu đồng5 gold badges23 silver badges34 bronze badges

3

Đó không phải là thực hành tốt. Bạn sẽ sớm bối rối về nó. Nó trông tương tự với một lỗi phổ biến: sử dụng sai "=" và "==".

Bạn nên chia nó thành 2 dòng mã. Nó không chỉ giúp làm cho mã rõ ràng hơn, mà còn dễ dàng tái cấu trúc trong tương lai. Hãy tưởng tượng rằng bạn thay đổi điều kiện nếu điều kiện? Bạn có thể vô tình xóa dòng và biến của bạn không còn nhận được giá trị được gán cho nó.

Đã trả lời ngày 5 tháng 4 năm 2010 lúc 2:30Apr 5, 2010 at 2:30

Hướng dẫn javascript declare variable inside if condition - javascript khai báo biến bên trong điều kiện if

THETHANGNTHETHANGNthethanghn

3092 Huy hiệu vàng5 Huy hiệu bạc21 Huy hiệu đồng2 gold badges5 silver badges21 bronze badges

3

Bạn có thể làm một cái gì đó như vậy:

if (value = someFunction()) {
    ...
}
1

Đã trả lời ngày 1 tháng 8 năm 2016 lúc 12:38Aug 1, 2016 at 12:38

Joseph Le Brechjoseph Le BrechJoseph Le Brech

6.47711 Huy hiệu vàng46 Huy hiệu bạc84 Huy hiệu đồng11 gold badges46 silver badges84 bronze badges

Bạn có thể xác định một biến bên trong một câu lệnh if javaScript không?

Có, bạn có thể gán giá trị của biến bên trong nếu..

Làm thế nào khai báo biến trong điều kiện nếu điều kiện?

Nếu bạn chưa quen với cú pháp được sử dụng trong mẫu mã, nếu (int i = 5) {là một cách hoàn toàn hợp lệ để khai báo và xác định một biến, thì hãy sử dụng nó bên trong câu lệnh IF đã cho.Nó cho phép chúng tôi viết mã terser, rõ ràng hơn, đồng thời tránh giới hạn phạm vi của một biến.if (int i = 5) { is a perfectly valid way of declaring and defining a variable, then using it inside the given if statement. It allows us to write terser, clearer code, while also avoiding limiting the scope of a variable.

Bạn có thể khai báo một biến trong một hàm javascript không?

Một hàm trong JavaScript xác định một phạm vi cho các biến được khai báo bằng Var, LET và Const.Bất kỳ biến nào được khai báo trong chức năng đó chỉ có thể truy cập được từ hàm đó và bất kỳ chức năng lồng nhau nào.Một khối mã (nếu, cho, v.v.) chỉ định phạm vi cho các biến được khai báo với các từ khóa LET và const. . Any variable declared within that function is only accessible from that function and any nested functions. A code block ( if , for , etc.) defines a scope only for variables declared with the let and const keywords.

Làm thế nào để bạn sử dụng nếu các biến câu lệnh?

Nếu bạn xác định biến bên trong câu lệnh IF, thì nó sẽ chỉ hiển thị bên trong phạm vi của câu lệnh IF, bao gồm chính câu lệnh cộng với các câu lệnh con.Bạn nên xác định biến bên ngoài phạm vi và sau đó cập nhật giá trị của nó bên trong câu lệnh IF.define the variable outside the scope and then update its value inside the if statement.