JS数据类型,你真的搞懂了吗?

前言

面试官:“你讲一下JS的数据类型吧。” 我:"Number、String、Array、Object…,记不起来了,平常只是在用,没怎么注意。"我不知道有没有道友遇到过和我我一样的情况,反正这就是我曾经面试的真实经历,这次血的教训告诉我,面试是真的要准备的,面经还是要背的,不然倒在这种问题上就是真的是活该了,没错,我就是活该。

数据类型

ECMAScript有6种简单数据类型:Undefined、Null、Boolean、Number、String、Symbol,其中Symbol(符号)是ES6新增的,还有一种复杂类型叫Object。

Undefined

Undefined类型就只有一个值undefined,表示一个变量声明了,但是没有初始值。

let a
console.log(a)  // undefined
console.log(a === undefined) // true

有一点需要注意的是,没有声明的变量和声明了没有初始值的变量是有区别的,但是使用typeof判断的结果又都是undefined

let a 
console.log(a)   // undefined
console.log(b)   // Uncaught ReferenceError: b is not defined

console.log( typeof a) // undefined
console.log(typeof b)  // undefined

Null

Null类型同样只有一个值,那就是特殊值null,可以显示的为一个对象赋值为null,表示一个空对象指针。需要注意的是typeof null 的结果是object,而不是null,这是一个历史悠久的bug,但是由于影响的地方太多了,所以一直没有修复(Javascript中的基本数据类型存储在32位的二进制单元中,低位的000表示对象,而null的二进制为全0,所以被判定为null)

let a = null 
console.log(a) // null
console.log(typeof null)  // object

Boolean

Boolean值有两个值,true和false,分别表示真假,虽然Boolean值只有两个,但是其他的数据类型都有相应布尔值的等价形式。

// 可以转化为true: 非空字符串、非零数值、任意对象、N/A
// 可以转化为false: 空字符串、0、NaN、null、undefined

console.log(Boolean('1111'))  // true
console.log(Boolean(111))  // true
console.log(Boolean({}))  // true


console.log(Boolean(''))  // false
console.log(Boolean(0))     // false
console.log(Boolean(NaN))   // false
console.log(Boolean(undefined))   // false
console.log(Boolean(null))   // false


Number

Number数据类型需要注意的有以下几点:
1.Js中能表示的最大值为Number.MAX_VALUE,最小值为Number.MIN_VALUE,一旦超出这个范围之后,这个数值分别会被转化为Infinity(正无穷)和-Infinity(负无穷),之后就无法进行任何计算
2.NaN:是一个特殊值(Not a Number),用于表示本来要返回数值的操作失败了,比如:

console.log(0/0) // NaN
console.log(5/0) // Infinity 比较冷门

3.数值转化,JS提供了3个将非数值转化为数值的函数:NumberparseIntparseFloat,详细规则如下:

Number转化规则:
1.true  -->  1  ,false -->  0
2.数值直接返回
3.null  --> 0 
4.undefined --> NaN
5.字符串包含数值字符,转化为数字,空字符串转化为0,其他情况转化为NaN
6.对象先调用ValueOf(),在根据结果再转化

console.log(Number(''))  // 0
console.log(Number('1233a')) // NaN
console.log(Number('1111'))  // 1111
console.log(Number('+0111'))  // 11
console.log(Number('a111'))  // NaN

parseInt转化规则:z
parseInt专注于字符串是否包含数值
1、数字,保留整数
2.null -->  NaN
3.undefined --> NaN
4.字符串  --> 从第一个非空的字符串开始,如果第一个字符不是数值、加号、减号,直接返回NaN
5.还可转换八进制、十六进制,第二个参数表示进制
console.log(parseInt(''))   // NaN
console.log(parseInt(null)) // NaN
console.log(parseInt(undefined))  // NaN
console.log(parseInt(true))  // NaN
console.log(parseInt('111a'))  // 111 
console.log(parseInt('a111'))  // NaN
console.log(parseInt('0xAF',16)) // 175
console.log(parseInt('10',8))  //  8

parseFloat转换方法和parseInt基本一致,解析到第一个无效的浮点数为止
console.log(parseFloat('22.333.44')) // 22.333
console.log(parseFloat('0011102.11')) // 11102.11

String

转化为字符串直接调用toString()方法即可,也可调用String(),其实String()方法调用的就是toString方法,需要注意的是null和undefind没有toString法,数值调用toString方法可以传参,表示进制。

console.log(true.toString()) // 'true'
console.log(String(null)) // 'null'
console.log(String(undefined)) // 'undefined'

let num = 10 
console.log(num.toString(10)) // '10'
console.log(num.toString(8))  // '12'
console.log(num.toString(16))  // a

Symbol

Symbol是一种通过Symbol函数来生成的独一无二的值,可以作为对象属性名。

const sym = Symbol()
console.log(typeof sym)  // symbol
let obj = {}
obj[sym] = 'hahah'
console.log(obj[sym])  // hahah
const sym1 = Symbol()
console.log(sym === sym1)  // false

Object

对象就是一组数据和功能的集合,可以通过关键字new后面跟对象类型来创建。

const obj = new Object()
const arr = new Array()

结语

这就是我总结的数据类型,喜欢就点个赞支持以下吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值