前端进阶学习_

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

对象(Objcct)是引用类型,在使用过程中会遇到深浅拷贝问题.

let a = {name:'AA'}
let b = a
b.name = 'BB'
console.log(a.name) //'BB'
1
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

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

typeof [] //object
typeof {} //object
typeof console.log // function 
1
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
最后更新时间: 2022/12/31 23:24:02