JS-数据类型

作者: 饥人谷_喂鱼de猴子 | 来源:发表于2017-01-10 10:09 被阅读0次

    1、js的类型
    2、如何判断一个数据的类型
    3、数据的引用


    1、js的类型

    js中的数据类型有六种

    1. 数字(number
    2. 字符串 (string
    3. 布尔值 (boolean
    4. undefined
    5. null
    6. 对象(狭义的对象Object、数组Array、函数Function、正则表达式)

    1-5是基本类型,对象是复杂类型

    1.1 数字(number

    常见的number类型:整数、浮点数、科学计数法、NaNInfinity

    1.1.1、浮点数
    浮点数一般要占用更多内存,所以js会尽可能的用整数来保存数据,如果浮点数的小数点后没有数字,那么这个浮点数会被保存为整数( 1.0 等价于 1)

    1.1.2、数值范围
    js保存数值是有极限的,如果得到了一个超过极限的数值,那么会被保存为Infinity;如果此数值为正,就转换为+Infinity,反之亦然。
    可以使用isFinite();函数进行判断
    例:

    var num = 9e999999999999;
    isFinite(num);       //数值范围内的正常值返回true,如果超出极限或者是NaN就返回false
     false
    

    1.1.3、数值转换
    常用的有Number()parseInt()parseFloat()

    1. Number()
      应用于把任何数据转换为数字,规则:
       1.数值数据(number)不改变
      Number(3)
      3
       2.字符串(string
         如果字符串只包含数字,就返回这个数字(数值前若有0忽略)
      Number('012')
      12
         如果包含浮点数,返回响应浮点数,(忽略前0
      Number('01.3')
      1.3
         如果字符串是空的,返回0
      Number('')
      0
         如果字符串包括上三项·以外的字符,返回NaN
      Number('1a2b')
      NaN
       3.布尔值(boolean)的truefalse会被转化为10null返回0
       4.undefined返回NaN
       5.null返回0
       6.对象(object
         先调用valueof(),然后按照上述规则转换,如果返回NaN,再调   用toString(),然后按照规则转换。
    2. parseInt()
      parseInt()规则:
        1.会自动忽略空格并识别第一个非空格字符
        2.如果第一个非空格字符是非数字字符,那么直接返回NaN
        3.如果第一个非空格字符数字字符,那么继续解析,直到解析完毕或者解析到了非数字字符
    parseInt("x23")
    NaN
    parseInt("023")
    23
    parseInt("23x")
    23
    parseInt("3.4")
    3            // "." 是非数字字符
    

    ps:parseInt可以传入第二个参数,第二个参数决定`parseInt``按照几进制对字符串进行解析。

    1. parseFloat()
      parseFloat()规则:
        1.与parseInt相同
        2.第一个小数点视为有效
        3.没有第二个参数,只能以十进制计算
    parseFloat("0.3")
    0.3
    parseFloat("x3.3")
    NaN
    parseFloat("3.3.3.3")
    3.3         //只有第一个小数点被视为有效,其余的小数点仍被视为非数字字符
    parseFloat("020.3")
    20.3
    

    1.1.4、NaN
    意为Not a Number,NaN被用于【本应返回数值】却未返回数值时(多用于字符串解析为数字出错的场合)
    NaN有两个特点:

    1. 任何涉及到NaN的操作,最后都会返回NaN
    2. NaN不等于任何值,包括它自己。

    可以使用isNaN();函数判断或者利用NaN不等于自身这个特性判断
    例:

    console.log(NaN+10)
    NaN
    console.log(NaN === NaN)
    false
    console.log(isNaN(NaN))
    true
    console.log(NaN !== NaN)
    true
    

    这里要注意,除了NaN以外,isNaN函数如果传入字符串,也会返回 true
    js中不区分整数和浮点数,

    1.2 字符串(string

    零个或多个排在一起的字符,由单/双引号包裹

    1.2.1 数组与字符串
    其本质可以视为字符组成的数组

    var a = "huang";
    console.log(a[0])
    h
    console.log(a.length)
    5
    

    1.2.2 字符串特点
    字符串在js里不可变,一旦创建,就不可改变

    var a = "hello";
    a = a + "world"
    

    以上代码实现过程,
    1、先是第一行代码把"hello"赋予变量a
    2、然后第二行代码先创建能容纳十个字符("helloworld"一共十个字符)的字符串,把"helloworld"放进去
    3、最后销毁最开始的"hello""world"

    1.2.3 字符串的转换
    使用toString()方法

    var value1 = 123;
    var value2 = false;
    var value3 
    var value4 = "huang";
    
    console.log(String(value1))
    "123"
    console.log(String(value2))
    "false"
    console.log(String(value3))
    "undefined"
    console.log(String(value4))
    "huang"
    
    
    

    1.2.4 字符串相加
    字符串之间可以用+相加

    var a = "hello";
    a = a + "world"
    console.log(a)
    "helloworld"
    

    字符串和数字用+相加,数字会被污染,得到新字符串

    var a = "abc";
    console.log(2+a)
    "2abc"
    

    1.3 布尔值(boolean

    只有真(true)和假(false)两个值
    很多时候(比如流控制语句中),js会把数据进行布尔值转换
    只有undefined、null、0、false、NaN、""(空字符串)会转换为false,其他数据都是true

    1.4 undefined

    意为【 未定义 】 是此处不存在任何值
    有四种情况会返回undefined
    1、声明变量但未赋值

    var xx
    console.log(typeof xx)
    undefined                    //变量xx被声明但未赋值,typeof返回undefined
    

    2、声明变量并赋值为undefined
    (一般没必要这么做,因为未初始化的变量本就是undefined)

    var xx = undefined
    console.log(typeof xx)
    undefined                    //变量xx被声明并赋值为unfined,typeof返回undefined
    

    3、对象没有赋值的属性,该属性值为undefined
    4、函数没有返回值时返回undefined,函数调用参数却未提供参数时,参数为undefined

    PS:undefined有一个特性,

    var b
    console.log(b)
    undefined  //声明变量b,正常返回undefined
    console.log(c)
    发生错误 //未声明变量c,返回错误,这里都很正常,但是
    typeof b
    undefined      //正常返回undefined
    typeof c
    undefined     //居然也返回了undefined而不是返回错误
    

    那么我们最好在需要undefined的时候都进行赋值操作,那么一旦typeof返回了undefined,如果这个变量还不是我赋值的,那我就可以判断这个变量是未声明过的变量

    1.5 null

    意为【空】,表示这里有一个空对象指针
    某个变量将来准备保存为对象,那么就应该把它初始化为null

    1.6 对象(Object)

    由若干健值对组成的数据集合
     1.6.1 对象的生成
       1、给变量赋值一个大括号

    var o1 = {};
    typeof o1;
    "object"
    

    2、使用new Object();构造函数

    var o2 = new Object();
    typeof o2;
    "object"
    

    2、如何判断一个数据的类型

    • typeof
      使用 typeof 语句
      例:
    typeof 1
    "number"
    typeof false
    "boolean"
    typeof 'abc'
    "string"
    
    • instanceof
      使用typeof有个问题,虽然函数数据会正常返回function,但是数组和对象用typeof都会返回object,那么怎么区分数组和对象呢?
      使用instanceof
      instanceof 会判断一个数据是不是由某个构造函数创造的实例。
      例:
    [1,2,3] instanceof Array
    true
    var o = new Object();
    o instanceof Object
    true
    

    这样就可以分辨出数组和对象了。


    3、数据的引用

    3.1 基本类型数据的引用
    基本类型数据的引用是对的拷贝

    var a = 100;
    var b = a;
    var a = 50;
    console.log(b)
    100
    

    上述代码第三行改变了a的赋值,并没有影响b
    说明ab在代码第二行虽然值相等,但是并未指向同一个内存地址,而是拷贝了a的值赋予了b

    3.2 复杂类型数据的引用
    复杂类型数据其实是指向某个内存地址的指针
    如果两个变量指向同一个内存地址,修改其中一个,另一个也会体现出修改。

    var x = new Object();
    var y = x;
    x.a = 1;
    console.log(y.a)
    1               //改变了x.a的值,y.a的值也响应改变了,因为x和y指向的是同一个地址
    
    

    对于引用类型数据,如果取消一个变量的引用,不会影响另一个

    var x = new Object();
    var y = x;      //此时x和y都是指向同一个对象
    x = 100;       // x被赋值100,此时x变为数字
    typeof y   
    "object"      //y仍然是对象,y仍然指向原来那个对象
    

    相关文章

      网友评论

        本文标题:JS-数据类型

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