几道面试题

var a = false + 1;
// 有+号,false隐式转化为0,再 0+1 = 1
console.log(a); // 1


var b = false == 1;
// false转化为0
console.log(b); // false


if (typeof(a) && (-true) + (+undefined) + '') {
    console.log('通过了');
} else {
    console.log('没通过');
}
// 输出:通过了
console.log(typeof(a)); // 'undefined'
console.log(-true); // -1
console.log(+undefined); // NaN
console.log(+undefined - 1); // NaN
console.log(+undefined - 1 + ''); // 'NaN'


if (1 + 5 * '3' == 16) { // === 也通过了
    console.log('通过了');
} else {
    console.log('没通过');
}
// * 会将字符串3转化为数字3
// 输出:通过了


console.log(!!' ' + !!'' - !!false || '没通过'); // 1
// 计算过程如下:
console.log(!!' '); // true
console.log(!!''); // false
console.log(!!false); // false
console.log(!!' ' + !!'' - !!false); // 1 + 0 - 0 = 1


window.a || (window.a = '1');
// 由于括号优先级较高,先赋值,再或运算
console.log(window.a); // 1