zoukankan      html  css  js  c++  java
  • JavaScript系列:ECMAScript类型转换

    1、转换成字符串

      ECMAScript的Boolean值、数字和字符串的原始值均为伪对象,即它们都具有属性和方法。

    var color = 'blue';
    alert(color.length); // output "4"

      3种主要的原始值Boolean值、数字和字符串都有toString()方法,可以把它们的值转换成字符串。

      Boolean型的toString()方法只是输出"true"和"false",结果由变量的值决定。

    var b = false;
    alert(b.toString()); // output "false"

      Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式。采用默认模式,toSting()方法只是用相应的字符串输出数字值。在默认模式中,无论最初采用什么表示方法声明数字,Number类型的toString()方法返回的都是十进制表示。

      采用Number类型的toString()方法的基模式,可以用不同的基输出数字。基只是要转换成的基数的另一种叫法,它是toString()方法的参数。

    var i = 10;
    alert(i.toString(2)); // output "1010"
    alert(i.toString(8)); // output "12"
    alert(i.toString(16)) // output "A"

    2、转换成数字

      ECMAScript提供了两种非数字的原始值转换成数字的方法,即parseInt()和parseFloat()。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这两个方法才能正确运行,对于其他类型返回的都是NaN。

      在判断字符串是否为数字值前,parseInt()和parseFloat()都会仔细分析该字符串。parseInt()方法首先看位置0出的字符,判断它是否是个有效数字;如果不是,该方法返回NaN,不在继续执行其他操作。但如果该字符是有效数字,该方法将查看位置1处的字符,进行同样的测试。这一过程将持续到发现非有效数字为止,此时parseInt()将把该字符之前的字符串转换成数字。例如,把字符串"1234abcd"转换成整数,那么parseInt()将返回1234,当它检测到字符'a'时,就会停止检测过程。字符串中包含数字字面量被正确转换为数字,因此字符串"0xA"会被正确转换为数字10。不过,字符串"22.5"将被转换成22。

    var iNum1 = parseInt('1234abcd'); // returns 1234
    var iNum2 = parseInt('0xA'); // returns 10
    var iNum3 = parseInt('22.5'); // returns 22
    var iNum4 = parseInt('blue'); // returns NaN

      parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由parseInt()方法的第二个参数指定的。

    var iNum1 = parseInt('AF', 2); //returns 175
    var iNum2 = parseInt('10', 2); //returns 2
    var iNum3 = parseInt('10', 8); //returns 8
    var iNum4 = parseInt('10', 10); //returns 10

      parseFloat()方法与parseInt()方法处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字符前的字符串转换成数字。不过对于这个方法来说,第一个出现的小数点是有效字符,如果有两个小数点,第二个小数点将被看作无效,parseFloat()方法将把第二个小数点前的字符串转换成数字。例如,字符串'12.34.5'将被转换成12.34。

      parseFloat()方法的字符串必须以十进制形式表示浮点数,而不能使用八进制或十六进制。该方法会忽略前导0,例如八进制数0908将被解析为908.对于十六进制数0xA,该方法将返回NaN,在浮点数中,x不是有效字符。

      parseFloat()没有基模式。

    var fNum1 = parseFloat('1234abcd'); // returns 1234.0
    var fNum2 = parseFloat('0xA'); // returns NaN
    var fNum3 = parseFloat('22.5'); // 22.5
    var fNum4 = parseFloat('12.34.5'); // returns 12.34
    var fNum5 = parseFloat('0908'); // returns 908
    var fNum6 = parseFloat('abcd'); // returns NaN

      3、强制类型转换

      使用强制类型转换(type casting)处理转换值的类型,ECMAScript中可用的3种强制类型转换如下:

      ◊ Boolean(value) —— 把给定的值转换成Boolean型

      ◊ Number(value) —— 把给定的值转换成数字(可以是整数或浮点数)

      ◊ String(value) —— 把给定的值转换成字符串

      Number()的强制类型转换与parseInt()和parseFloat()方法的处理相似,只是它转换的是整个值,而不是部分值。

    var b1 = Boolean('');                        // false - empty string
    var b2 = Boolean('abc');                     // true - not empty string
    var b3 = Boolean(100);                       // true - not zero number
    var b4 = Boolean(null);                      // false - null
    var b5 = Boolean(0);                         // false - zero
    var b6 = Boolean(new Object());              // true - object
    Number(false)                    // 0
    Number(true)                     // 1
    Number(undefined)                // NaN
    Number(null)                     // 0
    Number('5.5')                    // 5.5
    Number('56')                     // 56
    Number('5.6.7')                  // NaN
    Number(new Object())             // NaN
    Number(100)                      // 100

      String()与toString()的区别,对null或undefined值强制类型可以转换生产字符串而不引发错误。

    var s1 = String(null);       // "null"
    var oNull = null;
    var s2 = oNull.toString();   // cause error
  • 相关阅读:
    Map根据key或者value排序
    docker部署Javaweb项目(jdk+tomcat+mysql)
    MySQL设置某一字段默认为0,但是插入数据化却显示为null
    文件下载
    JXLS导出Excel(模板导出)
    eclipse使用lombok
    Integer 类型数值判断相等的坑
    通用Mapper相关
    SSM配置Socket多线程编程(RFID签到实例)
    使用JSONObject遇到的问题,java.lang.NoClassDefFoundError: net/sf/json/JSONObject
  • 原文地址:https://www.cnblogs.com/libingql/p/2700671.html
Copyright © 2011-2022 走看看