掘金之旅---JS数据类型和数据类型转换

225 阅读3分钟

从开始决定写掘金,就在思考要如何开始,从哪里开始,要写点什么。犹豫再三决定还是从基础的开始写起,就当作知识小结吧~ JS数据类型分为两大类:基础数据类型,引用数据类型。

  1. 基础数据类型

基础数据类型包括:Undefined、Boolean、Number、String、Null、Symbol. 对基础数据类型的操作直接是对值的操作,比如初始化变量var age1=20;age2=30;把age1赋值给age2,是把age1的值复制了一份给age2;栈内存如下:

基础数据类型.png

  1. 引用数据类型

    引用数据类型Object包括:Array,Object,Function等对象类型。 引用数据类型对值的操作不是直接的,是通过修改指针的指向来完成的。

    初始化对象var object1={age:20};object2=object1;引用类型的赋值是引用地址的复制,指向同一个内存对象。修改其中一个对象,另外一个也会发生变化。 引用类型.png

  2. 类型判断

3.1 使用typeof

typeof 是最常用的类型判断

typeof.jpg

优缺点:对于object类型,typeof不能很好的区分;typeof 返回的数据类型均是字符串。

3.2 toString()

toString()是对象Object的原生方法,可以进一步判断typeof为Object类型的数据类型的具体类型。该方法比较通用。

toString.jpg

3.3 instanceof

用来判断对象A是否是对象B的实例。 只能判断两个对象间的实例关系。

instanceof.jpg

instanceof 实现原理


 function(obj1,obj2){
  let obj1Prototype=obj1._proto_;
  let obj2Prototype=obj2.prototype;
  if(obj1Prototype===obj2Prototype){
        return true;
   }
   return false;
 }

3.4 constructor

通过对象的prototype属性判断对像类型

constructor.jpg

  1. 类型转换

4.1 常用数据类型转换 Number()、parseInt()、parseFloat()、String()、toString()、Boolean()

转为数字类型:Number()

Number()会自动把字符串形式的十进制数和十六进制数(‘0x’)都转换为十进制,但是不识别八进制,会被当做十进制数处理。

number.jpg

parseInt()

对于字符串的转义,当字符串中存在非数字的字符时,Number转换为NaN,parseInt()可以将首位是数字字符串的字符串转为数字。第二个参数指定进制数,默认时是十进制

parseInt('123tes');//123
parseInt('123.456')//123
parseInt('123'8)//83

parseFloat()

对于浮点型字符串,需要用parseFloat(),可以将首位是数字字符的字符串转为数字,可以识别第一个小数点以及小数点之后的数字

 parseFloat('123tes');//123
 parseFloat('123.456')//123.456
 parseFloat('123.456.789')//123.456
 parseFloat('-123.456.789')//-123.456
 parseFloat('3e-2')//0.03可以识别科学计数
 

注:科学计数法:
科学计数法e或E表示,e后面跟一个整数表示指数。
数值小于1且小数点后有大于等于6个0 或 数值整数位大于等于22位时,js会自动将数值转换为科学计数法。

转为字符串 String()、toString()

string.jpg

toString()可以指定进制数,默认是十进制。但不能将null和undefined转为字符串。

(123).toString(2);//'1111011'
(123).toString8)//‘173’
(123).toString()//‘123’

Boolean()转为布尔类型

boolean.jpg

4.2 隐性数据类型转换

运算符 :+ 、-、==、<=、>=、<、> 操作符:或|| 、与&&、非 !!、!(默认进行Boolean类型转换)。

+:第一个参数是数字,第二个就会转为数字;第一个是字符串,第二个会默认转为字符串。 -:会转为数字后进行计算 其他运算符会转为数字后在计算;

或:第一个是true,返回第二个参数

与:第一个为false,直接返回false

非:转为布尔类型

隐形转换.jpg

5、如何判断是否是null类型

    function isNull(temp){
     if(!temp && typeof(temp) !='undefiend' && temp!=0){
     return true;
     }
    }

小结:基本概念做了简单的介绍,还有一些特殊的应用,后期在进行补充。