alert
- 需要等到alert弹出框,点击确定关闭后,后面的代码才执行 – alert会阻碍住线程的渲染
- alert弹出的内容都会默认转换为字符串 – 调用toString
其他类型转数字类型
字符串转数字
Symbol转数字
parseFloat、parseInt
- parseFloat比parseInt多识别一位小数点
字符串拼接
- 只要加号两边的任意一边出现字符串,则变为字符串拼接
- 对象转数字时需要先转换为字符串,变为字符串之后则直接拼接,不再转为数字
条件判断里的相互转换规则
null、undefined、NaN
- null和undefined不等于任何一个数据类型
- null == undefined
- NaN和其他值永不相等
规律
- 字符串和对象比较,把对象转换为字符串
- 剩下的只要数据类型不同,都是先转换为数字类型,再比较
webkit底层运行机制
底层渲染过程
- 在浏览器中打开页面,浏览器引擎会渲染相关的代码(包含JS代码),换句话说,会把代码自上而下执行
- 浏览器想要执行代码,会提供一个供代码执行的环境,我们把这个环境叫做ECStack(Execution Context Stack执行环境栈)=>栈内存Stack
- 最开始执行的是全局代码,所以会形成一个EC(GLOBAL)全局上下文,在栈内存中执行全局的代码
- 在全局的执行上下文中有一个VO(GLOBAL)全局变量对象,可以把接下来定义的变量和对应的值存储到这里面
栈内存
let a = 1
// 1.创建一个值(基本类型值直接存储在栈内存中即可)
// 2.创建一个变量a,把其存储到VO(GLOBAL)中
// 3.让创建的变量a和创建的值12关联在一起(=赋值的操作)
// 顺序很重要,不能颠倒
堆内存
let n = {name: 'wilber'}
// 1.创建值
// 1.开辟一个堆内存(Heap),每一个堆内存都有一个16进制的地址
// 2.把对象中的键值对分别存储到堆内存中
// 3.把堆内存的地址放在栈内存中,用来提供变量的引用
// 2.创建一个变量
// 3.让变量和之前创建堆内存的地址进行关联
Function
作用
- 函数的意义在于封装
- 把实现某一个功能的代码封装在一起
目的
- 减少页面中冗余代码,提高代码重复利用率 – 低耦合,高内聚
创建过程
function fn()
// 1.创建值
// 1.开辟一个堆内存
// 2.把函数体中的代码当作字符串储存在堆中
// 3.把堆地址放到栈中
// 2.创建一个变量
// 3.让变量和地址关联
执行依赖条件
fn()
// 1.创建一个全新的执行上下文,把执行上下文压缩到栈内存中去执行(进栈执行)
// 2.在这个上下文中,也存在一个AO(变量对象),用来存储当前上下文代码执行中所创建的变量
// 3.代码执行
// 4.当上下文的代码都执行完后,如果该上下文中的信息没有被外界占用的情况,则执行完出栈
形参、实参
- 形参是创建函数时候设定的变量
- 实参是执行函数时候给形参传递的具体值
arguments
- 函数内置的实参集合
- ES6箭头函数中没有arguments
- 只能出现在函数体中
- 是一个类数组集合
- 和是否定义形参变量没有关系
Array
删除数组末尾一项
- arr.length–
- arr.pop()
- arr.splice(arr.length-1)
数组末尾追加项
- arr.push(‘增加项’)
- arr[arr.length] = ‘增加项’
- arr.splice(arr.length, 0, ‘增加项’)
改变原数组
- push、pop、unshift、shift、splice、reverse、sort
不改变原数组
- slice、concat、toString、join、indexOf/lastIndexOf、includes、forEach、map、reduce、filter、flat、find/findIndex、some/every
String
字符查找
- charAt索引过大或过小时返回字符串,str[索引]返回undefined
字符串截取
- slice支持负数索引,substr/substring不能是负数索引
字符替换
- replace不使用正则的情况下,一次只能替换一个字符
- str.replace(/aa/g, ‘ss’)