数据类型之面试官(0101) | 重学JS

606 阅读5分钟

前言

  • 在线音乐戳我呀!
  • 音乐博客源码上线啦!
  • 最近工作之余想干点什么,不能永远踏步,要向前冲,说点现实的,公司明天不要你,你可以后天就找到下一家,那么底气自然是技术硬。
  • 浑浑噩噩在前端领域磕磕碰碰了两年多,想看看Vue源码,不知道有没有最近想看源码的猿友,如果JS不够硬,建议跟我一起来重学JS,重学完相信再去看源码,会事半功倍。
  • 接下来我们来看看JS的数据类型知识点都可以考些什么。

今天我去一家公司面试,面试官说 “给你五秒 让我记住你”
说完我抡圆了给了他一巴掌,打完我就走啦。
刚到家面试通知就来啦。
你们说…我去吗?

先来问自己三个面试题

undefinednull的区别?

什么时候给变量赋值为null呢?

变量类型与数据类型分别代表什么意思?

如果会了,面试官根本不是你的对手。
那么,我们先花几分钟的时间大概看看以下问题吧。

数据类型都有哪些?

有些人说6种,有人说8种。

其实正确答案是8种,在ES5时代确实是6种,但在ES6时代新增了Symbol,ES10时代新增了bigInt,这两种类型,可算凑齐七兄弟了。

数据类型分为两大类。

  • 基本(值)类型
    • String:任意字符串
    • Number:任意的数字。NaN、Infinity也是数字类型的特殊数值哟
    • Booleantrue / false
    • undefined: undefined
    • nullnull
    • symbol:表示独一无二的值。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。通过 Symbol 函数调用生成,由于生成的 symbol 值为原始类型,所以 Symbol 函数不能使用 new 调用。
    • bigInt:大于 2^53 - 1 的任意整数。谷歌67版本就已支持该类型。
  • 对象(引用)类型
    • Object:任意对象
      • Function:一种特别的对象(可执行)
      • Array:一种特别的对象(数值下标,内部数据是有序的)
      • Date:一种特别的对象(用于处理日期与时间)

如何判断类型?

typeof(返回字符串,值的类型)

可以判断:undefined / Number / String / Boolean / function
不能判断:null / Object / Array

instanceof(返回布尔)

判断对象的具体类型(数组对象函数都是对象的一种特殊的表现形式)

constructor(返回值的类型,并不是字符串哦)

判断对象的具体类型(可区分数组、对象、函数、正则)。
每个对象都有一个constructor属性,它引用了初始化该对象的构造函数。

===(返回布尔)

可以判断:undefined / null(因为这两种类型都只有一个值,就是它本身)

宝,上面的知识点都会了吧,上几道题题测试一下,你应该没问题的吧。


var a;
console.log(a, typeof a, typeof a==='undefined',a===undefined );  // undefined 'undefined' true true
console.log(undefined==='undefined');  // false

a = null
console.log(typeof a, a===null) // 'object' true

// typeof返回的是字符串
// 这里undefined、null都使用全等===为true

var b1 = {
    b2: [1, 'abc', console.log],
    b3: function () {
      console.log('b3')
      return function () {
        return 'zzm'
      }
    }
}

console.log(b1 instanceof Object, b1 instanceof Array) // true  false
console.log(b1.b2 instanceof Array, b1.b2 instanceof Object) // true true
console.log(b1.b3 instanceof Function, b1.b3 instanceof Object) // true true

// instanceof是对象,但不一定是数组、函数,但反过来,是函数、数组就一定是对象

console.log(typeof b1.b2, '-------') // 'object'

// instanceof不管你是数组、函数都是 'object'

console.log(typeof b1.b3==='function') // true

// 可以看到typeof也可以判断对象里的function函数

console.log(typeof b1.b2[2]==='function')  //  true
b1.b2[2](4)  //  4
console.log(b1.b3()())  //  zzm

面试官:Number('zzz') == NaN ?


肯定是falseNumber('zzz') 输出 NaNNumber('zzz') 输出 NaNNaN == NaN 为什么是 false'大家好帅'NaN吧,'点个赞吧' 也是NaN吧,那他们两个值一样吗?

肯定不一样,所以不相等。

isNaN() 检测是否是非数值型。返回值布尔。

其他各种数据类型的方法

方法不支持说明例子
isNaN()--是否是非数值型isNaN(NaN); true
Number()--将其他类型转成numberNumber("18"); 18
isFinite()--检验是否Infinity(f就是)isFinite(1/0); false
Boolean()--强制转换值为booleanBoolean(0); false
parseInt()--解析字符串并返回整数parseInt("18"); 18
parseFloat()--解析字符串并返回浮点数parseFloat("40.56 years"); 40.56
toString()null、undefined将其他类型转成 stringlet a = true; a.toString(); "true"
toLocaleString()--把数组转成本地字符串let arr=['1','2']; arr.toLocaleString(); "1,2"
isArray()--检验值是否为数组let arr=['1','2']; arr.isArray(); true

好,来回答一开始上面提问的问题。

面试官:undefinednull的区别?

undefined代表定义未赋值。undefined 是从 null 中派生出来的。

nul定义并赋值了, 只是值为null。

面试官:什么时候给变量赋值为null呢?

初始赋值, 表明将要赋值为对象;

结束前, 让对象成为垃圾对象(被垃圾回收器回收)。

面试官:严格区别变量类型与数据类型?

  • 数据的类型
    • 基本类型
    • 对象类型
  • 变量的类型(变量内存值的类型)
    • 基本类型: 保存就是基本类型的数据
    • 引用类型: 保存的是地址值

以往推荐

Vue-Cli3搭建组件库

Vue实现动态路由(和面试官吹项目亮点)

项目中你不知道的Axios骚操作(手写核心原理、兼容性)

VuePress搭建项目组件文档

koa2+vue+nginx部署

vue-typescript-admin-template后台管理系统

原文链接

juejin.cn/post/699776…