数据类型
- String (字符串)
- Number (数值)【小数点的加减不准确,因为计算机是二进制,计算过程中有损耗】
- Boolean (布尔)
- undefined(未定义)
- null (空指针)
- Object(对象)
- (es6) symbol(独一无二)
堆栈内存
- 栈内存和堆内存
let a = 10 数值10存放在栈内存中
let b = {
m:10,
n:20
}
b 指向的是堆内存中的地址 {...}存放在堆内存中,如果let c = b,c.m = 12 改变 b.m 的值也会改变,因为c和b 指向的是同一个堆内存中的地址,当然如果想解决这个问题后面会讲到深拷贝,浅拷贝相关知识,
- 堆栈溢出
当存储的数据达到某一限制的时候,会出现堆栈溢出,栈内存会自动销毁,堆内存不会,当堆内存不断累积,不释放内存,就会出现内存泄漏【内存泄漏的结果就是堆栈溢出】
垃圾回收机制
语言的垃圾回收机制,有手动和自动两种方式,js只是自动回收 垃圾回收机制其实就是将栈中的变量设置为null 空指针,将所有栈中指向这个堆地址的变量都设置为null,堆中的内存并不会 立即被清除掉,浏览器会根据内存的使用情况清除堆中的孤儿(没有被指向)对象
类型转换
- toString(x) 转换为字符串,x可以是2/16.等。
- toFixed(x) 保留x位有效数字
- parseFloat(x) 转换为浮点类型数值
- parseInt(x) 转换为整数
- Number(x)强转数值 3.4 是从字符第0位开始到非有效数字结束如果第0位是非有效数字则返回NaN,5.只要有一个是非有效
数字就返回NaN
赋值运算和一元运算
++i和i++ 的区别 赋值运算有区别 i++ 是先将i 的值赋值 然后在++;++i 反之是先运算在赋值
let i = 1 if(i--){} 条件成立
进制转换
10 的2进制是 1010 转换过程是 10除2取余 然后在继续除2取余
1010 的十进制是 12(3) + 02(2) + 12(1) + 02(0)【8421快速转换】
8421
1101
结果是 8+4+1 = 13
位运算
- ~ 位非运算符 【+1 取反】
- & 位与运算符 【转换位二进制取&】
- | 位或运算符 【同上】
- << >> 左右移位 【1<<n 求2的n次幂】
关系运算符
= < > <= >= ==【不建议使用,自带隐式转换 let a = 2 if(a == '2') if条件成立】
===【值和类型都相同】
【NaN 与任何内容都不想等 包括自己; null == undefined 0 == '' == false】
if(x == false)【x式=是"" 0 false 满足条件】
if(x === false) 【x是 false 满足条件】
if(!x)【x是 “” 0 false null undefined NaN 满足】
这里涉及到隐式转换的问题 = 号两边要转换成相同的数据格式在做比较,而!x 是转换成布尔值 上面六种转换完都是false 都满足条件
逻辑运算符和三元预算符
&& ||
x = x>50 等同于 x = x>50?true:false
x = x>4?true:x===2?true:0 嵌套
x = x || 50 等同于 x?x:50 【熔断处理】
ES6中数组的解构赋值
//1左右两边结构一样
let [a,b,[c,d]] = [1,2,[3,4]]
//2左右两边结构不一样
let [a,b] = [1,2,3,] //a:1,b:2
let [a,b] = [1] //a:1 b:undefind
//给定默认值
let [a,b=1,c=2] = [3] //a:3 b:1 c:2
//扩展运算符[注意扩展运算符只能写在最后一个元素]
let [a,...b] = [3,4,5,6] //a:3 b:[4,5,6]
数组的常用方法
let arr = [1,2,3,4]
let arrTwo [8,9,10]
//清空数组实现方法
arr = []
arr.length = 0
arr.splice(0,arr.length)
//数组转换成字符串
arr.toString()
arr.join(',') //参数为空 默认是用toString()方法
//数组的拼接
arr.concat(arrTwo) //不会改变原数组 返回一个新数组
//扩展运算符在等号左边表示将剩余的数据打包成一个数组
//在等号右边表示将数组中的所有元素放到当前的位置
let res = [...arr,...arrTwo]
//数组反转
arr.reverse() //会修改原来的数组
//截取数组指定范围的内容
arr.slice(1,3) //包头不包尾【包含起始位置 不包含结束位置】 index:1,2
//查找指定元素位置
arr.indexOf(元素,从哪个位置开始查找) //找到了就是返回元素的对应位置 没有找到的话就会返回-1
arr.lastIndexOf() //从右到左查找
arr.includes(元素) //返回true 或false