记录几个面试题自我总结

Q1:请问a=?可以正常打印ok

var a=?

if(a==1&&a==2&&a==3){

console.log("ok")

}

答案:

var a={

i:0;

toString(){

return ++this.i

}

}

解答2:

var i=0

Object.defineProperty(window,"a",{

get(){

return ++i

}

})

Q2

var x=1;

function func(x,y=amouse(){x=2}){

x=3

y()

console.log(x)

}

func(5)

console.log(x)

答案: x=2, x=1  (从上到下)

var x=1;

function func(x,y=amouse(){x=2}){

var x=3

y()

console.log(x)

}

func(5)

console.log(x)

答案 3 ,1

Q4:如何实现一个函数,形如fn(1,2)(3),该函数执行以后得到的结果是6?

本质:参数求和

解法1:

let fn=function fn(...outArgs){

return function (...innerArgs){

return outArgs.concat(innerArgs).reducer((a,b)=>a+b)

}

}

解法2: (es6写法:)

let fn=(...outArgs)=>(...innerArgs)=>outArgs.concat(innerArgs).reducer((a,b)=>a+b)

let fn=(...outArgs)=>(...innerArgs)=>[...outArgs,...innerArgs].reducer((a,b)=>a+b)

Q5:

var x=10

~ function (x){

  console.log(x)

  x=x||20&&30||40

  console.log(x)

}()

console.log(x)

请确认输入结果?

答案解析:

自执行函数执行时因为没有实参,所有第一个  console.log(x),此时x为undefined,当代码执行到

  x=x||20&&30||40,因为优先级关系。会先执行20&30,得到的结果是30,继而变成x=x||30||40,

又由于x为undefined,所以成了x=undefined||30||40,第一个比较undefined||30,结果为30,所以代码成了x=30||40,===》而30||40的结果是30.所以最后x=30

所以匿名函数执行的结果是30.而最后一个console.log(x)。此时的x是全局作用域下的x,所以直接输出10

Q6: 请写出以下判断的结果:

console.log({}==false)

console.log([]==false)

console.log(![]==false)

答案解析:

(1)console.log({}==false)

内部执行顺序:由于是不同数据类型,所以==两边都需要转化为数字再进行比较。转化为数字,内部使用的是Number方法,{}转为数字是NaN,而false转为数字是0.所以他们并不相等。console.log({}==false)的结果是false

(2)console.log([]==false)

同理,由于[]和false类型不同。在进行==比较的时候都要进行转为数字再比较的步骤,[]转化为数字是0,而false转化为数字是0,所以console.log([]==false)的结果是true

(3)console.log(![]==false) 

在运算符优先级中,!的优先级要高于==,所以这个过程是先进行![]的转化,再进行==的比较

在进行布尔值的转换中。除了"",undefined,null,0和NaN被转化为false以外,其他的都被转化为true,所以![]==false)的过程是 先![]转为了!true==>false,最后是false==false,等式成立,所以最后的结果是true

-------------------------------------------------------------------------------------------------------------

==隐式类型转换规则

类型相同:

{}=={}  ---false  比较的是堆内存的地址

[]==[] ----false  比较的说是堆内存的地址

NaN==NaN ---false  NaN和任何其他类型比价都不相等

类型不同:

1 null==undefined ----true 但是换成===结果是false,因为类型不一样,剩下的

null/undefined和其他任何类型比较都不相等

2 字符串vs 对象 :要把对象转化为字符串

3 剩下如果==两边数据类型不一致,都要转化为数字进行比较

----------------------------------------------------------------------------------------------------------

其他类型转为布尔值的规则:

! 转化为false,

!! 转化为true

除了 0 ,"",undefined,null,NaN转为false以外,其他的都将被转化为true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值