Assignment 2.2

Create xor.js
Hi Hank, I came up with a few different approaches but ultimately settled on this one. For me personally it was the most concise and easiest to read. A quick review of my decisions:

##### Bang Bang *vs* Bang
```
!!firstName != !!lastName ? firstName || lastName : false;
```
Concise but somewhat obscure. Doesn't add any extra readability for me. I don't see any advantage to comparing the true boolean values here because I only want to know that they're not equivalent, which is more concisely done with a single bang.

##### Bitwise XOR *vs* Comparison Operator (!= or ==)
```
!firstName ^ !lastName ? firstName || lastName : false;
```
Again, this doesn't add any additional readability for me (possibly because I don't use bitwise operators very often). Since we're already dealing with boolean coercion by using the ! operator it seems more logical to me to use a comparison operator here, rather than do another type coercion to number by using a bitwise operator. 

##### Triple-equals (=== or !==) *vs* Double equals (== or !=)
```
!firstName !== !lastName ? firstName || lastName : false;
```
Triple-equals never does type coercion, which from my understanding is why it's usually the preferred equality expression. Since we've already established that we're dealing with coercion in this scenario it's unnecessary unless one simply wants to follow best practice.

##### Final solution
```
!firstName != !lastName ? firstName || lastName : false;
```
I easily read this as: convert these two values (strings) to bools and check that they're not equivalent (i.e. they're not both undefined/empty or both defined). If that's true return whichever value is defined, otherwise return false. 

So that's my take on it. Let me know what you think.