前言
- 在线音乐戳我呀!
- 音乐博客源码上线啦!
- 最近工作之余想干点什么,不能永远踏步,要向前冲,说点现实的,公司明天不要你,你可以后天就找到下一家,那么底气自然是技术硬。
- 浑浑噩噩在前端领域磕磕碰碰了两年多,想看看Vue源码,不知道有没有最近想看源码的猿友,如果JS不够硬,建议跟我一起来重学JS,重学完相信再去看源码,会事半功倍。
- 接下来我们来看看JS的数据类型知识点都可以考些什么。
今天我去一家公司面试,面试官说 “给你五秒 让我记住你”
说完我抡圆了给了他一巴掌,打完我就走啦。
刚到家面试通知就来啦。
你们说…我去吗?
先来问自己三个面试题
undefined
与null
的区别?
什么时候给变量赋值为null
呢?
变量类型与数据类型分别代表什么意思?
如果会了,面试官根本不是你的对手。
那么,我们先花几分钟的时间大概看看以下问题吧。
数据类型都有哪些?
有些人说6种,有人说8种。
其实正确答案是8种,在ES5时代确实是6种,但在ES6时代新增了Symbol
,ES10时代新增了bigInt
,这两种类型,可算凑齐七兄弟了。
数据类型分为两大类。
- 基本(值)类型
String
:任意字符串Number
:任意的数字。NaN、Infinity
也是数字类型的特殊数值哟Boolean
:true / falseundefined
: undefinednull
:nullsymbol
:表示独一无二的值。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。通过 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 ?
肯定是false, Number('zzz') 输出 NaN。
Number('zzz') 输出 NaN ?NaN == NaN 为什么是 false?
'大家好帅' 是NaN吧,'点个赞吧' 也是NaN吧,那他们两个值一样吗?
肯定不一样,所以不相等。
用 isNaN()
检测是否是非数值型。返回值布尔。
其他各种数据类型的方法
方法 | 不支持 | 说明 | 例子 |
---|---|---|---|
isNaN() | -- | 是否是非数值型 | isNaN(NaN); true |
Number() | -- | 将其他类型转成number | Number("18"); 18 |
isFinite() | -- | 检验是否Infinity(f就是) | isFinite(1/0); false |
Boolean() | -- | 强制转换值为boolean | Boolean(0); false |
parseInt() | -- | 解析字符串并返回整数 | parseInt("18"); 18 |
parseFloat() | -- | 解析字符串并返回浮点数 | parseFloat("40.56 years"); 40.56 |
toString() | null、undefined | 将其他类型转成 string | let a = true; a.toString(); "true" |
toLocaleString() | -- | 把数组转成本地字符串 | let arr=['1','2']; arr.toLocaleString(); "1,2" |
isArray() | -- | 检验值是否为数组 | let arr=['1','2']; arr.isArray(); true |
好,来回答一开始上面提问的问题。
面试官:undefined
与null
的区别?
undefined代表定义未赋值。undefined 是从 null 中派生出来的。
nul定义并赋值了, 只是值为null。
面试官:什么时候给变量赋值为null呢?
初始赋值, 表明将要赋值为对象;
结束前, 让对象成为垃圾对象(被垃圾回收器回收)。
面试官:严格区别变量类型与数据类型?
- 数据的类型
- 基本类型
- 对象类型
- 变量的类型(变量内存值的类型)
- 基本类型: 保存就是基本类型的数据
- 引用类型: 保存的是地址值
以往推荐
vue-typescript-admin-template后台管理系统