美文网首页JS
JS数据类型

JS数据类型

作者: Android_小生 | 来源:发表于2017-09-22 19:10 被阅读35次

    1. JS 数据类型概述


    简单/基本数据类型

    包括 Undefined,Null,Number,Boolean,String

    复杂/引用数据类型

    除了上面的基本数据类型之外就是引用数据类型了,如 ObjectArrayFunctionData 等它是一组无序的键值对组合。

    typeof 操作符

    因为 JS 变量的数据类型的声明是动态的(比如 var a;),它不像 Java 中声明变量前需要确定数据类型(比如 int a;)。所以检测给定变量的数据类型这个过程尤为重要,typeof 操作符返回的是当前变量数据类型的字符串格式。

    有时 typeof 操作符会针对变量检测的数据类型无法确定变量本身的数据类型。比如,调用 type null 会返回 "object",因为特殊值 null 被认为是一个空的对象引用

    Undefined 类型

    在声明变量但未对其加以初始化时 ,这个变量的值就是 undefined。
    对未初始化和未声明的变量执行 typeof 操作符都返回 undefined 值。所以 显示的初始化变量 依然是明智的选择。
    如果这么做以后,当 typeof 操作符返回"undefined"值时,我们就知道被检测的变量还没有被声明。

    Null 类型

    null 值表示一个空对象指针,而这也是使用 typeof 操作符检测 null 值时会返回 "object" 的原因。

    如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其它值。这样一来,只要直接检查 null 值就可以知道相应的变量是否已经保存了一个对象的引用。

    因为 undefined 值派生自 null 值,所以它们的相等性测试返回 true(null == undefined)。

    尽管 null 和 defined 有这样的关系,但它们的用途完全不同。只要意在保存对象的变量还没有真正保存对象,就应该明确的让该变量保存 null 的值(而无论在什么情况下都没有必要把一个变量的值显式的设置为 undefined)

    这样不仅可以体现 null 作为空对象指针的惯例,而且也有助于进一步区分 null 和 undefined。

    Boolean 类型

    虽然字面量只有两个(true/false),但 JS 中所有类型的值都有与这两个 Boolean 值等价的值。我们可以对任何数据类型的值调用 Boolean()函数,而且总会返回一个 Boolean 值。至于的这个值是 true 还是 false,取决于要转换值的数据类型及其实际值。

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

    所以我们在使用流程控制语句时要确切的知道是什么类型的变量。

    Number 类型

    保存浮点数值需要的内存空间是保存整数值的两倍。JS 会不失时机地将浮点数值转换为整数值

    永远不要测试某个特定的浮点数值。浮点数值计算会产生舍入误差的问题。

    NaN(Not a Number)非数值,表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。比如,
    在编写程序中,任何数值除以 0 都会导致错误,从而停止代码执行。但在 JS 中任何数值除以 0 会返回 NaN,不影响其它代码的执行。

    NaN 的两个特点:

    • 任何涉及 NaN 的操作都会返回 NaN,这个特点在多步计算中可能导致问题;
    • NaN 和任何值都不相等,包括 NaN 本身。

    JS 定义了 isNaN() 函数,接收一个参数,该参数可以是任何类型。然后尝试把这个参数值转换为数值,某些不是数值的值会直接转换为数值函数返回 false,而不能被转换为数值的值都会导致这个函数返回 true。

    数值转换方法有 Number(param)parseInt(params)parseFloat(params)

    • 如果 params 是布尔值,将被转换为 1(true)或 0(false);
    • 如果 params 是数字值,只是简单的传入或返回;
    • 如果 params 是 null 值,返回 0;
    • 如果 params 是 undefined,返回 NaN;
    • 如果 params 是数字字符串,返回包含数字(包括前面的正负号)的十进制数值;数字中带有小数点的字符串,返回浮点型数值;十六进制格式的字符串,返回十进制整数值,空字符串返回 0;
    • 上述格式以外的字符,都返回 NaN。

    String 类型

    需要注意一些特殊字符字面量包括各种转义字符。

    关于转换为字符串 toString() 方法,就是返回相应值的字符串表现

    Object 类型

    在 JS 中,对象其实就是一组数据和功能的集合。通过 new 操作符和对象类型名称来创建。创建的对象的实例通过添加属性或方法来创建自定义的对象。

    理解一个思想:在 JS 中,Object 类型是所有它实例的基础,也就是说 Object 类型所具有的任何属性和方法也同样存在于更具体的对象中

    Object 实例具有下列属性和方法:

    • Constructor:构造函数就是 Object;
    • toString():返回对象的字符串表示;
    • valueOf():返回对象的字符串、数值或布尔值表示。通常和 toString() 方法的返回值相同;

    2. JS 基本数据类型与引用类型的区别


    1.对于基本数据类型变量初始化后,通过变量来进行操作,变量的值都不会发生改变。引用类型变量的值可以改变。

    2.基本数据类型不可以添加属性和方法,引用类型可以添加属性和方法。

    3. 基本数据类型和引用数据类型的关系。

    基本数据类型赋值

    b 中的值只是 a 中值的一个副本,两个变量之间互不影响。

    引用数据类型赋值

    引用类型的赋值其实是对象保存在栈区地址指针的赋值,所以两个变量指向同一个对象,任何的操作都会互相影响。

    4.基本数据类型的比较是值的比较,引用类型的比较是引用的比较。

    数据类型的比较

    5.基本数据类型是存放在栈区的,引用类型是同时保存在栈区和堆区中。

    6.基本包装类型(包装对象) Boolean,String,Number。在读取 string,boolean 和 number 这三个基本数据类型的时候,后台会创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。

    3.判断数据类型


    typeof

    typeof 作为一个运算符,返回的操作对象的数据类型值有 'undefined''boolean''string''number''object''function'一般只用来检测一个对象是否已经定义或者是否已经赋值

    instanceof

    instanceof 操作符用来比较两个操作对象的构造函数,就是检查某个对象的原型链是否包含某个构造函数的 prototype 属性。也就是说 instanceof 在判断一个对象是不是一个类的实例这样的自定义的对象时才有意义。

    比较自定义对象

    比较自定义对象

    constructor

    constructor 属性返回一个指向创建了该对象原型的函数引用。该属性的值是那个函数本身。这种将一个值类型转换未对象引用类型的机制在其他语言中也存在,在 C# 中称为 装箱(Boxing)

    toString

    toString 返回一个表示操作对象的字符串,就是将当前对象转换为字符串并输出。最好用 Object.prototype.toString 来进行检测。不过 toString 无法检测用户的自定义类型,只能检测ECMA 标准中的那些内置类型。

    如果要判断的是基本数据类型或 JavaScript 内置对象,使用 toString; 如果要判断的是自定义类型,使用 instanceof 。

    相关文章

      网友评论

        本文标题:JS数据类型

        本文链接:https://www.haomeiwen.com/subject/zjrasxtx.html