笔记来源:拉勾教育 - 大前端就业集训营
文章内容:学习过程中的笔记、感悟、和经验
数据类型
字面量
又称常量,是一个固定值的表示法,字面量所见即所得,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));