js的预定义函数-parseInt()/isNaN()/eval()

责编:menVScode 2017-08-25 17:37 阅读(807)

        JavaScript 引擎中有一组可供随时调用的内建函数。下面,让我们来了解一下这些函数。在这一过程中,我们会通过一系列具体的函数实践,来帮助您掌握这些函数的参数和返回值,以便最终实现熟练应用。这些内建函数包括:

         parseInt();

         parseFloat();

         isNaN();

         isFinite();

         encodeURI();

         decodeURI();

         encodeURIComponent();

         decodeURIComponent();

         eval()。


        1、parseInt()

        parseInt()会试图将其收到的任何输入值(通常是字符串)转换成整数类型输出。如果转换失败就返回 NaN。

> parseInt('123');
123
> parseInt('abc123');
NaN
> parseInt('1abc23');
1
> parseInt('123abc');
123

        除此之外,该函数还有个可选的第二参数:基数(radix),它负责设定函数所期望的数字类型 — 十进制、十六进制、二进制等。在下面的例子中,如果试图以十进制输出字符串"FF",结果就会为 NaN。而改为十六进制,我们就会得到 255。

> parseInt('FF', 10);
NaN
> parseInt('FF', 16);
255

        再来看一个将字符串转换为十进制和八进制的例子:

> parseInt('0377', 10);
377
> parseInt('0377', 8);
255

        如果我们在调用 parseInt()时没有指定第二参数,函数就会将其默认为十进制,但有两种情况例外。

         如果首参数字符串是 0x 开头,第二参数就会被默认指定为 16(也就是默认其为十六进制数)。

         如果首参数以 0 开头,第二参数就会被默认指定为 8(也就是默认其为八进制数)。

> parseInt('377');
377
> parseInt('0377');
255
> parseInt('0x377');
887

    

        2、parseFloat()

        parseFloat()的功能与 parseInt()基本相同,只不过它仅支持将输入值转换为十进制数。因此,该函数只有一个参数。

> parseFloat('123');
123
> parseFloat('1.23');
1.23
> parseFloat('1.23abc.00');
1.23
> parseFloat('a.bc1.23');
NaN

        与 parseInt()相同的是,parseFloat()在遇到第一个异常字符时就会放弃,无论剩余的那部分字符串是否可用。

> parseFloat('a123.34');
NaN
> parseFloat('12a3.34');
12

        此外,parseFloat()还可以接受指数形式的数据(这点与 parseInt()不同)。

> parseFloat('123e-2');
1.23
> parseFloat('1e10');
10000000000
> parseInt('1e10');
1


        3、isNaN()

        通过 isNaN(),我们可以确定某个输入值是否是一个可以参与算术运算的数字。因而,该函数也可以用来检测 parseInt()和 parseFloat()的调用成功与否。

> isNaN(NaN);
true
> isNaN(123);
false
> isNaN(1.23);
false
> isNaN(parseInt('abc123'));
true

        该函数也会始终试图将其所接收的输入转换为数字,例如:

> isNaN('1.23');
false
> isNaN('a1.23');
true

        isNaN()函数是非常有用的,因为 NaN 自己不存在等值的概念,也就是说表达式 NaN=== NaN 返回的是 false。

        

        4、isFinite()

        isFinite()可以用来检查输入是否是一个既非 Infinity 也非 NaN 的数字。

> isFinite(Infinity);
false
> isFinite(-Infinity);
false
> isFinite(12);
true
> isFinite(1e308);
true
> isFinite(1e309);
false

         JavaScript 中的最大数字为 1.7976931348623157e+308,因此 1e309 会被视作为无穷数。


        5、URI 的编码与反编码

        在 URL(Uniform Resource Locator,统一资源定位符)或 URI(Uniform Resource Identifier,统一资源标识符)中,有一些字符是具有特殊含义的。如果我们想“转义”这些字符,就可以去调用函数 encodeURI()或 encodeURIComponent()。前者会返回一个可用的 URL,而后者则会认为我们所传递的仅仅是 URL 的一部分。例如,对于下面这个查询字符串来说,这两个函数所返回的字符编码分别是:

> var url = 'http://www.packtpub.com/scr ipt.php?q=this and that';
> encodeURI(url);
"http://www.packtpub.com/scr%20ipt.php?q=this%20and%20that"
> encodeURIComponent(url);
"http%3A%2F%2Fwww.packtpub.com%2Fscr%20ipt.php%3Fq%3Dthis%20and%20that"

        encodeURI()和 encodeURIComponent()分别都有各自对应的反编码函数:decodeURI() 和 decodeURIComponent()。另外,我们有时候还会在一些遗留代码中看到相似的编码函数和反编码函数 escape()和 unescape(),但我们并不赞成使用这些函数来执行相关的操作,它们的编码规则也不尽相同。


        6、eval()

        eval()会将其输入的字符串当做 JavaScript 代码来执行。

> eval('var ii = 2;');
> ii;
2

        所以,这里的 eval('var ii = 2;')与表达式 var ii = 2;的执行效果是相同的。

        尽管 eval()在某些情况下是很有用的,但如果有选择的话,我们应该尽量避免使用它。毕竟在大多数情况下,我们有更优雅的选择,这些选择通常也更易于编写和维护。

         eval()是这样一种函数:

         安全性方面 — JavaScript 拥有的功能很强大,但这也意味着很大的不确定性,如果您对放在 eval()函数中的代码没有太多把握,最好还是不要这样使用。

         性能方面 — 它是一种由函数执行的“动态”代码,所以要比直接执行脚本要慢。

前端交流群: MVC前端网(menvscode.com)-qq交流群:551903636

邮箱快速注册

忘记密码