JavaSript面试常考

本文深入探讨了JavaScript中一些令人困惑的代码片段,包括变量声明、类型转换、运算符优先级和函数表达式的特殊行为。通过具体示例,揭示了这些谜题背后的原理,帮助读者更好地理解JavaScript的工作机制。

var a = false == 1
console.log(a) // false

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值