JS常见问题概览

Uncaught TypeError: undefined is not a function

Uncaught 表示错误没有被 catch 语句捕获,TypeError 是错误的名字,在这里表示是数据类型错误。undefined is not a function,这是 Error 的主信息,这里表示代码尝试使用 undefined ,把它当做一个函数。 这种错误,通常是执行了一个未定义的方法:

  • 可能一:某个方法没有正确引入。如:this 的指向改变、异步引入问题;

  • 可能二:浏览器兼容问题。如:IE 的 DOM 对某些 API 不支持;

  • 可能三:ES6 没有转换。如:使用了 findIndex 等一些新 API,部分安卓机不支持。

Uncaught ReferenceError: Invalid left-hand side in assignment

未捕获的引入错误:赋值语句左侧变量无效。比如:

// 正确逻辑是比较func1的返回值。因少写了一个“=”,变成了无效的赋值语句。 
function func1 () {
    return 1
}
if (func1() = 1) {
    console.log('true')
}

Uncaught SyntaxError: Invalid or unexpected token

未捕获的语法错误:无效或意外的符号。一般是出现中文符号或者语句不完整。比如:

// 出现中文圆括号
function func1 () {
  console.log(1)
}
func1()

类似的还有:

// Uncaught SyntaxError: Unexpected end of input
let arr = [a]
arr[1
    
// Uncaught SyntaxError: Unexpected identifier
let objA = {
  a: 1
objA.a

// Uncaught SyntaxError: Unexpected end of JSON input
JSON.parse('')

Uncaught TypeError: Converting circular structure to JSON

未捕获的语法错误:将循环结构转换为JSON。比如:

const objA = {}
const objB = {
    objA: objA
}
objA.objB = objB
JSON.stringify(objB)

Uncaught RangeError: Maximum call stack size exceeded

未捕获边界错误:超过最大调用堆栈大小 。一般是函数递归调用或者循环中没有加判断条件。比如:

function countDown (n) {
    if (n < 0) {
        console.log('结束!')
    }
    console.log(n)
    n--
    countDown(n)
}
countDown(5)

onbeforeunload事件无效

最后更新于