2012-06-16 35 views
5

Hãy tha thứ cho tiếng Anh của tôi. Tôi không phải là người bản ngữ.Làm cách nào để viết || biểu hiện trong Javascript trong đó 0 không được coi là giá trị giả?

Vấn đề của tôi đến khi tôi viết code như thế này

luminosity = settings.luminosity || 50; 
opacity = settings.opacity || 100; 

Vấn đề là 0 được coi là một giá trị hợp lệ, nhưng nó sẽ được bỏ qua vì 0 là falsy trong Javascript và nó sẽ thiết lập để giá trị mặc định ở bên phải của ||.

Có cách nào để sửa lỗi để 0 không được coi là bị lỗi không?

Ngay bây giờ tôi đang làm

luminosity = "luminosity" in settings ? settings.luminosity : 50; 

nhưng tôi không thích điều đó vì nó là quá lâu.

+1

Tôi không nghĩ bạn có thể viết ngắn hơn thế. Bên cạnh đó, cách tiếp cận của bạn cũng dễ đọc, vì vậy tôi thậm chí sẽ không cố gắng thay đổi nó. – user123444555621

Trả lời

2

Tất cả bạn cần làm là viết một hàm helper ...

function ifNotSet(val, other) { 
    return typeof val === "undefined" ? other : val; 
} 
2

Bạn có thể chuyển nó sang chuỗi '0'truthy:

luminosity = settings.luminosity === 0 ? '' + settings.luminosity : settings.luminosity || 50; 
opacity = settings.opacity === 0 ? '' + settings.opacity : settings.opacity || 100; 

Hoặc bạn chỉ có thể sử dụng điều này phụ thuộc vào đầu vào hoặc yêu cầu của bạn:

luminosity = '' + settings.luminosity || 50; 
opacity = '' + settings.opacity || 100; 

'' + number là viết tắt để chuyển đổi một số chuỗi .

+0

''' + undefined' là' "undefined" ', do đó, điều này không giải quyết được vấn đề – user123444555621

2

Cách phổ biến để có tùy chọn/cài đặt mặc định là .extend() method in jQuery. JS thuần túy cũng có phương pháp này nhưng với một số khác nhau.

/* merge object2 into object1 */ 
$.extend(object1, object2); 

Đây là những gì bạn cần:

var defaultSetting = {luminosity : 50, opacity : 100}; 
setting = $.extend({}, defaultSetting, setting); 
+0

Tôi tin rằng nó phải là:' setting = $ .extend ({}, defaultSetting, setting); '. Trong câu trả lời được đăng ở trên, các thuộc tính mặc địnhViết ghi đè lên các thuộc tính trong cài đặt, ngay cả khi các thuộc tính trong cài đặt đã được xác định. –

+0

vâng, bạn nói đúng. –

+1

Không có đề cập đến jQuery trong câu hỏi. –

1

Việc điều chỉnh phiên bản ban đầu của @ đang Tooraj của :

var setting = {luminosity:0}; 
var defaultSetting = {luminosity:50, opacity:100}; 

setting = $.extend({}, defaultSetting, setting); 

// setting now has a value of {luminosity:0, opacity:100} 

Tôi chưa từng làm điều này trước đây. Nhưng có vẻ như nó hoạt động tốt trong FF, Chrome và IE9.

Các vấn đề liên quan