2013-03-17 8 views
41

Setting mặc định giá trị tùy chọn trong JavaScript thường được thực hiện thông qua các nhân vật ||Làm cách nào để đặt giá trị boolean mặc định trong JavaScript?

var Car = function(color) { 
    this.color = color || 'blue'; 
}; 

var myCar = new Car(); 
console.log(myCar.color); // 'blue' 

var myOtherCar = new Car('yellow'); 
console.log(myOtherCar.color); // 'yellow' 

đó làm việc vì colorundefinedundefined || String luôn là String. Tất nhiên cũng hoạt động theo cách khác xung quanh String || undefinedString. Khi hai số Strings xuất hiện, cái đầu tiên thắng 'this' || 'that''this'. Nó KHÔNG hoạt động theo cách khác xung quanh là 'that' || 'this''that'.

Câu hỏi đặt ra là: Làm thế nào tôi có thể đạt được cùng giá trị boolean?

Lấy ví dụ sau

var Car = function(hasWheels) { 
    this.hasWheels = hasWheels || true; 
} 

var myCar = new Car(); 
console.log(myCar.hasWheels); // true 

var myOtherCar = new Car(false) 
console.log(myOtherCar.hasWheels); // ALSO true !!!!!! 

Đối myCar nó hoạt động vì undefined || truetrue nhưng như bạn có thể nhìn thấy nó không làm việc cho myOtherCarfalse || truetrue. Thay đổi thứ tự không hữu ích khi true || false vẫn là true.

Vì vậy, tôi thiếu một số thứ ở đây hay đây là cách duy nhất để đặt giá trị mặc định?

this.hasWheels = (hasWheels === false) ? false: true 

Chúc mừng!

Trả lời

90

Bạn có thể làm điều này:

this.hasWheels = hasWheels !== false; 

Đó sẽ cho bạn một giá trị true trừ khi hasWheels là rõ ràng false . (Giá trị falsy khác, bao gồm nullundefined, sẽ dẫn đến true, mà tôi nghĩ là những gì bạn muốn.)

+0

Đó là thông minh! Tôi thích nó. – zemirco

+0

@zeMirco: Vì vậy, bạn đang thực sự yêu cầu tất cả các giá trị falsey ngoại trừ 'false' được coi là' true'? Nếu vậy, tôi tự hỏi tại sao bạn muốn sử dụng '|| 'ngay từ đầu. Rõ ràng một thử nghiệm rõ ràng cho 'false' sẽ là giải pháp đơn giản nhất. –

+0

@thesystem - Anh ấy không muốn sử dụng '|| '; nó đã được chuyển từ việc sử dụng '||' cho các giá trị không boolean. Câu hỏi đã được đăng, tôi nghĩ, bởi vì '||' là _not_ đang làm những gì cần thiết. –

6

Làm thế nào về:

this.hasWheels = (typeof hasWheels !== 'undefined') ? hasWheels : true; 

tùy chọn khác của bạn là:

this.hasWheels = arguments.length > 0 ? hasWheels : true; 
+2

Công việc này tốt, mặc dù tôi khuyên bạn nên sử dụng '? !! hasWheels' thay vì '? hasWheels' để đảm bảo rằng 'true' hoặc' false' (và không có gì khác) được gán cho 'this.hasWheels'. –

3

Bạn có thể sử dụng tính năng Default function parameters trong ECMA6. Hôm nay, ECMA6 vẫn chưa được hỗ trợ đầy đủ trong trình duyệt nhưng bạn có thể sử dụng babel và bắt đầu sử dụng các tính năng mới ngay lập tức.

Vì vậy, ví dụ ban đầu sẽ trở nên đơn giản như:

// specify default value for the hasWheels parameter 
var Car = function(hasWheels = true) { 
    this.hasWheels = hasWheels; 
} 

var myCar = new Car(); 
console.log(myCar.hasWheels); // true 

var myOtherCar = new Car(false) 
console.log(myOtherCar.hasWheels); // false 
+1

nhưng nếu ai đó vượt qua giá trị giả (nghĩa là chuỗi rỗng) 'this.hasWheels' sẽ được chỉ định chuỗi trống thay vì giá trị boolean. có lẽ muốn thêm 'hasWheels = (typeof hasWheels === 'boolean')? hasWheels: true; ' –

2

Có những khác biệt cần lưu ý từ câu trả lời được đăng.

var Var = function(value) { 
    this.value0 = value !== false; 
    this.value1 = value !== false && value !== 'false'; 
    this.value2 = arguments.length <= 0 ? true : arguments[0]; 
    this.value3 = arguments[0] === undefined ? true : arguments[0]; 
    this.value4 = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0]; 
}; 

        value0 value1 value2  value3   value4 
--------------------------------------------------------------------------- 
Var("")    true  true  true   true   true 
Var("''")   true  true  ''   ''    '' 
Var("0")    true  true  0    0    0 
Var("'0'")   true  true  '0'   '0'   '0' 
Var("NaN")   true  true  NaN   NaN   NaN 
Var("'NaN'")   true  true  'NaN'   'NaN'   'NaN' 
Var("null")   true  true  null   null   null 
Var("'null'")  true  true  'null'  'null'   'null' 
Var("undefined")  true  true  undefined  true   true 
Var("'undefined'") true  true  'undefined' 'undefined' 'undefined' 
Var("true")   true  true  true   true   true 
Var("'true'")  true  true  'true'  'true'   'true' 
Var("false")   false false false   false   false 
Var("'false'")  true  false 'false'  'false'  'false' 
  • value1 được làm đặc biệt là từ value0 cho chuỗi 'false' nếu người ta cần nó để được boolean false. Tôi thấy thư giãn này rất hữu ích.
  • value2value3 là sửa đổi các câu trả lời được đăng ban đầu cho tính nhất quán, không có kết quả thay đổi.
  • value4 là cách Babel biên dịch cho các thông số mặc định.