类型转化一些易出错的面试题

一、如何实现下面代码

var a = ???
if(a == 1 && a == 2 && a == 3){
    console.log(1)
}

//如何编写a才能打印出1

  思路:要想正确打印出1,那么按照代码所示,就必须a既等于1,又等于2,又等于3,这样一看好像不太可能实现,但是我们发现a和这些数字进行比较的时候是==,会进行隐式转化,那么如果把a设计为复杂数据类型,这样每次进行隐式转化的时候都会调用valueof()方法,我们就能重写valueof(),实现这个代码。

var a = {
    i: 0,
    valueof: function(){
        return ++a.i            //在这里返回i值,每次调用之前,都把i值+1
    }
}

二、空数组和空对象的一些隐式转化

js面试题大坑——隐式类型转换

三、null和undefined的区别

 null:表示此处不应该有值

  如:原型链的终点__prototype__为null

 undefined:表示此处有值但未定义

  如: 1、变量定义了但是还没有赋值

          2、函数没有返回值

          3、函数的参数没有传入

var a    //a为undefined
var f = function(){ }        //f为undefined
var f1 = function(x){ x = x+1 }    //f1为undefined

四、字符串的一些隐式转化

js面试题大坑——隐式类型转换

  1、若关系运算符的两边若只有一个string,则会把string转为number;

  2、若关系运算符的两边都是string,则会先会根据字符串的unicode编码比较大小(通过string.charCodeAt()查看),逐位进行比较

js面试题大坑——隐式类型转换

五、&& 和 ||

 两者都是在能确定结果的时候就直接输出结果

a || b
//a为true时,可以确定结果了,因为b不论是true还是false整个表达式的结果都是true
//a为false,还要继续判断b,这时候就直接返回b的值

a && b
//a为true时,不能确定整个表达式的结果,这是会输出b
//a为false时,直接就输出false

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值