您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
不为熟知的ES5 api ( 三 )
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
不为熟知的ES5 api ( 三 )
京东云官网研发团队
2021-01-22
IP归属:未知
84680浏览
前端
Js
计算机编程
继续讲解不为熟知的ES5 api: ## 9. getUTCFullYear、getUTCMonth、getTimezoneOffset 我们都知道Date对象有getFullYear,getMonth,getDate等api来获取日期时间信息,但是那是本地时间,还有相应的getUTCFullYear,getUTCMonth,getUTCDate等来获取UTC时间,同时可以通过getTimezoneOffset来获取本地时间和UTC时间的差值(以分钟计) ## 10. Date.UTC、getTimezoneOffset Date.UTC可以根据年月日时分秒等创建一个日期对象,这是UTC时间,getTimezoneOffset可以获取本地时间和UTC时间的时间差,可以结合Date.UTC和getTimezoneOffset创建一个本地时间。 ``` Date.UTC(2020, 6, 23, 9, 5) + new Date().getTimezoneOffset() * 60 * 1000 ``` ## 11. RegExp.$1 $2 当RegExp做完正则的解析之后,会把相应的分组值放在RegExp.$1,RegExp.$2等静态属性上,通过访问这些静态属性来实现一些功能有时会更方便。比如: 之前: `` "abc,123".replace(/([a-z]+),([0-9]+)/, (source, g1, g2) => g2 + g1.toUpperCase()) `` 之后: `` "abc,123".replace(/([a-z]+),([0-9]+)/, () => RegExp.$2 +RegExp.$1.toUpperCase()) `` 之前: ``` const [source, g1, g2] = /([a-z]+),([0-9]+)/.exec("def,456") g1 //def g2 //456 ``` 之后: ``` /([a-z]+),([0-9]+)/.exec("def,456") RgeExp.$1 // def RgeExp.$2 // 456 ``` ## 12.Error js有6大内置错误,可能很多开发者都说不出来。熟悉他们有利于我们在抛出错误时抛出更精确的类型。 ``` URIError TypeError SyntaxError ReferenceError RangeError EvalError ``` #### URIError 这说明了使用一种全局URI处理功能与其定义不兼容。 JS中的URI(统一资源指示符)具有以下功能:decodeURI,decodeURIComponent等。 如果我们用错误的参数调用其中任何一个,我们将得到一个URIError。 URIError: URI malformed encodeURI,获取URI的未编码版本。“%”不是正确的URI,因此引发了URIError。 编码或解码URI时出现问题时,将引发URIError。 #### TypeError TypeError 是指对象用来表示值的类型非预期类型时发生的错误。例如,我们期望它是布尔值,但结果发现它是string类型。 再例如: const num = 123 num.toUpperCase() 这会引发TypeError TypeError: num.toUpperCase is not a function 因为toUpperCase函数需要字符串数据类型。toUpperCase函数是有意通用的;它不需要其this值是String对象。因此,可以将其转移到其他种类的对象中用作方法。 如果我们在Objects,Boolean,Symbol,null,undefined数据类型上调用toUpperCase函数,则只有字符串会转换为大写或小写形式,我们将得到TypeError,因为它操作的数据类型错误。 #### SyntaxError 这是我们遇到的最常见的错误。Javascript引擎发现了不符合语法规范的代码,会出现此错误。解析期间,JS引擎捕获了此错误。 在JS引擎中,我们的代码经历了不同的阶段,然后才能在终端上看到运行结果。 标记化 解析 执行 标记化将源代码分解为各个单元。在这个阶段,将对数字,关键字,文字,运算符进行分类并分别进行标记。接下来,生成的token流将传递到解析阶段,由解析器处理。这是从token生成AST的地方。AST是我们代码结构的抽象数据结构。 在标记化和解析这两个阶段,如果我们代码的语法不符合JS的语法规则,则会使执行阶段失败并引发SyntaxError。例如, const l = console.log let cat h =“ cat” 这里的“h”明显是多余的,所以由于多了这个字符,会导致引擎抛出SyntaxError SyntaxError: Unexpected identifier 很显然,Node.js引擎发现了错误,由于这个不和谐字符的出现,导致cat变量的声明失败了。 #### ReferenceError 当对变量/项的引用被破坏或不存在时,将引发此错误。也就是说,当你尝试引用一个未被定义的变量时,将会抛出一个 ReferenceError 。 例如, const l=console.log const cat = “cat” cat dog 我们有一个变量cat初始化为“ cat”。接下来,我们引用cat变量和dog变量。cat变量存在,而dog变量不存在。 cat将返回“ cat”,而dog会引发ReferenceError,因为在环境记录中找不到名为dog的变量。 ReferenceError: dog is not defined 每当我们创建或定义变量时,变量名称都会写入环境记录中。此环境记录就像键值存储表一样. 每当我们引用变量时,它都会存储程序中定义的变量。当在记录中找到环境值并提取并返回值时,将以该变量的名称作为关键字搜索环境记录。 #### RangeError 当数字超出允许的值范围时,将抛出此错误。 #### EvalError 如果非法调用 eval(),则抛出 EvalError 异常。 根据EcmaSpec 2018版: 此异常不再会被JavaScript抛出,但是EvalError对象仍然保持兼容性。
原创文章,需联系作者,授权转载
上一篇:Being Agile!如果……就好了……
下一篇:不为熟知的ES5 api(一)
相关文章
前端十年回顾 | 漫画前端的前世今生
Taro小程序跨端开发入门实战
【技术干货】企业级扫描平台EOS关于JS扫描落地与实践!
京东云官网研发团队
文章数
10
阅读量
64036
作者其他文章
01
使用书签实现所有图片一键下载
从操作上说,是将JavaScript脚本作为书签,本文主旨是在讲使用的时候点一下收藏栏中对应的书签,即可执行所有图片下载功能;
01
不为熟知的ES5 api(一)
最近梳理了一下ES5中可能不被开发者熟悉的一些知识点,查缺补漏,有时能帮助我们写出更好的代码。
01
不为熟知的ES5 api(二)
继续讲解不为熟知的ES5 api
01
不为熟知的ES5 api ( 三 )
继续讲解不为熟知的ES5 api
最新回复
丨
点赞排行
共0条评论
京东云官网研发团队
文章数
10
阅读量
64036
作者其他文章
01
使用书签实现所有图片一键下载
01
不为熟知的ES5 api(一)
01
不为熟知的ES5 api(二)
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号