2009-05-06 33 views
6
Attacklab.wmd_env.buttons=Attacklab.wmd_env.buttons||_4; 

những gì hiện các || làm gì trong trường hợp này?
thêm _4 đến các mảng đó là Attacklab.wmd_env.buttons?|| nhà điều hành làm gì?

+4

Hãy sửa tiêu đề. – rkb

+4

Wow phải mất 7 nỗ lực để có được danh hiệu đúng ... – Pool

Trả lời

18

Toán tử || trong JavaScript trả về giá trị ở bên trái nếu giá trị đó không đánh giá là false, nếu không giá trị sẽ trả về giá trị ở bên phải.

Từ Mozilla's Core JavaScript 1.5 Reference:

expr1 || expr2
Returns expr1 nếu nó có thể được chuyển đổi sang true; nếu không, trả về expr2. Do đó, khi được sử dụng với các giá trị Boolean, || trả về true nếu toán hạng là đúng; nếu cả hai đều sai, trả về false.

Vì vậy, trong trường hợp này, nếu Attacklab.wmd_env.buttons không có giá trị, giá trị này sẽ đặt giá trị là _4.

+0

Đó là lạ mà MDC sử dụng chứ không phải mơ hồ "Returns expr1 nếu nó ** có thể được chuyển đổi ** true". Nó không thực sự về "có thể được chuyển đổi", đó là về biểu thức giá trị trả về. – kangax

8

Nếu Attacklab.wmd_env.buttonsnull hoặc undefined, giá trị này sẽ được đặt thành giá trị mặc định _4.

12

Đó là một cách ưa thích của văn bản

if(!Attacklab.wmd_env.buttons) 
    Attacklab.wmd_env.buttons = _4; 

Thật tuyệt cho việc cung cấp các giá trị mặc định. Hãy nhớ rằng không chỉ nullundefined sẽ kích hoạt điều kiện, mà còn là 0, false'', tức là mọi thứ được coi là false trong ngữ cảnh boolean.

+0

+1 để liệt kê rõ ràng giá trị nào được đánh giá là false –

+0

Và, tất nhiên, 'NaN';) – kangax

+0

@kangax: yup, đó là điều duy nhất bị thiếu trong danh sách (xem ECMA-262, mục 9.2) – Christoph

4

Các || toán tử kiểm tra xem giá trị được cung cấp ở phía bên trái của biểu thức có sai không (trong ngữ cảnh boolean). Nếu vậy nó trả về một giá trị thay thế được chỉ ra bởi phía bên phải của biểu thức. Nếu không, nó sẽ trả về giá trị ban đầu.

Vì vậy, ví dụ đoạn mã sau sẽ thiết lập 'Foo' đến một giá trị mặc định nếu nó là null:

 
Foo = Foo || "Default Value" 

này đôi khi được gọi là các nhà điều hành coalescing. Nó được hỗ trợ bằng các ngôn ngữ khác như Ruby và Perl. C# có ?? nhà điều hành làm điều tương tự.

+0

Vì vậy, với câu trả lời này anh ta biết nó được gọi là gì, và những ngôn ngữ khác sử dụng nó, và thậm chí cú pháp khác trong C# ... và anh ta vẫn không biết nó làm gì. – Beska

+0

Điểm tốt, có lẽ tôi nên để lại một bình luận. Dù sao, câu trả lời của tôi đã được cập nhật. –

+0

+1 cho tên chính xác! Không khác SO câu hỏi/câu trả lời dường như muốn từ bỏ điều đó ... đã giúp tôi tìm ra tương đương trong XQuery (nó để cho $ foo: = ($ foo "giá trị mặc định") [1] cho bất cứ ai tò mò). –