zoukankan      html  css  js  c++  java
  • javascript 中的数据类型

    javascript 中有5中数据类型:undefined、null、Boolean、Number、String,用typeof 检测数据类型。

    1 Undefined :Undefined  只有一个值,即 undefined ,在用 var 声明变量但未对其加以初始化时,这个变量就是undefined。

    注意:对未声明的变量执行typeof 返回的也是 undefined。

    2  Null:NUll也只有一个值,null。从逻辑角度看,null 表示一个空对象指针。所以  typeof  null 返回的是 object。实际上,undefined 是派生自null 值的,所以 null ==undefined 返回的是 true。

    3 Boolean:有两个值,true 和 false。Boolean  类型的字面值 true 和 false  是区分大小写的。也就是说 True  和  False  都不是Boolean 值,只是标识符。可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean 值。

     var flag = "Hello World!";
     var msg = Boolean(flag);

      各种数据类型与Boolean类型的转换规则如下表所述:

    数据类型 转换为true 转换为false
    Boolean true false
     String  任何非空字符串  ""空字符串 
     Number  任何非0数值,包括无穷大  0和NaN
     Object  任何非空对象  null
     Undefined  n/a(not applicable 不适用)  undefined

     根据以上规则,我们可以写出下面的一个代码实例:

    复制代码
    function test(){
       var flag = "Hello World!";
       if(flag){
           alert("write:true");
       }else{
           alert("write:false");
       }
    }

    4 Number:用IEEE754 格式来表示整数和浮点数,为了支持各种数值类型,ECMA-262 定义了不同的数值字面量格式。

    var intNum = 55;//十进制整数

    var octalNum = 070;//八进制 56,以8为基数,八进制字面值得第一位必须是0,后然是八进制数字序列0~7,如果字面值超出了范围,那么前导0将被忽略,后面竖直将被当作十进制解析。

    var hexNum = 0x1f;//十六进制的31,前两位必须是0x,后面跟0~9及A~F(大小写都可以)的十六进制数字序列。

    (1)浮点数:可以用科学记数法表示,3.125e7、3e-7。浮点数值的最高精度是17为小数,但在进行算术计算时其精度远远不如整数。例如,0.1 加 0.2 的结果不是0.3,而是0.30000000000000004。这个小小的舍入误差会导致无法测试特定的浮点数值。例如

    if(a + b ==0.3){

      alert("You got 0.3 . ");

    }

    在这个例子中,我们测试的是两个数的和是不是等于0.3。如果这两个数是0.05 和0.25,或者是0.15 和 0.15 都不会有问题,但如果是0.1 和 0.2,那么测试将无法通过。所以,永远不要测试某个特定的浮点数值。(浮点数计算产生误差的问题,是基于IEEE754 数值的浮点计算的通病,所以其他语言也存在这个问题。)

    (2)数值范围:5e-324 到 1.7976931348623157e+308。如果数值超出范围,则自动转换成特殊的Infinity(-Infinity) 值,这时,该值将无法继续参与下一次计算。要判断一个数值是不是无穷可以用isFinite()函数。

    (3)NaN:非数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况,例如任何数值除以0 返回NaN。任何涉及NaN的操作(NaN/10)都会返回NaN,NaN与任何值都不相等,包括NaN 本身。用isNaN()可以判断是不是"不是数值",isNaN ()也适用于对象。

    (4)数值转换:Number()、parseInt()、parseFloat()。Number():可以用于任何数据类型。ParseInt()、parseFloat():专门用于把字符串转换成数值。三个函数对于同样的输入会有返回不同的结果。

    Number()函数的转换规则如下:

         如果是Boolean 值,true 和 false 分别被转换成1和0;

         如果是数字,只是简单的传入和返回;

         如果是null ,返回0;

         如果是undefined ,返回NaN;

         如果是字符串,遵循下面的规则:

         如果字符串只包含数字(包括前面带正负号的情况),则将其转换为十进制数值,如"011"会变成11(前导0被忽略);

         如果字符串中包含有效的浮点格式,则将其转换成浮点值(前导0被忽略);

         如果字符串中包含有效的十六进制,如"0xf",则将其转换成相同大小的十进制整形数值;

         如果字符串是空的(不包含任何字符),则转换成0 ;

         如果字符串中包含除上述以外的字符,则将其转换成NaN;

         如果是对象,调用valueOf()方法,依照前面规则转换。

    parseInt():该函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直到找到第一个非空字符。如果第一个非空字符不是数字字符或负号,就会返回NaN,即parseInt("")=NaN,而Number("")=0,parseInt('1234blue ')=1234,parseInt('22.5')=22。parseInt('0xAF',16) =parseInt('AF',16),第二个参数指定是十六进制。

    parseFloat():与ParseInt()类似,区别是:字符串中第一个小数点是有效的,后面的就是无效的;还有它只解析十进制的,没有第二个参数。

    5 String:字符串,该类型包含一些特殊字符,即转义序列。

    转换成字符串的方法:

    toString():数值、布尔值、对象、字符串值都有这个方法,但是null、undefined的值没有这个方法;该方法可以传递参数,即二进制、十进制等,num.toString(10);

    String():其他类型与toString()相同,但是null 返回"null",undefined 返回"undefined"。

    6 特殊类型:Object

    创建:var o = new Object();

    构造函数constructor:如 Object();

    检测属性是否存在hasOwnProperty():o.hasOwnProperty("name");

    toString();

    valueOf();

  • 相关阅读:
    PATA 1071 Speech Patterns.
    PATA 1027 Colors In Mars
    PATB 1038. 统计同成绩学生(20)
    1036. 跟奥巴马一起编程(15)
    PATA 1036. Boys vs Girls (25)
    PATA 1006. Sign In and Sign Out (25)
    读取web工程目录之外的图片并显示
    DOS命令
    java连接oracle集群
    servlet
  • 原文地址:https://www.cnblogs.com/summerzi/p/4135599.html
Copyright © 2011-2022 走看看