# You Deserve It! (Boolean Logic Operator ||)

#1

Hi beautiful code genius'. Would someone please explain why the add method within the cashRegister object utilizes the || boolean logic operator? I'm not sure what the purpose of this is.

This part:

`` this.total += (itemCost || 0);``

My code should work, but here it is anyway:

``````function StaffMember(name,discountPercent){
this.name = name;
this.discountPercent = discountPercent;
}

var sally = new StaffMember("Sally",5);
var bob = new StaffMember("Bob",10);

// Create yourself again as 'me' with a staff discount of 20%
var me = new StaffMember("Chris",20);

var cashRegister = {
total:0,
lastTransactionAmount: 0,
this.total += (itemCost || 0);
this.lastTransactionAmount = itemCost;
},
scan: function(item,quantity){
switch (item){
case "eggs": this.add(0.98 * quantity); break;
case "milk": this.add(1.23 * quantity); break;
case "magazine": this.add(4.99 * quantity); break;
case "chocolate": this.add(0.45 * quantity); break;
}
return true;
},
voidLastTransaction : function(){
this.total -= this.lastTransactionAmount;
this.lastTransactionAmount = 0;
},
// Create a new method applyStaffDiscount here
applyStaffDiscount: function(employee){
this.total -= this.total*(employee.discountPercent/100);
}

};

cashRegister.scan('eggs',1);
cashRegister.scan('milk',1);
cashRegister.scan('magazine',3);
// Apply your staff discount by passing the 'me' object
// to applyStaffDiscount
cashRegister.applyStaffDiscount(me);

// Show the total bill

#2

If Javascript expects a Boolean `true` or `false`
and it is presented something else
it will interpret it to a `truthy` or `falsy` Value
https://developer.mozilla.org/en-US/docs/Glossary/Falsy
https://developer.mozilla.org/en-US/docs/Glossary/Truthy
Thus if you call the `cashRegister.scan()` Method
like
`cashRegister.scan("eggs");`
that would result in a
`this.add(0.98 * undefined);` ==> `this.add( undefined );`
therefore `itemCost` is `undefined`

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators
for the OR explanation

``````Logical OR (||)
expr1 || expr2
1.Returns expr1 if it can be converted to true; otherwise, returns expr2.
Thus, when used with Boolean values,
2.|| returns true if either operand can be converted to true;
3.if both can be converted to false, returns false.``````

In our case `( undefined || 0 )` would =return= `0`

#3

Makes sense! Thanks a lot for taking the time to write such a comprehensive answers. You are cool!

#4

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.