前端进阶学习_
9374 2022/12/27 js
# js
# 内置类型
JS中分为7种内置类型,七种内置类型又分为两大类型:基本类型和对象(Object)
基本类型有六种:null
,undefined
,boolean
,number
,string
,symbol
其中js的数字类型是浮点型的,没有整型,并且浮点类型基于 IEEE754 标准实现,在使用中会遇到些BUG,NaN
也属于number
类型,并且NaN
不等于自身.
对于基本类型来说,如果使用字面量的方式,那么这个变量只是字面量,只有在必要的时候才会转换为对应类型
let a =111 //这是字面量
console.log(typeof a ) //number
a.toString() //这时候使用才会转换为 对象型;
console.log(typeof a.toString()) //string
1
2
3
4
2
3
4
对象(Objcct)是引用类型,在使用过程中会遇到深浅拷贝问题.
let a = {name:'AA'}
let b = a
b.name = 'BB'
console.log(a.name) //'BB'
1
2
3
4
2
3
4
复杂类型赋值会将内存指向赋值给另一个变量,两个变量对应同一个内存地址的对象,通过任意一个变量修改值,两个变量所指向的内容都会同步变化;
# Typeof
typeof
对于基本类型,除了null
都可以显示正确类型
typeof 1 // number
typeof '1' // string
typeof undefined // undefined
typeof true //boolean
typeof Symbol() // symbol
typeof b // 没有声明 undefined
1
2
3
4
5
6
2
3
4
5
6
typeof
对于对象,除了函数都显示object
typeof [] //object
typeof {} //object
typeof console.log // function
1
2
3
2
3
对于null
来说,虽然它是基本类型,但是辉县市object
这是一个存在很久的Bug
typeof null //object
1
PS:为什么会出现这种情况呢?因为在JS最初版本中,使用的是32位系统,为了性能考虑使用低位储存了变量的类型信息,000
开头代表是对象,然而null
表示为全零,所以将它错误的判断为object
.虽然现在的内部类型判断代码已经改变了,但是对于这个bug却一直流传下来.
如果我们想获得一个变量的正确类型,可以通过object.prototype.toString.call(xxxx)
.这样我们就可以获得类型[object Type]
的字符串
let a
//我们可以这样判断undefined
a===undefined //true
//但是undefined 不是保留字,能够在低版本浏览器被赋值;
let undefined = 1;
//这样判断就会出错,
a === undefined //false
//所以可以用下面的方式来判断,并且代码量更少
//因为void后面随便跟上一个组成表达式
// 返回就undefined
a===void 0
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11