一、 数据类型的划分
1. 原始类型(基本类型)
简单数据类型 | 说明 | 默认值 |
---|---|---|
Number | 数字型,包含整值和浮点值 | 0 |
Boolean | 布尔值类型,如true、 false,等价于1和0 | false |
String | 字符串类型,如“张三”,注意js 里面,字符串都带引号 | “” |
Undefined | var a; 声明了变量a但是没有给值 | undefined |
Null | var a = null; 声明了变量a为空值 | null |
2. 对象类型(复合类型)
复杂数据类型又叫做引用类型、对象类型,在存储变量时存储的是引用地址,复杂类型更是基本类型的复合,复杂类型可以包含基本类型。如Object,Array,Function……
二、 判断数据的类型
let num = 1
console.log(typeof (num)); //number
三、 基本类型
1. number数值类型
1.1 整型
常见:二进制、八进制、十进制、十六进制
0123 : 0 开头表示八进制
0b11 : 0b 开头表示二进制
0x11 : 0x 开头表示十六进制
直接打印出来会转化为十进制
1.2 浮点型
- 直接写小数
- 浮点的精度问题(十进制小数转为二进制小数,大部分无法精确转换;整数不存在这个问题)
1.3 科学计数法
用来显示较大的值
198e2=19800 2e-2=0.02
1.4 NaN
NaN 的全称是 Not a Number
NaN是number类型,是一个数值,但不是一个有效数字
NaN有两个特点:
- 特点1:NaN与任何数进行任何运算结果都是NaN
- 特点2:NaN与任何数都不相等,包括自己
函数isNaN()
专门判断一个数据是否是NaN,如果是NaN,返回值是true,否则是false
1.5 JavaScript 中数字的有效范围
- 最大可表示的数字:1.7976931348623157e+308
- 最小可表示的数字:-1.7976931348623157e+308
- 可表示最小的正数:5e-324
- 可表示最大的负数:-5e-324
如果超过范围,会表示为 Infinity 或者 -Infinity
函数 isFinite()
判断一个数字是否是有效数字,true是有效数字,false是无效数字
2. string 字符串类型
2.1 字符串的表示方式
字符长型可以是引号中的任意文本,其语法为双引号""
和单引号''
2.2 引号嵌套
JS可以用单引号嵌套双引号,或者用双引号嵌套单引号(外双内单,外单内双)
2.3 转义字符
类似HTML里面的特殊字符,字符串中也有特殊字符,我们称之为转义符转义符都是\开头的,常用的转义符及其说明如下:
转义符 | 说明 |
---|---|
\n | 换行符, n是 newline 的意思 |
\\ | \ |
\' | 单引号 |
\" | 双引号 |
\t | tab 缩进 |
\b | 空格,b 是 blank 的意思 |
3. boolean布尔类型
boolean类型数据表示一种状态,是或者否,肯定或否定
有两个形式,true表示肯定和false表示否定
4. null和undefined
null表示没有对象,即该处不应该有值:
- 作为函数的参数,表示该函数的参数不是对象
- 作为对象原型链的终点
- 获取 DOM 获取不到的时候
- 如果一个变量声明之后不知道赋什么值,可以先赋值null
undefined表示缺少值,即此处应该有值,但没有定义:
- 定义了变量没有给值,使用该变量的时候自动得到undefined
- 定义了形参,没有传实参,显示 undefined
- 对象属性名不存在时,显示 undefined
- 函数没有写返回值,即没有写return,拿到的是 undefined
- 写了return,但没有赋值,拿到的是 undefined
这张图可以形象的展示有值、0、null和undefined区别
四、数据类型转换
1. 规则
1.1 其他类型转为number类型
string -> number:
- 只有纯数字字符串转为对应的有效数字,十六进制形式和科学计数法形式也都是纯数字
- 空字符串转为0
- 其他内容的字符串转为NaN
- 字符串两端有空格,自动进行剔除,剩下的内容按照以上规则再进行转换
boolean -> number:
- true转为1
- false转为0
undefined -> number:NaN
null -> number:0
1.2 其他类型转为 string 类型
其他类型转为字符串类型,数据的表示形式是什么就转成什么样的字符串,原封不动输出
1.3 其他类型转为 boolean 类型
number -> boolean:
- 0会转换成false
- NaN会转换成false
- 其他转为true
string -> boolean:
- 空字符串转为false
- 其他转为true
undefined -> boolean:false
null -> boolean:false
2. 强制类型转换(显示转换)
2.1 其他类型转为number类型的函数
Number() parseInt() parseFloat()
parseInt()、parseFloat() 与 Number() 的区别:
parseInt() parseFloat()
本意是提取字符串中的数字- 纯数字字符串、以数字开头的字符串可以转为有效数字
- 会自动去掉两端空格
- 空字符串以及其它形式的字符串都转为NaN
- boolean、null、undefined都转为NaN
parseFloat() 和 parseInt 的区别:
- parseFloat()保留完整的数字(整数部分+小数部分)
- parseInt()只保留整数部分
var numStr = " 123.09 ";
var bol = true;
console.log(Number(numStr)); //123.09
console.log(parseFloat(numStr)); //123.09
console.log(parseInt(numStr)); //123
console.log(Number(bol)); //1
console.log(Number(!bol)); //0
console.log(Number(undefined)); //NaN
console.log(Number(null)); //0
2.2 其他类型转为string类型的函数
String()
var numStr = " 123.09 ";
var bol = true;
var num = 45;
console.log(String(numStr)); // 123.09
console.log(String(bol)); //true
console.log(String(!bol)); //false
console.log(String(undefined)); //undefined
console.log(String(null)); //null
2.3 其他类型转为boolean类型的函数
Boolean()
var numStr = " 123.09 ";
var bol = true;
var num = 45;
console.log(Boolean(num)); //true
console.log(Boolean(0)); //false
console.log(Boolean(NaN)); //false
console.log(Boolean(''));//false
console.log(Boolean(numStr));//true
console.log(Boolean(undefined)); //false
console.log(Boolean(null)); //false
3. 自动类型转换(隐式转换)
- js作为弱类型编程语言,支持自动类型转换
- 自动类型转换的规则和强制类型转换一样
- 在进行某种运算的时候,如果数据类型与运算要求的数据类型不一致,会自动类型转换(具体可见运算符)
- 运算符决定运算中所需要的数据类型
五、值类型和引用类型
值类型: 就是原始类型的数据,也叫不可变类型,包括number string boolean等
引用类型: 就是对象类型的数据,也叫可变类型,包括array function object……
二者区别:
-
内存存储方式
值类型:存在栈结构中
引用类型:数据存在堆结构中,栈结构中存的是地址 -
赋值方式(传值方式)
值传递:原始类型赋值,传递的就是值
引用传递:引用类型赋值,传递的是 -
可变和不可变
不可变类型:原始类型、值类型,不能修改其中的一部分
可变类型:对象类型、引用类型,可以修改其中的一部分(属性),修改之后,对象还是那个对象 -
判等方式
值类型:值相同就是等的
引用类型:地址相同才是相等的