您的位置:晶晶的博客>前端>JavaScript核心:基本值和全局函数

JavaScript核心:基本值和全局函数

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 === -InfinityNumber.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 != NaNNaN !== 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('http://blog.jjonline.cn/linux/shell.html?username=Jea杨&type=2')
/*
返回结果:http://blog.jjonline.cn/linux/shell.html?username=Jea%E6%9D%A8&type=2
*/
decodeURI('http://blog.jjonline.cn/linux/shell.html?username=Jea%E6%9D%A8&type=2')
/*
返回结果:http://blog.jjonline.cn/linux/shell.html?username=Jea杨&type=2
*/

decodeURIComponent()和encodeURIComponent()

要素部分编码解码URI

encodeURIComponent('http://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')
/*
返回结果:http://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

转载请注明本文标题和链接:《JavaScript核心:基本值和全局函数

相关推荐

网友评论抢沙发

路人甲 表情
Ctrl+Enter快速提交