javascript中的错误类型

javascript 中的错误类型:

  • SyntaxError
  • TypeError
  • ReferenceError
  • RangeError
  • URLError
  • Error

SyntaxError

语法错误

// 当您在编写一个函数时忘记了括号 ,)来括起您的代码,您将收到一个SyntaxError错误
function say(text) {
    return text;
}

say('shark';

// output
Uncaught SyntaxError: missing ) after argument list

// 当函数参数和函数体内使用相同的变量名时,您也可能会遇到此错误。
function say1(text) {
    let text = '呱呱呱';
}

// output
 Uncaught SyntaxError: Identifier 'text' has already been declared

TypeError

TypeError 表示类型错误。当您使用不打算以特定方式使用的东西时,就会发生类型错误。例如,用螺丝刀敲钉子,而不是用锤子。

// a 不是一个函数却被当作函数调用
let a = 1
console.log(a()) 

//output
Uncaught TypeError: a is not a function

// 对一个常量进行复制赋值
const b = 1
b = 2 // you reassign a const type variable again

//output
TypeError: Assignment to constant variable.

ReferenceError

ReferenceError 表示引用错误。当找不到变量的引用、在变量作用域范围之外使用变量、使用未声明的变量时、在暂时性死区期间使用变量时都会抛出此错误。

// 使用未声明的变量
let a = 1
console.log(b) // undefined variable used

//output
Uncaught ReferenceError: b is not defined

// 在变量作用域外使用变量
const c = 2;
if (c > 1) {
    const d = 3;
}

console.log(d)
// output
Uncaught ReferenceError: d is not defined

RangeError

RangeError 表示范围错误。将变量设置在其限定的范围之外、将值传递给超出范围的方法、调用一个不会终止的递归函数时就会抛出此错误。

URLError

URIError: malformed URI sequence (Firefox)
URIError: URI malformed (Chrome)

URIError 表示 URI错误。当 URI 的编码和解码出现问题时,会抛出 URIError。JavaScript 中的 URI 操作函数包括:decodeURI、decodeURIComponent 等。如果使用了错误的参数(无效字符),就会抛出 URIError。

Error

尝试访问无权访问的对象。这很可能出现在使用<iframe>元素时加载了一个不同域名下的页面,这在访问子页面时会违背同源策略。

<!DOCTYPE html>
<html>
  <head>
    <iframe id="myframe" src="http://www1.w3c-test.org/common/blank.html"></iframe>
    <script>
      console.log(document.getElementById('myframe').contentWindow.document);
      // Error: Permission denied to access property "document"
    </script>
  </head>
  <body></body>
</html>

更过关于error的信息,请查阅 JavaScript 错误参考 - JavaScript | MDN (mozilla.org)

本文转载于网络 如有侵权请联系删除

