前端面试题 (一)JS内置类型&Typeof&类型转换

内置类型

js中分为其中内置类型 ,其中内置类型又分为两大类型 :基本类型和对象(Object).

基本类型有六种 :null 、undefined、boolean、number、string、symbol.

NaN也属于number,并且NaN不等于自身

对于基本类型来说,如果使用字面量的方式,那么这个变量只是个字面量,只有在必要的时候才会转换成对应的类型

let a =111  //这只是字面量  不是number类型
a.toString() //使用的时候才会转换成对象类型

对象(Object)是引用类型,在使用时会遇到浅拷贝和深拷贝的问题

let a = { name: "FE" }
let b = a 
b.name = "EF"
console.log(a.name) //EF

Typeof

typeof 对于基本类型,除了null 都可以显示正确的类型

typeof 1           // 'number'
typeof '1'         // 'string'
typeof  undefined  // 'undefined'
typeof true        // 'boolean'
typeof Symbol()    // 'symbol'
typeof b           // b没有声明,但是还会显示 undefined

typeof 对于对象 ,除了函数都会显示 object

typeof [] // 'object'
typeof {} // 'object'
typeof console.log  // 'function'

对于null 来说  虽然他是基本类型,但是会显示 object ,这是一个存在很久了的Bug

typeof null // 'object'

如果我们想获得一个变量的正确类型,可以通过 Object.prototype.toString.call(xx)。这样我们就可以获得类似 [ object Type ]的字符串

类型转换

在条件判断时,除了 undefined , null , false , NaN, ' ', 0 ,-0 ,其他所有的值都为true,包括所有对象。

对象转基本类型

对象转基本类型时,首先会调用valueof 然后调用 toString. 并且这两个方法是可以重写。

let a = {
    valueOf(){
        return 0
    }
    
}

当然你也可以重写 Symbol.toPrimitive ,该方法在转基本类型时调用优先级最高

let a = {
    valueOf(){
        return 0;
    },
    toString(){
        return '1';
    },
    [Symbol.toPrimitive](){
        return 2;
    }    
}

1+a //=>3
'1'+a //=>'12'

匹配运算符

只有当加法运算时,其中一方是字符串类型,就会把另一个也转为字符串类型。其他运算只要其中一方是数字,那么另一方就转为数字。并且加法运算会触发三种类型转换:将值转换为原始值,转换为数字,转换为字符串。

1 + '1'         // '11'
2 * '2'         // 4
[1,2] + [2,1]   // '1,22,1'
// [1,2].toString() -> '1,2'
// [2,1].toString() ->  '2,1'
// '1,2' + '2,1' = '1,22,1'

对于加号需要注意这个表达式  'a' ++'b'

'a' + + 'b' //->"aNaN"
// 因为 + 'b' ->NaN'
// 你也许在一些代码中看到过  + '1'  -> 1

==操作符

 上图中的 toPrimitive 就是对象转基本类型

这里来解析一到题目 [] ==![] //=> true   ,下面是这个表达式为何为true的步骤

// [] 转为 true,然后去反变为 false
[] == false
//根据第8条得出
[] == ToNumber(false)
[] == 0
// 根据第10条得出
ToPrimitive([]) == 0
// [].toString() -> ''
'' == 0
// 根据 第六条得出
0 == 0 //->true

比较运算符

1.如果是对象 ,就通过 toPrimitive 转换对象

2.如果是字符串,就通过 unicode 字符索引来比较

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值