• javascript的数据类型


    ECMAScript中包含六种数据类型,其中前五种是简单数据类型(也称为基本数据类型)Undefined,Null,Boolean,Number和String,还有一种是复杂的数据类型:Object,Object的本质是有一组键值对组成。ECMAScript不支持任何创建自定义类型的机制,而所有值都将是上述的六中之一。由于ECMAScript中的数据类型具有动态性所以就没有在定义其他数据类型的必要了。

    typeof操作符

    由于ECMAScript是一种松散类型,因此需要有一种手段来检测给定的变量的数据类型,其中typeof就是来实现这种功能的。对于一个值,使用typeof可能返回下列字符串。

    1、“undefined”:如果这个值未定义
    
    2、"boolean":如果这个值是布尔值
    
    3、"string":如果这个值是字符串
    
    4、“number”:如果这个值是数值
    
    5、“object”:如果这个值是对象或者null
    
    6、“function”:如果这个值是函数

    看如下的例子:

    function show(x) {
    
                console.log(typeof(x));    // undefined
                console.log(typeof(10));   // number
                console.log(typeof('abc')); // string
                console.log(typeof(true));  // boolean
    
                console.log(typeof(function () { }));  //function
    
                console.log(typeof([1, 'a', true]));  //object
                console.log(typeof ({ a: 10, b: 20 }));  //object
                console.log(typeof (null));  //object
                console.log(typeof (new Number(10)));  //object
            }
            show();

    从打印出的信息可以看出:前四种(undefined, number, string, boolean)属于简单的值类型,而不是对象,在作为参数进行传递的时候属于值传递。剩下的几种情况——函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。在作为函数参数的时候属于引用传递

    其中判断一个变量是不是对象非常简单。值类型的类型判断用typeof,引用类型的类型判断用instanceof

    var fn = function () { };
    console.log(fn instanceof Object);  // true

    下面仅对一些特殊的类型作说明:Undefined类型,Null类型

    Undefined类型

    Undefined类型只有一个值,即特殊的undefined。再使用var声明变量但是未对其加以初始化时,这个变量的值就是undefined,例如:

    var message;
    console.log(message);    //  undefined

    这个例子中只是声明了message,而没有对其进行初始化。其实上面这个例子等价于:

    var message = undefined;
            console.log(message);

    我们通常没必要这个做,因为为初始化的值默认就是undefined。

    在这里我们还是需要注意,包含undefined的值(只声明了变量,但是没有初始化)与尚未定义的变量还是不一样的。看看下面的例子:

    var message;     //    这里声明了一个变量但是没有对他初始化
    alert(message);     //   "undefined"
    
    //  var age;
    alert(age);   //   这里会报错

    运行上面的程序,会发现第一个弹出框会提示“undefined”,而第二个弹出框没有显示,查看控制台的console,你会发现程序报错了。报错信息如下:

    Uncaught ReferenceError: age is not defined

    对于那些尚未声明过的变量,只能执行一项操作,即使用typeof操作符检测其数据类型。但是令人困惑的是对于为初始化与未声明的变量执行typeof操作的时候都会返回“undefined”

    var message;     //    这里声明了一个变量但是没有对他初始化
    alert(typeof message);     //   "undefined"
    
    //  var age;
    alert(typof age);   //  "undefined"
    
    

    看《javascript高级程序设计》的时候是这样解释的:对于这两种情况都返回“undefined”,这个结果有其逻辑上的合理性。因为这两个变量从技术角度看存在本质的区别,但是实际上对上述两种无论那种变量也不能执行真正的操作。

    Null类型

    Null类型类型也是一个只有一个值的类型,这个特殊值是null,从逻辑的角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值,会返回"Object"的原因,如下所示:

     var message = null;     //    这里声明了一个变量但是没有对他初始化
     alert(message);     //   "object"

    如果定义的变量将来用来保存对象,那么最好将该变量初始化为null而不是其他的值。这样只需要通过检测变量是不是null值,就可以知道相应的变量是否已经保存了一个对象的引用。如下面的例子:

    if (car != null) {
    }

    书上说,undefined的值派生自null,通过如下代码做相等性验证:

    alert(undefined == null)    //  true,关于“==”相等验证操作符处于比较会转换两边的操作数
    console.log(undefined === null);   //  false,这两个不是同一个东西,虽然之间有关系

     在声明变量的时候最好给变量付一个null值,而不是变量声明了,却没有赋值,此时变量是undefined。

  • 相关阅读:
    团队总结-文艺复兴
    文艺复兴-冲刺总结
    文艺复习-测试博客
    文艺复习-冲刺集合
    冲刺第一天
    凡事预则立
    2020软件工程作业05
    2020软件工程作业04
    前端怎么去学
    十、Kernel_3.0.35版本和Kernel_4.1.15版本在SPI驱动实现机制的差异
  • 原文地址:https://www.cnblogs.com/duhuo/p/4214219.html
Copyright © 2020-2023  润新知