1
var a = false == 1
console.log(a) // false
2
if(typeof(a) && (-true) + (+undefined) + '') {
console.log('pass')
} else {
console.log('no pass')
}
// 'pass'
原因:
console.log(typeof a) // 'undefined'
console.log(-true) // -1
console.log(-undefined) // NaN
(-true) + (+undefined) + ''
= -1 + NaN + ''
= 'NaN'
3
if(1 + 3 * 5 === 16) {
console.log('pass')
} else {
console.log('no pass')
}
// pass
4
console.log(!!' ' + !!'' - !!false || '未通过')
// 1
5
window.a || (window.a = '1')
console.log(window.a)
// 1
解释:括号优先级高,先算括号里的。所以,window.a的值是'1', 为真,直接返回window.a 的值
6
var fn = (
function test1(){
return 1
},
function test2(){
return '2'
}
)()
console.log(typeof fn)
// string
解释: 括号的逗号运算,返回的是最后一位。如: var num = (1, 2) => num=2
7
var a = 10
if(function b(){}) {
a += typeof(b)
}
console.log(a)
// 10undefined
解释:除了false, undefined, '', NaN, 0, null这六个的布尔值为fasle 以外,其余都为真,所以 if 语句执行;
再看typeof(b)为什么返回的是undefined,而不是function. 因为function b(){} 是放在 if 的括号里,那它就是表达式,表达式是忽略名字的,所以b 是undefined.