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();

  • 相关阅读:
    python基础语法
    头文件和库文件
    #pragma的用法
    C++ signal的使用
    Glog
    Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量
    /etc/ld.so.conf详解
    拿与不拿的dfs
    空白字符读取和处理
    统计频率----初始条件的设置
  • 原文地址:https://www.cnblogs.com/summerzi/p/4135599.html
Copyright © 2011-2022 走看看