+ 3
typeof with && and ||
Please explain these. Thanks in advance! https://code.sololearn.com/WN3Vh2LXVR0F/?ref=app //undefined console.log(typeof(null)&&typeof(undefined)) //object console.log(typeof(null)||typeof(undefined)) //undefined console.log(typeof(true)&&typeof(undefined)) //boolean console.log(typeof(true)||typeof(undefined)) //object console.log(typeof(true)&&typeof(null)) //boolean console.log(typeof(true)||typeof(null))
4 Answers
+ 6
Heather Another way to look at this is as follows:
//Logical AND returns the 2nd operand if both are truthy. Otherwise, it returns a boolean false.
console.log( [truthy] && "undefined" )
console.log( [truthy] && "object" )
// Logical OR returns the 1st truthy operand. Otherwise, if both are [falsey], it returns a boolean false.
console.log( "object" || [N/A] )
console.log( "boolean" || [N/A] )
console.log( [falsey] || "object" )
console.log( [falsey] || "boolean" )
NOTES:
1. I placed the string value in the examples above to indicate the operand that is returned.
2. Strings with a length greater than 0 are [truthy]. Otherwise, 0 length strings are [falsey].
3. I placed [N/A] to indicate the operand isn't even evaluated in the Logical OR expressions.
I hope this all makes sense.
+ 2
Heather
The typeof operator returns a string indicating the type of the unevaluated operand.
Thus your lines of code in your post are actually:
console.log(string && string) and console.log(string || string)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof
And because logical operators convert its operand to boolean true/false and the string is not empty. The lines of code above are in essence
console.log(true && true) and console.log(true || true).
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Logical_operators
+ 2
Heather
I'm quoting MDN.
"Logical operators are typically used with Boolean (logical) values. When they are, they return a Boolean value. However, the && and || operators actually return the value of one of the specified operands, so if these operators are used with non-Boolean values, they will return a non-Boolean value." --MDN
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Description
0
But they don't return true. They return undefined, or object, or boolean.