JavaScript的标准化组织是ECMA,这种标准化版本的JavaScript 被称作ECMAScript,ECMAScript 标准由ECMA-262规范所承载,ECMA-262也对应于国际标准化组织的ISO-16262标准;ECMAScript规范并没有描述文档对象模型(DOM),DOM由万维网联盟(W3C) 制定。本文尚未涉及DOM相关的对象和函数,仅汇总一些JavaScript核心层面的内容,以辅佐记忆和重置归零后加深理解。
一、全局特定对象的属性、属性值和特殊字面量
以下4个全局属性返回的简单的值;他们没有属性和方法。
Infinity
Infinity
是全局对象的一个属性;无穷大数字 isFinity()
判断是否有穷数(类似对象静态方法Number.isFinite()
,行为上有稍许差异); Number.NEGATIVE_INFINITY === -Infinity
、Number.POSITIVE_INFINITY === Infinity
NaN
NaN
是全局对象的一个属性;表示非数值,Not-A-Number的值,全局变量NaN和对象属性的值Number.NaN
是一致的;判断一个返回值是否为NaN,需使用全局函数isNaN()
或对象方法Number.isNaN()
,NaN本身不等于其本身;当算术运算返回一个未定义的或无法表示的值时,NaN就产生了。但是,NaN并不一定用于表示某些值超出表示范围的情况。将某些不能强制转换为数值的非数值转换为数值的时候,也会得到NaN。
undefined
undefined
是全局对象的一个属性。也就是说,它是全局作用域的一个变量;一个没有被赋值的变量是undefined类型。一个方法或者是语句如果在执行期间没有变量被赋值也会返回undefined。一个函数如果没有返回值,就会返回一个undefined值。Ps:void
运算符会对给定的表达式进行求值,然后直接返回 undefined。
null
null
是一个 JavaScript字面量,表示空值(null or an "empty" value),即没有对象被呈现(no object value is present)。它是 JavaScript 原始值 之一。
typeof null // object (因为一些以前的原因而不是'null') isNaN(1 + null) // false isNaN(1 + undefined) // true
二、全局函数
eval(string)
将string作为JavaScript代码来执行,返回这段代码计算后的完整值,如果完整值为空,返回undefined;eval
函数非必要情况下建议不要使用。
isFinite(testValue)
判定testValue是否是有限数字,无限数字:Infinity
isNaN(testValue)
因为NaN != NaN
和 NaN !== NaN
是成立的,那么如何判断testValue是一个NaN呢,isNaN函数啊!isNaN(testValue)
和Number.isNaN(testValue)
是有差异的,前者尝试将testValue参数转换为数值,然后对转换后的结果是否是NaN进行判断(但是有例外:空字符串和布尔值会被转换成0或1,使用isNaN函数进行判断时又会返回false)。
parseFloat(string)
将string字符串解析成为一个浮点数字并返回;如果在解析过程中遇到了正负号(+或-),数字(0-9),小数点,或者科学记数法中的指数(e或E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数,同时参数字符串首位的空白符会被忽略。如果参数字符串的第一个字符不能被解析成为数字,则返回NaN;parseFloat
也可转换和返回Infinity值
parseInt(string, radix)
解析字符串string参数,返回一个指定基数的整数或NaN。把string参数当做radix参数指定的进制下的数,然后把它转换成十进制的整数;如果 parseInt
遇到了不属于radix参数所指定的基数中的字符那么该字符和其后的字符都将被忽略。接着返回已经解析的整数部分,同时参数字符串首位的空白符会被忽略。如果第一个字符不能被转换成数字,parseInt返回NaN。在没有指定基数radix,或者基数为0的情况下,若string 以0x
或者0X
开头, 则基数是16 (16进制),其他情况下各浏览器实现方式有差异,所以显式指定radix比较靠谱儿。需要注意的是radix并不是指定parseInt返回值的进制,而是指定参数string将被视为何种进制的数来进行转换!
decodeURI()和encodeURI()
编码解码URI
encodeURI('https://blog.jjonline.cn/linux/shell.html?username=Jea杨&type=2') /* 返回结果:https://blog.jjonline.cn/linux/shell.html?username=Jea%E6%9D%A8&type=2 */ decodeURI('https://blog.jjonline.cn/linux/shell.html?username=Jea%E6%9D%A8&type=2') /* 返回结果:https://blog.jjonline.cn/linux/shell.html?username=Jea杨&type=2 */
decodeURIComponent()和encodeURIComponent()
要素部分编码解码URI
encodeURIComponent('https://blog.jjonline.cn/linux/shell.html?username=Jea杨&type=2') /* 返回结果:http%3A%2F%2Fblog.jjonline.cn%2Flinux%2Fshell.html%3Fusername%3DJea%E6%9D%A8%26type%3D2 */ decodeURIComponent('http%3A%2F%2Fblog.jjonline.cn%2Flinux%2Fshell.html%3Fusername%3DJea%E6%9D%A8%26type%3D2') /* 返回结果:https://blog.jjonline.cn/linux/shell.html?username=Jea杨&type=2 */
decodeURI()和encodeURI()以及decodeURIComponent()和encodeURIComponent()差异要细化的话就成学院派了,内容还挺庞杂的;单从名字来看无非有无Component这个词的差异,而Component是啥意思呢?组成、成分、零件、要素。
escape() 和unescape()
十六进制转义序列和字符原型相互转换,此二函数已废弃,不再建议使用。
---
参考文档:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects
哟嚯,本文评论功能关闭啦~