# SyntaxError ReferenceError TypeError error

// for(adsf,asdf)//Uncaught SyntaxError 语法错误
	
// dfasdf//Uncaught ReferenceError 引用错误
	
//let a=3; a()//Uncaught TypeError不是预期类型时抛出
	EvalError
		创建一个error实例,表示错误的原因:与 eval() 有关。
	InternalError 
		创建一个代表Javascript引擎内部错误的异常抛出的实例。 如: "递归太多".
	RangeError
		创建一个error实例,表示错误的原因:数值变量或参数超出其有效范围。
	ReferenceError
		创建一个error实例,表示错误的原因:无效引用。
	SyntaxError
		创建一个error实例,表示错误的原因:eval()在解析代码的过程中发生的语法错误。
	TypeError
		创建一个error实例,表示错误的原因:变量或参数不属于有效类型。
	URIError
		创建一个error实例,表示错误的原因:给 encodeURI()或decodeURl()传递的参数无效。
  • 捕获异常 try...catch...
  • 抛出异常,让下一级处理,throw error
  • new Error(xxx)
  • new TypeError(xxx)
  • throw new TypeError(222)
//控制台出现“The script has an unsupported MIME type ('text/html')”报错

有时候开发React或者Vue项目时,本地运行访问时,会莫名出现报错如下:

The script has an unsupported MIME type ('text/html')
这是由于无意中开启了service Workesr 功能,只要关掉即可解决。

步骤:

开发者工具 -> Application -> service Workers -> 展开Service workers from other domains ->
 找到localhost域名项  -> 在右侧Unrigister注销 -> 最后刷新之前的项目页面即可。

# cannot read property of undefined

cannot read property of undefined 是一个常见的错误,如果意外的得到了一个空对象或者空值,这样恼人的问题在所难免。

  • 解决方案:
    • && 短路运算符进行可访问性嗅探
    • || 单元设置默认保底值
    • try...catch
    • ?.
    • lodash get
const obj = {
   user: {
       posts: [
           { title: 'Foo', comments: [ 'Good one!', 'Interesting...' ] },
           { title: 'Bar', comments: [ 'Ok' ] },
           { title: 'Baz', comments: []}
       ],
       comments: []
   }
}

console.log(
	obj.user &&
	obj.user.posts &&
	obj.user.posts[0] &&
	obj.user.posts[0].comments
)

//[ 'Good one!', 'Interesting...' ]

console.log((((obj.user || {}).posts||{})[0]||{}).comments)//[ 'Good one!', 'Interesting...' ]


var result
try {
   result = obj.user.posts[0].comments
   console.log(result)
   //['Good one!', 'Interesting...']
}
catch {
   result = null
}


console.log(obj?.user?.posts[0]?.comments)//   //['Good one!', 'Interesting...']

// lodash 等库 get API (可自己编写)
const get = (p, o) => p.reduce((xs, x) => (xs && xs[x]) ? xs[x] : null, o)

console.log(get(['user', 'posts', 0, 'comments'], obj)) 
// [ 'Good one!', 'Interesting...' ]

console.log(get(['user', 'post', 0, 'comments'], obj)) // null
最后更新: 5/31/2022, 8:59:31 AM