相关文章

  • 凯蒂阿姨的自定义 Mac 终端

    十年前,我开始了我的第一份工作,它要求我使用Linux作为我的笔记本电脑的操作系统。如果我愿意的话,我可以使用各种Linux发行版,包括Gentoo,但由于我过去曾短暂地使用过Ubuntu,所以我选择了UbuntuLucidLynx10.04。我的Konsole终端使用的是Zenburn主题,有一个类似于这样的Bash提示符:machinename~/path/to/folder$复制现在,我使用Mac,具体来说是macOSCatalina,我使用iTerm2与Zenburn主题,zsh提示符是这样的:machinename~/path/to/folder $复制我想,十年来几乎相同的提示符,我已经赢得了老古板的称号,不过这只是标志着,我的喜好和习惯与现在耍酷的孩子们不一样而已。仿佛是为了证明我的古板观点,我想改变我的终端和我的旧终端一样。在Mac上获得一个看起来和感觉像LucidLynx的设置并不简单,而且我很花了一些时间。我最近最大的改变是从Bash转移到zsh,并迁移了我的Bash魔改。但这只是其中一个重大的转变。我学到了许多新式的经验,现在我把这些经验赠送给你,亲爱的读者。Co

  • 关于字符串,我总结了这些

    从字符串的定义到库函数的使用原则,从各种反转到KMP算法,相信大家应该对字符串有比较深刻的认识了。那么这次我们来做一个总结。要不要使用库函数在文章344.反转字符串中强调了打基础的时候,不要太迷恋于库函数。甚至一些同学习惯于调用substr,split,reverse之类的库函数,却不知道其实现原理,也不知道其时间复杂度,这样实现出来的代码,如果在面试现场,面试官问:“分析其时间复杂度”的话,一定会一脸懵逼!所以建议如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。如果库函数仅仅是解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。双指针法在344.反转字符串,我们使用双指针法实现了反转字符串的操作,双指针法在数组,链表和字符串中很常用。接着在字符串:替换空格,同样还是使用双指针法在时间复杂度O(n)的情况下完成替换空格。其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。那么针对数组删除操作的问题,其实在27.移除元素中就已经提到了使用双指针法进行移除操作。同样的道理在151.翻转字符串里的单词中我们

  • 一次完整的通话过程SIP报文分析

    场景:主叫方(1004,Yate客户端,端口号:52110)->通过FreeSWITCH(端口号:5070)呼叫->被叫方(1000,ZoIPer客户端,端口号:5070)被叫方经历:振铃->(N秒后)接听->正常通话一段时间后->挂断电话。注:主叫、被叫、FreeSWITCH均在同1个机器(mac本上)为了方便分析SIP报文,有2种方法:1、freeswitch开启sip报文debugsofiaprofileinternalsiptraceon复制freeswitch控制台上,输入上述命令,即可开始记录SIP报文,上述通话过程,输出的报文日志如下(注:为了方便查看,每段报文手动加了序号)1->recv903bytesfromudp/[192.168.7.101]:52110at20:07:57.811303: ------------------------------------------------------------------------ INVITEsip:1000@192.168.7.101SIP/2.0 Max-Forwards

  • 前端|Grid实现自适应九宫格布局

    1前言现在无论是做app还是做网站,宫格的布局也是必然存在的,那么如何使用css实现自适应的九宫格布局呢?下面简单来介绍一下css里面的grid实现九宫格布局。2相关属性和函数2.1fraction单位CSS栅格布局带来了一个全新的值:fraction单位,fraction单位通常简写为fr,它允许你根据需要将容器拆分为多个块。下面将每一列和行更改为一个fraction单位的值:.grid{display:grid;//划容器为三个1fr的列grid-template-columns:1fr1fr1fr;//划容器为三个1fr的行grid-template-rows:1fr1fr1fr;}结果是栅格布局将会把整个宽度和高度各分成三个fraction,每列和每行都会各占据一个fraction单位。如果我们将grid-template-columns的值更改为1fr2fr1fr,第二列的宽度将会是其它两列的两倍。总宽现在是四个fraction单位,第二列占据两个fraction单位,其它列各占一个fraction,此时这些子元素都会随着屏幕宽度的变化而跟着变化了。这样fraction单位值

  • PHPOK 4.8.338 后台任意文件上传漏洞

    phpok是深圳市锟铻科技有限公司一套采用PHP+MYSQL语言开发的企业网站系统。phpok4.8.338版本存在任意文件上传漏洞,攻击者可利用漏洞上传任意文件,获取网站权限。通过bp爆破,登录后台:选择,工具>附件分类管理编辑分类列表。在支持的附件类型:中添加PHP类型:点击内容管理-咨询中心-行业新闻,添加新闻,类型选择刚刚新建的压缩软件,上传得到:该文件在刚刚设置是的存储目录是res/,所以我们通过浏览器访问该大马:即可拿到系统用户权限!有问题代码出现在/framework/admin/rescate_control.php这里只判断附件类型是否为空,并没有限制后缀,导致可以自行添加php后缀,进而执行上传文件操作,获取网站shell。加固方法:对上传类型后缀进行过滤

  • 大厂高频面试精选

    近日,GitHub上一位名为木易杨(yygmind)的开发者,在GitHub中建了一个名为Advanced-Frontend/Daily-Interview-Question的项目,该项目每天会更新一道大厂前端面试题,并邀请开发者在issue区中作答,以下是从该项目中挑选的9道题和答案。 大厂面试1.写React/Vue项目时为什么要在组件中写key,其作用是什么?key的作用是为了在diff算法执行时更快的找到对应的节点,提高diff速度。vue和react都是采用diff算法来对比新旧虚拟节点,从而更新节点。在vue的diff函数中。可以先了解一下diff算法。在交叉对比的时候,当新节点跟旧节点头尾交叉对比没有结果的时候,会根据新节点的key去对比旧节点数组中的key,从而找到相应旧节点(这里对应的是一个key=>index的map映射)。如果没找到就认为是一个新增节点。而如果没有key,那么就会采用一种遍历查找的方式去找到对应的旧节点。一种一个map映射,另一种是遍历查找。相比而言。map映射的速度更快。//vue部分源码 //vue项目src/core/vdom/patc

  • 【开源公告】简单易用的lua调试工具LuaPanda正式开源

    LuaPanda 是基于 VSCode 扩展实现的 lua 代码调试器。它的设计目标是简单易用,支持多框架。 项目特点是使用了lua/C 双架构。调试器主体使用lua开发(可独立运行),同时实现了一个C扩展库,兼顾了高效和灵活性。LuaPanda 适用的场景项目开发期:使用调试器和 C 扩展库。性能较好,调试对游戏帧数影响小。项目发布后:使用 lua 调试器。可以动态下发,避免游戏打包后无法调试的问题。LuaPanda 功能介绍支持单步调试,断点调试,协程调试。支持lua5.1-5.3,可运行在win/mac系统中,支持slua/xlua/slua-unreal等框架。在断点处可以监视和运行表达式,返回结果。可以根据断点密集程度调整hook频率,有较好的效率。支持attach模式,lua运行过程中可随时建立连接。 使用lua/C双调试引擎,兼顾高效和灵活。LuaPanda调试界面attach模式:lua正在执行,点击VSCode上的开始调试按钮。调试器和lua虚拟机建立连接,开始调试。LuaPanda项目规划完善和优化功能,支持条件断点和记录点,优化真机调试和字符串调试,优化调试控制台

  • AI安全大牛都来了!智能安全的话题引发学术界/产业界共同聚焦 | CCF-GAIR 2018

    2018全球人工智能与机器人峰会(CCF-GAIR)在深圳召开已进入第二天的议程,活动现场依旧火爆。 2018全球人工智能与机器人峰会(CCF-GAIR)在深圳召开已进入第二天的议程,活动现场依旧火爆。本次峰会由中国计算机学会(CCF)主办,雷锋网、中国香港中文大学(深圳)承办,得到了宝安区政府的大力指导,是国内人工智能和机器人学术界、工业界及投资界三大领域的顶级交流盛会,旨在打造国内人工智能领域最具实力的跨界交流合作平台。 根据大会安排,6月30日迎来了仿生机器人专场,机器人行业应用专场,计算机视觉专场,智能安全专场,金融科技专场等专场。作为主论坛的研究方向的延伸,“智能安全专场”则汇聚来自广州大学、浙江大学的专家学者,同时来自百度、阿里巴巴、腾讯、京东、海康威视的安全大牛,共同探讨人工智能领域里的安全问题,同时就安全研究能否深入进人工智能领域等话题带来了企业的最新观点与研究成果。 9:15分,会场高朋满座,专场开场。专场主席暨主持人是来自广州大学网络空间先进技术研究院院长、教授、博导的田志宏先生。 广州大学网络空间先进技术研究院院长、教授、博导的田志宏先生 他首先代表峰会主办方对与

  • 地平线发布全球首款嵌入式AI芯片,目标是自动驾驶和智慧城市

    中国“芯”时代,已经来临!8月中旬,人工智能芯片初创公司寒武纪获得1亿美元的A轮融资;9月初,华为在IFA2017上正式发布全球首款面向手机的人工智能芯片——麒麟970;12月20日,地平线在北京召开主题为“AI芯·时代”的发布会,正式发布两款计算机视觉嵌入式AI芯片——旭日和征程,分别面向智能驾驶和智能摄像头。地平线创始人&CEO余凯表示,从15年成立至今,两年的时间,中国首款嵌入式人工智能芯片终于诞生。相较于其他芯片,旭日和征程在性能、功耗、面积等方面都有了较大的提升,不仅可同时识别200个对象,芯片乘法器利用率峰值更高达100%,可强耦合于各种应用场景。中国“芯时代”要从算法和软件出发重新定义和设计硬件2017年已正式走进尾声,纵观整个2017年硬科技行业,六个字总结:VR冷了,AI火了。但相较于去年突然爆发的VR概念,AI显然火的更为扎实,商业落地也更实际一些。然而,即便大家已经公认人工智能将引领人类生活走向另一个新阶段,AI时代却依旧将来未来。从2017年整体发展情况看,我们不难发现,在国内AI行业快速发展的当下,计算能力不足成为了技术发展和应用落地最大的阻碍,而作为

  • 腾讯云智能创作内置资源

    播放器内置了一些素材资源,类型如下: 音乐 滤镜 特效 贴纸 文字 模板 动效 了解内置资源可以更好的帮助您进行素材自定义,接下来看一下如何获取这些内置资源。 获取内置资源需要首先引入plugin实例。 constplugin=requirePlugin('myPlugin');复制 内置音乐 获取默认音乐列表:letmusicList=awaitplugin.getMusicList();复制 数据结构如下(仅为示意,非真实数据):[{Name:'少年',key:'key1',previewImage:'https://image.xxxx.png',src:'https://music.xxx.com'},{Name:'我心飞翔',key:'key2',previewImage:'https://image.xxxx.png',src:'https://music.xxx.com'},....../

  • 【leetcode】1291. Sequential Digits

    An integerhas sequentialdigits ifandonlyifeachdigitinthenumberisonemorethanthepreviousdigit. Returna sorted listofalltheintegers intherange [low,high] inclusivethathavesequentialdigits.   Example1: Input:low=100,high=300 Output:[123,234] 复制 Example2: Input:low=1000,high=13000 Output:[1234,2345,3456,4567,5678,6789,12345复制 纯纯暴力法,代码扩展性差。。但速度真的快 classSolution{ public: vector<int>sequentialDigits(intlow,inthigh){ intbeginer[9]={12,123,1234,12345,1234

  • 如何在Vue的项目里对element的表单验证进行封装

    介绍需求 熟悉并优化公司项目的第五天,领导说能不能把表单验证封装一下,我打开代码一看 由于是后台管理系统,无数个需要验证的输入框,由于截图长度受限,只能展示部分,类似于这种页面还有无数个!代码重复率非常高,难怪需要封装了。 实现思路 1.将代码从页面中抽离,在utils文件夹新建js文件存储 2.新增js代码 letFormValidate=(function(){ //eslint-disable-next-line functionFormValidate(){} //From表单验证规则可用于公用的校验部分 FormValidate.Form=function(){ return{ //用户角色,姓名的验证规则 name:function(rule,value,callback){ if(!value){ returncallback(newError('用户角色不能为空')) }else{ callback() } }, //角色描述验证规则 description:function(rule,value,callback){ if(!value){ returncallb

  • 算法:KMP, str1字符串是否包含str2字符串

    【普通解法】从左到右遍历str1的每一个字符,然后看如果以当前字符作为第一个字符出发是否匹配str2字符串。 【KMP算法】 1)生成一个nextArr数组,长度与str2字符串长度一样。i的值含义是str[0-i-1】中,必须以str[i-1]结尾的后缀子串与必须以str[0]开头的前缀子串,最大匹配长度是多少。 快速生成nextArr数组,先等等 2) 假设str1从i到j-1和str2从0到j-1一样。从j不一样了。 然后str2的索引退回到t2索引继续和str1的j匹配。圆圈就代表最长前缀子串。 str1索引不回退,是因为中间其他位置不可能再完全匹配str2了。 使用反证法: 假设str1能从k开始能够完全匹配str2.看虚线部分。 说明虚线1和虚线2一样。 又因为str1和str2从0到j-1一样。说明虚线1和虚线3一样。 那么虚线2和虚线3一样,那么最长前缀子串就不是咱开始的了。 如果咱的最长子串算的是对的,那么str1索引从j开始就没问题。 【nextArr数组生成】 1)从左到右依次求解。 在求解到i的时候,0到i-1的值已经求出来了。 计算i的时候,已经知道i-

  • 位运算

    计算机存储的都是补码,位运算也是用的补码运算,然后再转成自然数结果。 正数的原码、反码、补码都是原码。 负数的原码:最高位的符号位为1, 负数的反码:除最高位的符号位,其他位取反 负数的补码:反码+1   位运算结果最高位符号位是0就是正数,是1就是负数,按照正负数求补码的逻辑将补码转成自然数即可。   之所以有补码,是因为按照反码计算时,发现小数减去大数不会有问题,而大数减去小数的就不对了,结果始终相差1。 推荐看整数在内存中是如何存储的:http://c.biancheng.net/view/vip_1761.html, 不过这个是付费文章,简单复制下拿过来看看。       加法和减法是计算机中最基本的运算,计算机时时刻刻都离不开它们,所以它们由硬件直接支持。为了提高加减法的运算效率,硬件电路要设计得尽量简单。对于有符号数,内存要区分符号位和数值位,对于人脑来说,很容易辨别,但是对于计算机来说,就要设计专门的电路,这无疑增加了硬件的复杂性,增加了计算的时间。要是能把符号位和数值位等同起来,让它们一起参与运算,不再加以区分,这样硬件

  • LOJ#6682. 梦中的数论(min_25筛)

    第一次打\(min_25\)筛,所以写一写 做法 就是穿了件肥肥的衣服~,等价于这个: \[\frac{1}{2}(\sum\limits_{i=1}^n\sigma^2(i)-\sum\limits_{i=1}^n\sigma(i)) \]后面那个分块一下就好了(不会有人学傻了去筛吧。。。) 看前面这个\(\sigma^2(i)\),设\(F(i)=\sigma^2(i)\) 显然:\(F(i)\)是积性函数且\(F(p^k)=(k+1)^2,p\inprime\) 我们考虑min_25筛的公式 \(g(n,j)=\sum\limits_{i=1}^n[i\inprime||min_i(P)>P_j]F(i)\):$$\begin{aligned}\ g(n,j)= \begin{cases} g(n,j-1)&P_j^2>n\ g(n,j-1)-F(P_j)[g(\frac{n}{P_j},j-1)-\sum\limits_{i=1}{j-1}F(P_i)]&P_j2≤n\ \end{cases} \end{aligned}$$ \(s(n,j)=\s

  • leetcode 10. Regular Expression Matching 、44. Wildcard Matching

    10.RegularExpressionMatching https://www.cnblogs.com/grandyang/p/4461713.html classSolution{ public: boolisMatch(strings,stringp){ if(p.empty()) returns.empty(); if(p.size()>1&&p[1]=='*') returnisMatch(s,p.substr(2))||(!s.empty()&&(s[0]==p[0]||p[0]=='.')&&isMatch(s.substr(1),p)); else return!s.empty()&&(s[0]==p[0]||p[0]=='.')&&isMatch(s.substr(1),p.substr(1)); } };复制   44.WildcardMatching https://www.cnblogs.com/grandyang/p/4401196.html classSol

  • Povit(行转列)与UnPovit(列传行)

    T-SQL语句中,Pivot运算符用于在列和行之间对数据进行旋转或透视转换,PIVOT命令可以实现数据表的列转行,同时执行聚合运算,UNPIVOT则与其相反,实现数据的行转列。 PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT与PIVOT执行相反的操作,将表值表达式的列转换为列值。 通俗简单的说:PIVOT就是行转列,UNPIVOT就是列传行 一PIVOT实例 1.建表 建立一个销售情况表,其中,year字段表示年份,quarter字段表示季度,amount字段表示销售额。quarter字段分别用Q1,Q2,Q3,Q4表示一、二、三、四季度。   2.填入表数据 使用如下程序填入表数据。   3.如果我们要比较每年中各季度的销售状况,要怎么办呢?有以下两种方法: (1)使用传统Select的CASE语句查询 在SQLServer以前的版本里,将行级数据转换为列级数据就要用到一系列CASE语句和聚合查询。虽然这种方式让开发人员具有了对所返回数据进行高度控制的能力,但是编

  • 24.API爬天气预报数据

    1.免费注册API地址:https://console.heweather.com/复制 必须要用IE浏览器打开,注册邮箱激活,打开控制台,如图:复制 认证key是访问api的钥匙   2.阅读api说明开发文档地址:https://www.heweather.com/documents/api/v5/url复制   可以看到免费的用户只能访问一个服务器节点: 复制   3.了解调用接口的方法请求参数如下:复制 之后就需要拼接参数组成请求urlhttps://free-api.heweather.com/v5/weather?city=yourcity&key=yourkey复制   4.获取城市ID代码链接地址:https://cdn.heweather.com/china-city-list.txt复制 这里数据是乱码的,跟网页编码有关系。复制   5.获取城市代码复制 #coding:utf-8 importrequests url='https://cdn.heweather.com/chi

  • inflater.inflate()的参数含义

    inflate()的作用就是将一个用xml定义的布局文件查找出来,注意与findViewById()的区别,inflate是加载一个布局文件,而findViewById则是从布局文件中查找一个控件。   1.获取LayoutInflater对象有三种方法 LayoutInflaterinflater=LayoutInflater.from(this);LayoutInflaterinflater=getLayoutInflater();LayoutInflaterinflater=(LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);   2.关于LayoutInflater类inflate(intresource,ViewGrouproot,booleanattachToRoot)方法三个参数的含义 resource:需要加载布局文件的id,意思是需要将这个布局文件中加载到Activity中来操作。 root:需要附加到resource资源文件的根控件,什么意思呢,就是inflate()会返回

  • ROS概述

    参考:古月居《ROS探索总结》《ROS·wiki:Introduction》 入门介绍 ROS(RobotOperatingSystem)是一个机器人软件平台,它能为异质计算机集群提供类似操作系统的功能。ROS系统是起源于2007年斯坦福大学人工智能实验室的项目与机器人技术公司WillowGarage的个人机器人项目PR2(PersonalRobotsProgram)之间的合作,2008年之后就由WillowGarage来进行推动。 ROS提供一些标准操作系统服务,例如硬件抽象,底层设备控制,常用功能实现,进程间消息,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。ROS是基于一种图状架构,从而不同节点的进程能接受,发布,聚合各种信息(例如传感,控制,状态,规划等等)。 ROS可以分成两层,低层(BSD许可证)是上面描述的操作系统层,高层则是广大用户群贡献的实现不同功能的各种软件包,例如定位绘图,行动规划,感知,模拟等等。 ROS是用于机器人的一种元操作系统(meta-operatingsystem),或者说次级操作系统。它提供类似操作系统所提供的功能,

  • 少些招数,多些内力

    什么是基础? 现在遇到一个很奇怪的现象,无论在各大论坛还是QQ群尤其是前端领域,总有人说基础很重要,这句话是没什么问题的,但是说这话的往往自己并不知道什么是基础 现在很多人只看到表面上的基础,看不到更深层次的基础。什么你只要JS基础好学什么框架都很快,大错特错一个人JQ写的再好也未必用得好react,因为思想不同 而且JS基础只是很浅的一层!深层次的计算机网络数据结构算法编译原理才是更重要的! 而且越往上研究数学就越重要,很久之前我曾在一个交流群说正在补数学,很多人说没用,如果单纯写一些业务那的确是没什么用,如果有更高的追求数学一定要学好不然迟早要补回来 面试套路 现在面试讨论的基本离不开框架,面试者大谈特谈用过什么框架。面试内容也是千篇一律,正如萧井陌所说绝大多数人是没有鉴别技术能力的。 闭包原型链vue的双向绑定实现原理?累不累?烦不烦?不停的炒冷饭。这些东西都被那些垃圾博客写烂了,如果你在读过7一些所谓高大上的书,比如你不知道的js,扯扯ASTDSL语法生成什么的大部分面试官就傻了。实际上到底懂多少自己心里清楚。 如果自己写个小型mvvm框架放到github上,面试的时候也能吹吹

相关推荐

推荐阅读