数据类型

291 阅读9分钟

笔记来源:拉勾教育 - 大前端就业集训营

文章内容:学习过程中的笔记、感悟、和经验

数据类型

字面量

又称常量,是一个固定值的表示法,字面量所见即所得,js程序执行到字面量的时候会立即知道它的数据类型、值是多少

可以表示固定值,比如数字、字符串、undefined、布尔类型等

  • 数值类型:1、2、3 ......
  • 字符串:'大前端'、'lagou' ......
  • 布尔值:true、flase(布尔类型只有两个值)
  • .........

数字字面量

数学意义上的数字,书写时不需要添加任何辅助符号

分类:整数字面量、浮点数字面量、特殊值

整数字面量:

整数区分进制(十进制、八进制、十六进制等等)

  • 十进制:最基本的字面量,可以直接在代码中输入
  • 八进制:字面量前面加0、0O、0o,八进制正数智能包含0-7
  • 十六进制:字面量前面加0x、0X,后面可以包含数字(0-9)和字母(a-f可大写)
//十进制(最常用)
console.log(10);        //10
console.log(-10);       //-10
//八进制
console.log(0o1);       //1 (1*1=1)
console.log(0o11);      //9 (8*1+1*1=9)
console.log(0o111);     //73 (64*1+8*1+1*1=73)
console.log(0o1000);    //512 (512*1+64*0+8*0*1*0=512)
//十六进制
console.log(0x1);       //1 (1*1=1)
console.log(0x10);      //16 (16*1+1*0=16)
console.log(0x100);     //256 (256*1+16*0+1*0=256)
console.log(0x110);     //272 (256*1+16*1+1*0=272)

注意:

  • 在js中,无论使用的是多少进制字面量,都会先转换成10进制进行时用
  • 八进制中,后面数字出现了0-7以外的数字,如果以0开头,会强行忽略0直接将后面的数字当做十进制,0o或者0O开头则会认为是错误写法

浮点数字面量

就是数字概念中的小数,包含正数、小数点、小数部分,不区分进制,一律以十进制为准

//浮点数字面量
console.log(1.2);        //1.2
console.log(-1.2);       //-1.2
console.log(0.5);        //0.5
console.log(.5);         //0.5
//浮点数科学记数法,表示小数点向前或者向后移动多少位
console.log(1.2e4);      //12000
console.log(1.2e-4);     //0.00012

注意:

  • 如果整数部分为大于0小于1,可以忽略小数点前面的0不写
  • 浮点数最高精度是17位小数,但在进行计算时候其精度愿远不如整数
    • 例如0.1+0.2结果不是0.3,而是1.30000000000000004

Infinity(无穷)

由于计算机计算能力有限,如果高于计算机最大计算值会显示为正无穷Infinity,低于最小值则会显示为负无穷-Infinity

Infinity本身也是一个数字

  • 最大值:Number.MIN_BALUE,这个值为:5e-324
  • 最小值:Number.MAX_BALUE,这个值为:1.7976931348623157e+308
  • 无穷大:Infinity
  • 无穷小:-Infinity
//Infinity 无穷
console.log(Number.MIN_VALUE);    //5e-324
console.log(Number.MAX_VALUE);    //1.7976931348623157e+308
console.log(-5e789);              //-Infinity
console.log(5e789);               //Infinity
console.log(Infinity);            //Infinity

NaN

表示不是一个正常的数,但还是一个number类型的数,没有办法用正常的方法表示出来

NaN和任何数都不相等,包括他自身(NaN 不等于 NaN)

isNaN();可以判断一个数据是不是NaN

//NaN
console.log(0 / 0);          //NaN
//判断一个数是不是NaN
console.log(isNaN(0 / 0));   //true
console.log(23);             //false

字符串字面量

由任意个数有序或者无序的字符组成的串,类似人类的语言,在js中有特殊写法

组成:字母、汉字、特殊字符、空白等

书写方法:用一对引号 + 引号内部字符表示,字符可以多个也可以是空字符串

