美文网首页
JavaScript数据类型

JavaScript数据类型

作者: wcry | 来源:发表于2019-07-10 20:27 被阅读0次

    ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined、Boolean、Null、String和Number。还有一种复杂数据类型——Object。

    typeof操作符

    typeof用来检测给定变量的数据类型。typeof通常会返回以下字符串:

    • “Undefined“——如果这个值未定义;
    • “boolean”——如果这个值是布尔值;
    • “string”——如果这个值是字符串;
    • “number”——如果这个值是数值;
    • “object”——如果这个值是对象或null;
    • “function”——如果这个值是函数。

    typeof不是函数,typeof返回值是字符串类型。

    Undefined类型

    当声明一个变量,未对变量进行初始化时,使用typeof操作符时,返回值为undefined。

    var a;
    console.log(typeof(a)); //undefined
    
    var a = undefined;
    console.log(a == undefined);    //true
    
    console.log(b); //ReferenceError
    
    console.log(typeof(a)); //undefined
    console.log(typeof(b)); //undefined
    

    Null类型

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

    var a = null;
    console.log(typeof(a)); //object
    

    如果要创建一个空对象时,最好将对象赋值为null,这样在以后使用时,只需要检测null值就可以知道变量是否已经保存了对象的引用。

    var person = null;
    if (car != null) {
        //  对person对象进行操作
    }
    

    undefined值是派生自null值得,因此ECMA-262规定对它们的想等性测试返回true

    console.log(null == undefined); //true
    

    建议:声明空变量时,不用将其赋值为undefined,即undefined一般不显示使用;声明空对象时,应将其赋值为null,这体现了null表示一个空对象指针。

    Boolean类型

    Boolean类型有两个值,即true和false,并且Boolean类型区分大小写,因此不能将true写成True,不能讲false写成False。

    Boolean字面值只有两个,但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。将一个值转换为Boolean类型,只需要调用Boolean()函数即可。

    var message = "hello world";
    var messageAsBoolean = Boolean(message);
    console.log(`${messageAsBoolean} : ${typeof messageAsBoolean}`)     //true : boolean
    
    数据类型 true false
    Boolean true false
    String 任何字符串 “ ”(空字符串)
    Number 任何非零数(包括无穷大) 0和NaN
    Object 任何对象 null
    Undefined 不适用 undefined

    因为存在任何类型可以转换为Boolean类型,所以对理解流程控制语句自动执行响应Boolean转换非常重要。

    var message = "hello world";
    if (message) {
        console.log(message);
    }
    

    Number类型

    在进行算术计算时,所有以八进制和十六进制表示的数值都将转换成十进制。浮点数需要的空间是整数需要空间的两倍,因此ECMAScript会尽可能的将其保存为整数类型。使用Number类型时,对于较大的数字可以采用科学技术法,如31250000可以表示为3.125e7

    由于内存的限制,ECMAScript保存的数值是有大小的,最大值保存在Number.MAX_VALUE中,最小值保存在MIN_VALUE中。如果超过了这两个范围就会将其转换为infinity(无穷大)。使用isFinite()函数可以判断一个数是否在有效的范围内,如果不在有效的范围内,将不能继续执行运算。

    NaN数据类型

    NaN,即非数值(Not a Number)是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况。NaN有两个非同寻常的特点:==任何涉及NaN的操作都会返回NaN;NaN与任何值都不相等,也包括本身==。

    console.log(NaN == NaN)     //false
    

    可以使用isNaN()函数来判断一个数是否是NaN类型,isNaN()函数接收一个值时,会尝试将这个值转换为一个数。

    console.log(isNaN(NaN));        //true
    console.log(isNaN(10));         //false     
    console.log(isNaN("10"));       //false
    console.log(isNaN("blue"));     //true
    console.log(isNaN(true));       //false
    

    isNaN()也可以用于对象,对象调用isNaN()时,会首先调用valueOf()方法,然后确定该方法返回值是否可以转换为数值。如果不能基于这个值调用toString()方法,在测试返回值。

    数值转换

    Number()、parseInt()和parseFloat()可以将非数值转换为数值类型。

    Number()函数的转换规则:

    • 如果是Boolean值,true转为1,false转为0;
    • 如果是null,返回0;
    • 如果是undefiend值,返回NaN;
    • 如果是字符串
      • 如果字符串中包含数字就转换为十进制数值,且把前面的0去了。如“123”转为123,“011”转为11;
      • 十六进制会转为十进制;
      • 空字符串转为0;
      • 如果是其他字符串时,将其转为NaN;
    • 如果是对象,则调用valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用toString()方法,然后依次按照前面的规则进行转换。
    var num = Number("hello world");        //NaN
    

    一元加操作与Number()函数相同。

    parseInt()函数的转换规则:

    • 如果第一个字符串不是数字字符或者符号,返回NaN;
    var num1 = parseInt("1234blue");        //1234
    var num2 = parseInt("")                 //NaN
    var num3 = parseInt("0xA");             //10
    var num4 = parseInt("22.5");            //22
    var num5 = parseInt("070");             //56
    var num6 = parseInt("70");              //70
    var num7 = parseInt("0xf");             //15
    

    parseInt()函数会接受第二个参数,指定转换时使用的基数。

    parseFloat()同parseInt(),唯一不同是,parseFloat()会忽略前导的0,==parseFloat只解析十进制==。

    var num1 = parseFloat("1234blue");      //1234
    var num2 = parseFloat("0xA");           //0
    var num3 = parseFloat("22.5");          //22.5
    var num4 = parseFloat("22.34.5");       //22.34
    var num5 = parseFloat("0908.5");        //908.5
    var num6 = parseFloat("3.125e7");       //31250000
    

    String类型

    String字符串一旦创建就不可以改变,除非先销毁原字符串在重新进行赋值。

    转换为String类型

    使用几乎每个值都有的toString()方法。除了null和undefined没有toString()方法外,数值、布尔值、字符串和对象都有toString()方法。

    var age = 11;
    var ageAsStr = age.toString();      //"11"
    var found = true;
    var foundAsStr = found.toString();      //"true"
    

    在调用数值的toString()方法时,可以传递一个参数:输出数值的基数。默认情况,toString()以十进制格式返回数值的字符串表示。

    var num = 10;
    console.log(num.toString())         //"10"
    console.log(num.toString(2))        //"1010"
    console.log(num.toString(8))        //"12"
    console.log(num.toString(10))       //"10"
    console.log(num.toString(16))       //"a"
    

    在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串。使用String()方法时,如果要转换的值有toString()方法,则调用这个方法,如果是null则返回“null”,如果是undefined则返回“undefined”。

    var value1 = 10;
    var value2 = true;
    var value3 = null;
    var value4;
    console.log(String(value1));        //"10"
    console.log(String(value2));        //"true"
    console.log(String(value3));        //"null"
    console.log(String(value4));        //undefined
    

    要把某个值转换为字符串,可以使用加号操作符把它与一个“”(空字符)加在一起。

    Object类型

    浏览器环境中的对象,比如,BOM和DOM中的对象,都属于宿主对象,它们是由宿主实现提供和定义的。

    对象详细将会单独写出。

    相关文章

      网友评论

          本文标题:JavaScript数据类型

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