• JavaScript之数据类型


    javasscript有5种简单数据类型(也成为基本数据类型):

    Undefined、Null、Boolean、Number、String

    1种复杂数据类型:

    Object

    在javascript中所有值的数据类型就是上述6种之一了。那么我们需要一个方法来检测给定变量到底是那种数据类型,typeof操作符就可以帮助我们解决问题。

    var msg="博客园";
    alert(typeof msg);  // "string"
    alert(typeof 110);  //  "number"
    

    使用typeof 操作符,返回下列某个字符串:

    "undefined" --该值未定义

    "boolean"--布尔值

    "string"--字符串

    "number"--数值

    "object"--对象或null

    "function"--函数

    看到这里我们对"object"--对象或null有些疑惑,为什么 typeof null 会返回object,这里我们需要记住的是null是一个特殊类型,他表示对一个空对象的引用,所以会返回object。

    华丽的分割线 ----------------------------------------------------------------------------------------------------------------------------------------------------------------

    1.Undefined类型

    当我们声明一个变量时没有对其进行初始化,这个变量的值就是undefined:

    var msg;
    alert(msg==undefined); // true
    

    例子中声明变量msg,并没有对其进行初始化,所以会弹出undefined。

    所以声明变量时我们也可以使用undefined来初始化变量:var msg=undefined,

    但是未经初始化的值会默认取得undefined,这种写法也没必要了。

    var msg; // 声明变量,默认取得undefined
    // 变量name没有声明
    // var name 
    
    alert(msg); // "undefined"
    alert(name); // 产生错误
    

    上述代码name变量并没有被声明,传递给alert函数时产生一个错误。

    这时我们用typeof检测一下我们的变量:

    var msg; // 声明变量,默认取得undefined
    // 变量name没有声明
    // var name 
    
    alert(typeof msg); // "undefined"
    alert(typeof name); // "undefined"
    

    结果是未初始化和未声明的变量执行typeof都返回了undefined,这个结果有其逻辑上的合理性。因为虽然这两种变量从技术上角度看有本质区别。

    即便未初始化的变量会自动赋予undefined值,但养成显式初始化变量(即在声明变量的同时给变量赋值)的习惯。如果能够做到这一点,那么当typeof操作符返回undefined

    时,我们就知道被检测的变量是有还是没有被声明的,而不是尚未初始化的了。

    2.Null类型

    前面说过null是一个特殊的类型,表示对一个空对象的引用。

    但是undefined和null之间有什么关系呢?看下面的代码:

    alert(null==undefined); // true
    

    实际上,undefined值派生自null值,因此ECMA-262规定它们的相等测试要返回teue。

    尽管有这样的关系,但他们的用途完全不同。前面也说过声明变量没有必要显示的初始化为undefined,会默认取得。对于null却不能这样了,也就是说声明一个变量来保存对象,只要

    变量还没有保存,就应该让变量明确保存null值。这样既能体现null作为空对象指针的特性,又能区分null和undefined。

    3.boolean类型

    boolean类型只有两个值:true和false。这两个值与数值值不是一回事,因此true不一定等于1,false也不一定等于0。

    boolean类型的字面值true和false是区分大小写的。像True和False都不是boolean值,而是标识符。

    虽然boolean类型的值只有两个,但是其他类型的值都有与这两个boolean值等价的值。将一个值转换为其对应的boolean值,需要调用Boolean()函数。

    var msg="博客园";
    alert(Boolean(msg)); // true
    

    在上述代码中字符串msg被转换成了一个boolean值。可以对任何数据类型的值调用Boolean()函数,而且总会返回一个boolean值。这个值是true还是false取决于被转换数值的数据类型和具体的值。

    看如下各数据类型及对应的转换规则:

                       数据类型                           转换为true的值                                 转换为false的值

                    boolean                                     true                                                                  false          

                        string                                        非空字符串                                                         ""空字符串  

                        number                                     非零数值                                                            0 和 NaN    

                        objeact                                     任何对象                                                             null            

                        undefined                                 ----不适用                                                           undefined 

    通过这些转换规则,可以帮我们很好的理解控制流语句if自动执行相应的Boolean转换:

    var msg="博客园";
    if(msg)
    {
        alert("变量msg被转换为true");
    }
    

    运行上述代码,就会显示一个警告框。字符串msg被自动的转换为对应的Boolean值。明白这个原理,我们就能很好的在控制语句if中使用变量了。

    4.number类型

    3.1整数,最常用的就是十进制整数了。当然还有八进制、十六进制,这里不做讲解了。

    需要注意的是在做算术计算时,所有以八进制和十六进制表示的数值最终都会被转换成十进制数值。

    3.2浮点数值,就是该数值中必须包含一个小数点,小数点后面必须有一位数字。

    var num1=1.1;
    var num2=1.2;
    var num3=.3;  // 有效,但不推荐
    

    由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会自动把相应的浮点数值转换为整数值。如果小数点后面没有跟数值(2.)或者后面跟了一个零(2.0),

    这个值就会被作为整数值来保存:

    var num1=2.;
    alert(num1);  // 2,小数点后没有数值解析为2
    
    var num2=2.0;
    alert(num2);  // 2,本身就是一个整数解析为2
    

    对于那些极大或者极小的数值,可以用e表示法(科学计数法)来表示浮点数值。

    科学计数法的格式:整数/浮点数 + e/E + 10的幂中的指数

                                 3.125           e            7  == 

    var num1=3.125e7;  // 31250000
    

    3.3数值范围,由于内存的限制,并不能保存所有的数值。

    能表示的最小值:Number.MIN_VALUE,这个值是5e-324

    能表示的最大值:Number.MAX_VALUE,这个值是1.7976931348623157e+308

    如果你的某次计算得到的值不在javascript最小和最大值这个范围内,那么你的值会被自动转换成特殊的Infinity值。

    如果这个值是负数,会转换成-Infinity(负无穷);如果是正数,则是转成Infinity(正无穷)。

    3.4 NaN:非数值。有两个特点:

    一、任何涉及NaN的操作都会返回NaN(例如NaN/5).

    二、NaN与任何值都不相等,包括本身。

    alert(NaN==NaN); // false
    

    针对NaN的这两个特点,javascript定义了isNaN()函数。这个函数接收一个参数,该参数可以是任何类型,函数会帮我们确定这个参数是否“不是数值”。

    isNaN()在收到一个值后,会尝试将这个值转换为数值,某些不是数值的值会直接转换为数值,(字符串“10”或Boolean),任何不能被转换的都会返回true

    alert(isNaN(NaN)); // true
    alert(isNaN(10)); // false 10是数值
    alert(isNaN("10")); // false "10"可以被转换为数值10
    alert(isNaN("博客园")); // true 不能转换为数值
    alert(isNaN(false)); // false 可以被转换为0
    

    5.String类型

    字符串是 JavaScript 的一种基本的数据类型。

    String 对象的 length 属性声明了该字符串中的字符数。

    String 类定义了大量操作字符串的方法,例如从字符串中提取字符或子串,或者检索字符或子串。

    6.object类型


    一组数据和功能的集合,对象可以通过new操作符来创建对象。

    var obj=new Object();
    

    可以自定义对象的属性或方法:

    var obj=new Object();
    obj.name="张三";
    obj.say=function(){
        alert(this.name)
    }
    

    还可以这么写:

    var obj={
        name:"张三",
        say:function(){
            alert(this.name)
        }
    }
    

    结果是一样的。

    在javascript中object是所有对象的基础,因此所有的对象都具有object的属性和方法。

  • 相关阅读:
    JS可改变列宽table
    无图片,用css border实现尖三角
    IE6下position:fixed;兼容
    巧用cssText属性批量操作样式
    Java
    Java
    Java
    JRebel
    Spring
    ActiveMQ
  • 原文地址:https://www.cnblogs.com/Cuiy/p/4162650.html
Copyright © 2020-2023  润新知