var x = v || 10;
điều hành đó (các "logical" or "short-circuit" OR operator) thông thường sẽ kiểm tra giá trị của v
, và nếu nó là một giá trị "falsy" (tức là nó sẽ thất bại như một điều kiện được sử dụng trong một tuyên bố nếu), 10
trở thành giá trị của x
, nếu không v
không (và nếu 10
là một hàm, nó sẽ không bao giờ được thực hiện).
undefined
, null
và 0
là tất cả các ví dụ về giá trị giả mà biến có thể giữ (có, ngay cả giá trị đầu tiên) và toán tử (hoặc nếu câu lệnh) hoạt động tương ứng. Ngược lại, tất cả các đối tượng và mảng (không bao gồm null) là những giá trị "truthy", cho phép điều như thế này (sử dụng trong mã theo dõi Google Analytics):
var _gaq = _gaq || []; // Makes a new array _gaq if it is not already there
Tuy nhiên, nếu biến tham chiếu là thậm chí không được khai báo ở bất kỳ đâu trong chuỗi phạm vi, khi đó một ngoại lệ JavaScript sẽ xảy ra.
Một cách để tránh điều này là bằng cách tuyên bố tất cả các biến toàn cầu của bạn ngay từ đầu:
var iAmAGlobalVariable; // Holds the value undefined by default
Nếu đây là không thể, bạn nên sử dụng typeof
operator. Nó không cố gắng để đánh giá toán hạng của nó, và do đó một ngoại lệ sẽ không xảy ra:
var x;
if(typeof v != 'undefined' && v) {
x = v;
} else {
x = 10;
}
Hoặc thậm chí tốt hơn, nếu bạn biết rằng biến sẽ là một biến toàn cầu, bạn có thể coi nó như là một tài sản của toàn cầu (cửa sổ) đối tượng:
var x = window.v || 10;
Các công trình lớn! Tôi làm điều đó mỗi ngày. – Hemlock
Ý bạn là nó không phù hợp với bạn? Bạn có thể xây dựng? Không có giải pháp nào của bạn hoạt động khi v = 0 đó là một thực tế khác. – lazyboy
nếu bạn làm việc cụ thể với các số nguyên thì bạn nên sử dụng 'var x = v> 0? v: 10' – RobertPitt