//字符串字面量
console.log('我用"单引号"包裹');       //我用"单引号"包裹
console.log("我用双引号包裹");         //我用双引号包裹
console.log('123');                  //123
console.log('abc');                  //abc
console.log('       ');              //       (一串空格)
console.log('');                     //什么都没有

注意:字符串中如果还包含双引号,则外部应该由单引号包裹,反之相同

转义字符

字符串中,有一些特殊功能的符号不能直接书写,还有一些特殊效果不能直接书写

可以使用转义符\进行转义

  • \加普通字母实现特殊字符
    • \n 换行
    • \t tab制表(缩进)
  • 将特殊字符转换成普通字符
    • \" 单引号
    • \' 双引号
    • \\ 反斜杠
//转义字符
console.log('床前明月光,\n疑是地上霜');     //实现换行
console.log('\t床前明月光,疑是地上霜');     //实现缩进
console.log('使用转义字符转义\"双引号\"');   //实现转义双引号

变量

在计算机内存中存储数据的标识符,可以根据变量的名称来获取内存中存储的数据

相当于一个容器,内部可以存储任意类型数据,使用变量的时候,实际使用的是内部存储的数据

优点:使用变量可以方便的获取或者修改内存中的数据

变量声明

又叫定义变量、创建变量,变量在引用之前,必须先有定义,否则会引用错误()报错

定义方法var : 变量名

//定义变量a
var a;

命名规则

必须遵守的,否则就会报错

  • 只能由字母、数字、下划线、$符号组成,不能以数字开头
  • 区分大小写
  • 不能占用关键字或者保留字,如var、for等

命名规范,建议遵守

  • 建议变量名要有意义
  • 遵循驼峰写法,多个单词组合第一个单词全小写,后面单词首字母大写,例如userName

变量赋值

默认没有赋值的变量初始值为undefined,表示内部没有赋值,可以存储数据

赋值写法:变量 = 值,等号右边的值赋值给左边的变量

变量赋值几种情况

  • 变量赋值的值可以是任意类型,甚至可以是一个变量,此时赋值的值是这个变量内部的数据
    • 注意:变量参与赋值过程,左变右不变,符号左侧会被赋值,将来值会发生变化,右侧则只是内部数据参与运算,自身不会变化
  • 变量定义时可以同时赋予初始值var 变量名 = 值
  • 变量可以多次赋值,新值会取代旧值
  • 一个var可以同时定义多个变量,并且都可以赋予初始值,多个变量使用逗号隔开,最后一个变量后使用分号结束
// 变量赋值
var a;
a = 3;
//相当于使用a变量,用的是a内部存储的数据3
var b;
b = a;   
//变量参与赋值,等号左变右不变
var c;
c = a + b;  
//变量创建的同时赋值
var d = a + 1;  
//变量多次赋值
var e = 1;
e = e + 5;
// 同时创建多个变量
var f = 1, g = 2, h =3;
// 输出
console.log(a);   //3
console.log(b);   //3
console.log(c);   //6
console.log(d);   //4
console.log(e);   //6
console.log(f + g + h);   //6

数据类型

简单数据类型

  • Number 数字类型
  • 不区分整数、浮点数、特殊值,都属于Number类型
  • String 字符串类型
    • 所有字符串都是string类型
  • Boolean 布尔类型
    • 只包含true(1)和flase(0)两个字面量值,必须是小写字母
  • Undefined 未定义类型
    • 变量未赋值默认值
  • Null 空类型
    • 本身就是一个数据,逻辑上来说null表示一个空对象指针,所以相当于一个空对象
    • 如果定义的变量将来打算保存对象,最好将变量初始值设置为null

检测数据类型 typeof方法

检测一个数据属于哪种数据类型

书写方法:typeof(需要检测的数据)或者 typeof 要检测的数据

