搞定J2EE核心技术与企业应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.3 系统内部函数

因为JavaScript中的函数功能非常强大,为了方便开发人员使用,JavaScript提供了一些内部函数,就是指已经定义好的函数,开发人员可以直接使用这些函数。

4.3.1 使用eval返回字符串的值

如果开发人员熟悉Java的话,就会明白,如果只给出一个方法名的字符串,则只能用反射的机制来调用这个方法;同样,在JavaScript中也存在这个问题,如果只给出一个方法名或者一个形式类似于方法调用的字符串,怎么来调用这个方法或语句呢?就是通过eval函数,该函数将通过参数传入的一个包含JavaScript语句的字符串作为JavaScript源代码执行,并返回该语句执行后的返回值;如果没有值,则返回“undefined”。

下面演示eval函数的使用,示例代码如下:

      <HTML>
      <HEAD>
      <TITLE>使用eval函数的示例</TITLE>
      <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
      <!--
      function HelloWorld()
      {
          for(i=0; i<arguments.length; i++)
      {
          alert(arguments[i]);//显示出传递的参数
      }
      }
      //-->
      </SCRIPT>
      </HEAD>
      <BODY>
      <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
      <!--
      eval("HelloWorld('HelloWorld')");
      //-->
      </SCRIPT>
      </BODY>
      </HTML>

上述代码运行后的结果如图4.2所示。

图4.2 使用eval函数的示例

可以看到,使用eval函数来执行字符串“HelloWorld”,可以实现与直接调用函数HelloWorld一样的功能。这里要注意在eval函数执行的字符串中单引号的使用,如果要执行的函数有参数,则要用单引号把参数括起来,如下所示:

      eval("HelloWorld('HelloWorld')");

如果不把参数括起来,如下所示:

      eval("HelloWorld(HelloWorld)");

则执行代码时,显示的内容是函数本身的内容,而不是函数执行后的结果,如图4.3所示。

图4.3 执行结果是函数本身的内容

4.3.2 使用escape进行字符编码

在使用Java或JavaScript进行开发时,有一个问题必须要考虑,那就是中文的传输和存储,如果不考虑编码问题,那么存进数据库的中文很可能就是乱码;同样,在通过JavaScript向Java提交中文数据时,也得考虑中文的编码问题。JavaScript提供了escape函数来对除英文和数字外的字符进行十六进制编码,通过escape函数的编码后,所有的空格、标点及非ASCII字符都用%XX代替, XX为十六进制数,如果要转换的字符值超过255,则用%uXXXX表示,但数字并不转换。

下面演示escape函数的使用,示例代码如下:

      <HTML>
      <HEAD>
      <TITLE>使用escape函数的示例</TITLE>
      <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
      <!--
      var str=escape("欢迎使用escape函数  ;256");
      document.write(str);
      //-->
      </SCRIPT>
      </HEAD>
      <BODY>
      </BODY>
      </HTML>

上述代码运行后的结果如图4.4所示。

图4.4 使用escape函数的示例

可以看到所有的中文、空格和标点都进行了转换,比如“欢”转换为“%u6B22”,“迎”转换为“%u8FCE”,空格转换为“%20”,这样在传输中文字符时就不会出现乱码了。

4.3.3 使用unescape进行字符解码

既然可以对中文字符进行编码,自然也能够对编码过的中文字符进行解码,JavaScript提供了unescape函数来实现此功能。

下面演示unescape函数的使用,示例代码如下:

      <HTML>
      <HEAD>
      <TITLE>使用unescape函数的示例</TITLE>
      <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
      <!--
      var str=unescape(escape("欢迎使用unescape函数  ;256"));
      document.write(str);
      //-->
      </SCRIPT>
      </HEAD>
      <BODY>
      </BODY>
      </HTML>

上述代码运行后的结果如图4.5所示。

图4.5 使用unescape函数的示例

可以看到,经过escape函数编码的字符,经过unescape函数解码后,即可恢复原貌。

4.3.4 使用parseInt和parseFloat进行数值转换

在JavaScript中,不管是定义字符串类型还是数值类型,虽然都是使用var,但其实还是有区别的,这就使得在开发程序过程中,可能要进行字符串和数值之间的转换,JavaScript提供了parseInt和parseFloat函数,来将字符转换成数值。parseInt函数用于将以字符串开头的整数分解出来,若字符串不是以数字开头,则返回NaN;parseFloat函数用于将以字符串开头的整数或浮点数分解出来,若字符串不是以数字开头,则返回NaN。

注意:在JavaScript中,parseInt不能解析浮点数,而parseFloat可以解析浮点数。

