1. 犀牛前端部落首页
  2. JS教程

js常见错误总结

js常见错误总结

alert

  • 需要等到alert弹出框,点击确定关闭后,后面的代码才执行 – alert会阻碍住线程的渲染
  • alert弹出的内容都会默认转换为字符串 – 调用toString

其他类型转数字类型

字符串转数字

  • 空字符串转数字=>0

Symbol转数字

  • 不能把Symbol类型转换为数字,否则报错

parseFloat、parseInt

  • parseFloat比parseInt多识别一位小数点

字符串拼接

  • 只要加号两边的任意一边出现字符串,则变为字符串拼接
  • 对象转数字时需要先转换为字符串,变为字符串之后则直接拼接,不再转为数字

条件判断里的相互转换规则

null、undefined、NaN

  • null和undefined不等于任何一个数据类型
  • null == undefined
  • NaN和其他值永不相等

规律

  • 字符串和对象比较,把对象转换为字符串
  • 剩下的只要数据类型不同,都是先转换为数字类型,再比较

webkit底层运行机制

底层渲染过程

  1. 在浏览器中打开页面,浏览器引擎会渲染相关的代码(包含JS代码),换句话说,会把代码自上而下执行
  2. 浏览器想要执行代码,会提供一个供代码执行的环境,我们把这个环境叫做ECStack(Execution Context Stack执行环境栈)=>栈内存Stack
  3. 最开始执行的是全局代码,所以会形成一个EC(GLOBAL)全局上下文,在栈内存中执行全局的代码
  4. 在全局的执行上下文中有一个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’)

原创文章,作者:犀牛前端部落,如若转载,请注明出处:https://www.pipipi.net/4331.html

发表评论

登录后才能评论