ECMAScript数据类型:
基本数据类型
- 数字 number
- 字符串 string -- 布尔值 boolean
- null 空
- undefined 未定义
引用数据类型
- 对象 Object
- 数组 Array
- 时间 Date
- 正则 RegExp
- 函数 Function
类型检测:
- typeof: typeof可以检测出 number、string、boolean、undefined、object typeof检测null为object
- instanceof
- Object.prototype.toString.call() == '[objet 类型]'
- [].constructor === Array 啥啥是谁的构造函数
基本数据类型——数字
在数字类型中,有一个数字类型叫NaN,它是一个非法的数学运算 Infinity 正无穷大也是数字类型的
运算符: + - * / %取余
在纯数字运算的时候,跟我们生活中的计算方式一致,
隐式类型转换:
自己没有去做,系统偷偷帮你做了
''+ 12 = '12'
强制类型转换:
系统没做,我们人为主动转换数据类型
+
数字和字符串相加的时候结果为字符串,是一个字符串的拼接
任意的数据加上字符串都会传成字符串。
如果字符串前面只有一个 + 号,那么结果会隐式转换为数字类型
-
数据在进行减法运算的时候,结果默认会转成数字类型
数学运算:
- 加 +
- 减 +
- 乘 *
- 除 /
- 模取 %
强制类型转换
- Number()
Number可以转换数字
空字符串使用Number转换为 0
空字符串使用parseInt转换为 NaN
console.log(Number([])); // 0
console.log(parseInt([])); // NaN
- parseInt()
parseInt(字符串,多少进制);
把一个字符串类型转成数字类型并且取整。
如果传入了第二个参数,那么就是来描述第一个参数的进制数,最后会转为十进制
如果转换不出来,结果为NaN
parseInt中如果使用Infinity,那么结果为NaN
- parseFloat()
parseFloat(字符串)
把一个字符串类型转成数字类型保留小数部分。
保留小数
toFixed(n)保留小数
将要计算的数据按照括号了的参数保留几位小数,末尾四舍五入,
且,最后的结果是字符串
NaN 非有效数字
当做了一次非法的数学运算,会出现NaN
NaN是number类型,自己不等于自己
isNaN() 去判断括号中的值是否为NaN,如果是NaN,会返回一个true的结果
否则就是false
isNaN喜欢NaN,讨厌数字
NaN 一定是假的
Infinity正无穷大
基本数据类型——布尔值
布尔值:
- true 真的
- false 假的
运算符:
! 否、非、取反
可以颠倒是非,并且转成布尔值
!! 快速知晓某个数据类型的布尔值
先运算parseInt 结果为NaN、
NaN被isNaN运算之后结果true
true被Number运算结果为 1
1在布尔值中为true,取反为false,最后的结果为false
先用Boolean([])转数组,因为转出来的结果为true,再让true变为假的,最后结果为false
基本数据类型——null
什么时候会出现null?
- 元素找不到;a.该元素压根不存在,b.元素存在但是写错了(script标签上面没有想要获取的元素)
- 空对象指针
- 正则没有匹配到字符的时候会出现null
- 对象初始化赋值null
- 内存释放,用完的变量赋值null
基本数据类型——undefined
什么时候出现undefined?
- 声明变量没有初始化 默认为undefined
- 对象下没有指定属性
- 给除null、undefined的基本数据类型添加属性和方法为undefined
- 函数的默认返回值为undefined
- 函数有形参,没有传入对应实参,形参默认为undefined
基本数据类型——字符串
字符串:string
用单引号对''、双引号对""包裹的内容是字符串或者``
*** html页面的所有文本都是字符串
字符串拼接:
运算符:+
在复杂字符串拼接的时候,可以先设置一个默认的值,然后通过删除默认值 添加''(咔咔),在字符串中++ 即为:'+ 放变量 +' 字符串是不能回车的,不然会报错。
模板字符串
ES6中新增一个叫做模板字符串的语法:
- 方法:${字符串或者变量或者运算}
如果在模板字符串中需要添加、更改字符串(进行字符串拼接),那么只需要在要添加的位置上面写一个${字符串或者变量或者运算}
引用数据类型——Object
什么是对象?
对象:引用类型 一个对象会开辟一个16进制的空间。
对象的key值都是字符串
对象下的数据是一些键值对,即属性名:属性值
如何获取对象下的数据?
. 对象下的啥,例:obj.key1 //=>value1; [] ,obj["key1"] // =>value1;因为对象的属性key是字符串,所以的用引号包起来。属性值会变的时候用这种方式获取属性值。
赋值和赋址
运行js的时候会开辟一个执行栈,专门用来运行js的,在浏览器中执行叫做全局作用域(window),在服务器中环境为global。简单点来说,就是简单类型的赋值为复制一份赋值,引用类型的赋值是赋地址。
- 赋值——简单数据类型
let a = 10;
let b = a;
b = 5;
console.log(a);
读到第1行的时候会先在这个执行栈中开辟一个小空间存放10,再声明一个变量a,最后把10关联到了a身上,当读到第2行的时候,把a赋值给了b(因为a为简单类型),简单类型的赋值就是在之前变量的基础之上复制了一份,最后变量与数据相关联,所以改变b是不会影响a的
- 赋址——引用数据类型
let obj =
{
age:10
};
let obj2 = obj;
obj2.age = 5;
console.log(obj.age);
当读到1行的时候,看到了对象(引用类型),那么会从新开辟一个堆内存16进制的地址,里面存着键值对,再把地址赋值给了obj,到了5行的时候,把obj的地址赋址给了obj2(obj和obj2是同一个地址),那么在改变obj2的属性的时候会影响obj