2012-01-04 39 views
14

Trong khi tìm kiếm thông qua một số mã (javascript), tôi thấy đoạn mã này:toán tử && trong Javascript

<script>window.Bootloader && Bootloader.done(["pQ27\/"]);</script> 

Những gì tôi không hiểu là những gì && đang làm gì ở đó, mã này là từ Facebook và rõ ràng là được rút gọn và/hoặc bị làm phiền, nhưng nó vẫn làm điều tương tự.

tl; dr: Nhà điều hành && làm gì ở đây?

Trả lời

18

&& đảm bảo rằng đối tượng/hàm Bootloader tồn tại trước khi gọi phương thức done trên đó. Mã này tận dụng lợi thế của mạch ngắn boolean để đảm bảo biểu thức đầu tiên được đánh giá là đúng trước khi thực hiện lệnh thứ hai. Xem mục nhập short-circuit evaluation wikipedia để có giải thích chi tiết hơn.

+1

Không có lớp nào trong JavaScript. Trình tải khởi động sẽ là một hàm hoặc đối tượng – paislee

+0

@paislee: Roger được cập nhật. – sdolan

+6

Nó không "đảm bảo" * Trình tải khởi động * là một hàm hoặc một đối tượng, nó chỉ kiểm tra nếu đối tượng * window * có thuộc tính * Bootloader * có giá trị là true. Nếu vậy, nó giả định rằng nó có thể gọi được. – RobG

14
window.Bootloader && Bootloader.done(["pQ27\/"]); 

nó tương đương với:

if(window.Bootloader) { 
    Bootloader.done(["pQ27\/"]); 
} 
8

&& là một nhà điều hành AND, giống như hầu hết những nơi khác. Có thực sự không có gì lạ về nó.

Hầu hết các ngôn ngữ, bao gồm JavaScript, sẽ ngừng đánh giá toán tử AND nếu toán hạng đầu tiên là sai.

Trong trường hợp này, nếu window.Bootloader không tồn tại, nó sẽ không hợp lệ, được đánh giá là sai, do đó JavaScript sẽ bỏ qua phần thứ hai.

Nếu nó là sự thật, nó tiếp tục và gọi Bootloader.done(...).

nghĩ về nó như một phím tắt cho if(window.Bootloader) { Bootloader.done(...) }

2

cũng & & điều hành trả về giá trị gặp đầu tiên thuộc loại này: null, không xác định, 0, false, NaN ""

ví dụ: nếu

var1 = 33 
var2 = 0 
var3 = 45 

var1 && var2 && var3 
returns 0 
Các vấn đề liên quan