下面演示parseInt和parseFloat函数的使用,示例代码如下:

      <HTML>
      <HEAD>
      <TITLE>使用parseInt和parseFloat函数的示例</TITLE>
      <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
      <!--
      document.write("parseInt('123')="+parseInt("123")+"<BR>");
      document.write("parseInt('123.567')="+parseInt("123.567")+"<BR>");
      document.write("parseInt('123abc')="+parseInt("123abc")+"<BR>");
      document.write("parseInt('123.5e2')="+parseInt("123.5e2")+"<BR>");
      document.write("parseInt('0x12')="+parseInt("0x12")+"<BR>");
      document.write("parseInt('123',16)="+parseInt("123",16)+"<BR>");
      document.write("parseInt('abc')="+parseInt("abc")+"<BR>");
      document.write("parseInt(true)="+parseInt(true));
      document.write("<BR>");
      document.write("parseFloat('123')="+parseFloat("123")+"<BR>");
      document.write("parseFloat('123.567')="+parseFloat("123.567")+"<BR>");
      document.write("parseFloat('123abc')="+parseFloat("123abc")+"<BR>");
      document.write("parseFloat('123.5e2')="+parseFloat("123.5e2")+"<BR>");
      document.write("parseFloat('0x12')="+parseFloat("0x12")+"<BR>");
      document.write("parseFloat('123',16)="+parseFloat("123",16)+"<BR>");
      document.write("parseFloat('abc')="+parseFloat("abc")+"<BR>");
      document.write("parseFloat(true)="+parseFloat(true));
      //-->
      </SCRIPT>
      </HEAD>
      <BODY>
      </BODY>
      </HTML>

上述代码运行后的结果如图4.6所示。

图4.6 使用parseInt和parseFloat函数的示例

4.3.5 使用typeof判断对象类型

有时候开发人员可能想知道一个字符串是什么类型的,JavaScript提供了typeof函数来返回对象类型,它的返回值有6种可能:number、string、boolean、object、function和undefined。

下面演示typeof函数的使用,示例代码如下:

      <HTML>
      <HEAD>
      <TITLE>使用typeof函数的示例</TITLE>
      <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
      <!--
      function HelloWorld()
      {
      for(i=0; i<arguments.length; i++)
      {
        alert(arguments[i]);//显示出传递的参数
      }
      }
      //-->
      </SCRIPT>
      </HEAD>
      <BODY>
      <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
      <!--
      eval("alert(typeof(HelloWorld))");
      //-->
      </SCRIPT>
      </BODY>
      </HTML>

上述代码运行后的结果如图4.7所示。

图4.7 使用typeof函数的示例

4.3.6 使用isFinite判断一个变量是否有界

如果要在JavaScript中进行数值运算,就可能会遇到要判断一个变量的值的边界情况, JavaScript提供了isFinite函数用来判断一个变量是否有界,如果有界则返回true,否则返回false。

下面演示isFinite函数的使用,示例代码如下:

      <HTML>
      <HEAD>
      <TITLE>使用isFinite函数的示例</TITLE>
      <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
      <!--
      document.write("isFinite(1234)="+isFinite(1234)+"<BR>");
      document.write("isFinite(1.234)="+isFinite(1.234)+"<BR>");
      document.write("isFinite('aaa')="+isFinite('aaa')+"<BR>");
      document.write("isFinite(true)="+isFinite(true)+"<BR>");
      document.write("isFinite(null)="+isFinite(null)+"<BR>");
      document.write("isFinite(1/0)="+isFinite(1/0));
      //-->
      </SCRIPT>
      </HEAD>
      <BODY>
      </BODY>
      </HTML>

上述代码运行后的结果如图4.8所示。

图4.8 使用isFinite函数的示例

4.3.7 使用isNaN判断一个变量是否是数值

在JavaScript中进行数值运算,还可能会碰到一种情况,那就是判断要计算的变量是否为数值,JavaScript提供了isNaN函数用来判断一个变量是否是数值,如果不是数值则返回true,否则返回false。

下面演示isNaN函数的使用,示例代码如下:

      <HTML>
      <HEAD>
      <TITLE>使用isNaN函数的示例</TITLE>
      <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
      <!--
      document.write("isNaN(1234)="+isNaN(1234)+"<BR>");
      document.write("isNaN(1.234)="+isNaN(1.234)+"<BR>");
      document.write("isNaN('aaa')="+isNaN('aaa')+"<BR>");
      document.write("isNaN(true)="+isNaN(true)+"<BR>");
      document.write("isNaN(null)="+isNaN(null)+"<BR>");
      document.write("isNaN(1/0)="+isNaN(1/0));
      //-->
      </SCRIPT>
      </HEAD>
      <BODY>
      </BODY>
      </HTML>

上述代码运行后的结果如图4.9所示。

图4.9 使用isNaN函数的示例

注意:这里是将true看成1来进行处理的。