2009-09-04 38 views
15

Tôi đang sử dụng thư viện JS lớn để thực hiện các thao tác vẽ nhất định trong canvas. Xem xét mã thư viện (để thực hiện các thay đổi có sức chứa), tôi đã chạy vào '||' nhà điều hành đang được sử dụng trong một thời trang mà chắc chắn không nên đánh giá Boolean. Điều này có nghĩa rằng đây là một nhà điều hành khác nhau hoặc tôi thiếu một cái gì đó hiển nhiên? Một ví dụ sau:Javascript || nhà điều hành

var $time = Date.now || function(){ 
return +new Date; 
}; 
+0

Tôi đoán nó sẽ là nếu Date.now vì một lý do nào đó trả về 0, sau đó bạn sẽ đặt $ time thành giá trị trả về của hàm ...? – peirix

+0

@peirix: Bạn đã đoán sai. $ time sẽ là một hàm trả về ngày hiện tại. Nó được thiết lập là một bí danh của Date.now nếu nó được định nghĩa (không sai) hoặc hàm được cung cấp khác. –

+0

Ah, đó là lý do tại sao tôi không đặt nó làm câu trả lời.Không có cách nào để đưa ra một bình luận: p Vậy ta sẽ phải biết thêm về biến 'Date.now' để biết đầy đủ về cách thức này sẽ hoạt động như thế nào? – peirix

Trả lời

13

|| operator đánh giá toán hạng đầu tiên nếu nó có thể được chuyển thành đúng hoặc toán hạng cuối. Vì vậy, trong ví dụ $time của bạn sẽ là Date.now nếu nó tồn tại hoặc chức năng được khai báo khác.

+0

Toán tử không sai đầu tiên, nghĩa là. –

+10

Không phải toán hạng đầu tiên có thể được chuyển thành true. Biểu thức cuối cùng được sử dụng ngay cả khi nó được chuyển thành false. – googletorp

0

Điều này rất phổ biến là javascript. Nếu Data.now ước lượng là true, thì $ time được đặt thành giá trị đó, nếu không nó sẽ được đặt thành hàm.

+0

Hàm này không có() gắn với dấu đóng, vì vậy $ time được đặt thành hàm, không phải là đầu ra. – Quentin

+0

Ah có bạn là chính xác bị mất rằng trong vội vàng. Đã cập nhật. – googletorp

0

Tôi tin rằng mã đang nói nếu biến số DateTime.now không tồn tại, thay vào đó trả lại kết quả của +new Date.

+1

Có thể nói DateTime.now là '', 0, false, null –

0

Toán tử || đang được sử dụng để gán giá trị cho $time trong ví dụ.

Nếu Date.now đánh giá sai, thì $time được gán giá trị ở bên phải của toán tử || (trong trường hợp này là hàm). Nếu Date.now đánh giá là đúng, sau đó là ngắn gọn và gán giá trị của Date.now thành $time

17

Đã có câu trả lời được chấp nhận, nhưng tôi muốn đề cập đến, OR-Nhà điều hành cũng được gọi là Nhà điều hành mặc định, bởi vì nó không trả về một boolean, mà thay vào đó là đối số bàn tay trái hoặc phải.

Tương tự với toán tử AND-Operator, còn được gọi là guard-Operator.

Check-out crockford's Survey of the JavaScript Programming Language để biết thêm chi tiết:

Nhà điều hành & & thường được gọi là logic và. Nó cũng có thể được gọi là bảo vệ. Nếu toán hạng đầu tiên là false, null, undefined, "" (chuỗi rỗng), hoặc số 0 thì nó trả về toán hạng đầu tiên. Nếu không, nó sẽ trả về toán hạng thứ hai. Điều này cung cấp một cách thuận tiện để viết kiểm tra không hợp lệ:

var value = p & & p.name;/* Giá trị tên sẽ chỉ được truy xuất từ ​​p nếu p có giá trị, tránh lỗi. */

|| toán tử thường được gọi là logic hoặc. Nó cũng có thể được gọi là mặc định. Nếu toán hạng đầu tiên là false, null, undefined, "" (chuỗi rỗng), hoặc số 0, thì nó trả về toán hạng thứ hai. Nếu không, nó trả về toán hạng đầu tiên. Điều này cung cấp một cách thuận tiện để chỉ định các giá trị mặc định:

giá trị = v || 10;/* Sử dụng giá trị của v, nhưng nếu v không có giá trị, hãy sử dụng 10 giá trị thay thế. */