//检测数据类型
console.log(typeof(32));         //Number
console.log(typeof(Infinity));   //Number
console.log(typeof(NaN));        //Number
console.log(typeof('字符串'));    //string
console.log(typeof(undefined));  //undefined
console.log(typeof(null));       //object(null会被检测伟对象)
console.log(typeof(true));       //boolean
console.log(typeof(false));      //boolean
// 关键字写法
console.log(typeof 32);          //Number(另一种写法)
console.log(typeof(32 + 43));    //Number
console.log(typeof 32 + 43);      //Number43(第二种写法的有局限性,所以更推荐第一种写法)

变量的数据类型

js是一门动态类型的语言,冰凉没有固定的数据类型,变量的数据类型主要和内部存储数据有关

比如如果变量内部是一个数字,则变量的类型就是Unmber

将来使用变量是,一定要确定变量得数据类型,否则可能还会出错

//变量数据类型
var a = 3;
console.log(typeof(a));         //Number
// 重新复制更改为布尔值
a = true;
console.log(typeof(a));         //boolean

数据类型转换

转字符串类型

  • .toString()方法和String(数据)方法,后者针对于没有第一种方法的数据,比如undefined和null
//数据类型转换
console.log(true.toString());     //true
console.log(String(23));          //23
console.log(String(undefined));   //undefined
console.log(String(null));        //null
  • +号拼接字符串方式
    • num + "",当两边一个是字符串类型,一个不是,会先把其他类型转换成字符串类型,在和后边字符进行拼接,最后返回字符串
    • 如果两边都是数字,会执行加法操作
console.log(1 + '2');        //12
console.log(1 + 2);        //3
console.log(true + '');        //true
console.log(23 + '');        //23

控制台快速识别数据类型

根据字体颜色快速分辨数据类型,字符串-黑色、数字类型-蓝色、布尔值-蓝色、undefined和null都是灰色

转Number类型

Number(数据)方法

适用于所有类型,但是根据内容会有不同的转换结果

  • 字符串:纯数字直接转化,空和空白字符串转换为0,非空非纯数字转换为NaN
  • 布尔值:true转换1,flash转换0
  • undefined:转为NaN
  • null:转为0
//数据类型转换
console.log(Number('123'));         //123
console.log(Number(''));            //0
console.log(Number('    '));        //0
console.log(Number('非空非数字'));   //NaN
console.log(Number(true));         //1
console.log(Number(false));        //0
console.log(Number(undefined));    //NaN
console.log(Number(null));         //0
parseInt(取整)

可以将字符串或者小数进行取整操作

  • 可以将浮点数转为整数,直接保留整数,舍弃小数部分
  • 可以将字符串转换为数字在进行取整操作

注意:在字符串中,只能转换以数字开头的字符串,否则会输出NaN

//数据类型转换
console.log(parseInt(12.34));           //12
console.log(parseInt('12.34'));         //12
console.log(parseInt('12.34aaa'));      //12
console.log(parseInt('a12.34aaa'));     //NaN
console.log(parseInt(''));              //NaN
console.log(parseInt('     '));         //NaN
parseFloat(转浮点数)

将字符串转为浮点数

满足的字符串同样要求要以数字开头的,否则输出NaN

//数据类型转换
console.log(parseFloat('12.34'));           //12.34
console.log(parseFloat('12.34aaa'));           //12.34
console.log(parseFloat('a12.34aaa'));           //NaN
实际应用

需求:弹出对话框让用户输入,然后将这个数字加5输出出来

//使用prompt获取用户输入的数字,并将这个数字转换为数字类型
var num = parseInt(prompt('请输入一个数字'))
// 将这个数字类型的数字加5输出出来
console.log(num + 5);

转换布尔类型

Boolean方法

可用于任何数据类型,讲其他类型数据转为布尔类型

转为flase:NaN、0、空字符串、null、undefined

转为true:非0非NaN的数字、非空字符串

// 转为flase
console.log(Boolean(NaN));
console.log(Boolean(''));
console.log(Boolean(0));
console.log(Boolean(undefined));
console.log(Boolean(null));
// 转为true
console.log(Boolean('abx'));
console.log(Boolean(45));
console.log(Boolean(Infinity));