js的数据类型

基本数据类型

基本数据类型的数据都存放在栈区,是值不可变的,当我们改变一个基本类型的数据时,只是创建了一个新的数据,并移动了指针而已,原来的数据仍然存在,由垃圾回收机制回收。
用A变量给B变量赋值时,只是复制了一份给B变量,A变量并没有改变,因此改变B变量并不影响A变量。(涉及深拷贝浅拷贝的问题)

  • Number
    不区分整数还是浮点型,但是一般不会判断两个浮点数是否相等。可以是十进制(0-9)、八进制(0 0-7)、十六进制(0x 0-9 A-F)。
    Number()方法:
    尽可能将输入的值转化为数字。
        var a = "123";
        var b = true;
        var c = null;
        var d = function kkk(){
            alter("d");
        }
        var e = new Date();
        console.log(Number(a));
        console.log(Number(b));
        console.log(Number(c));
        console.log(Number(d));
        console.log(Number(e));

运行结果如下:

在这里插入图片描述
当字符串内容为全是数字时,能正常转换,但是,如“100px”这种情况就会转化成NaN。这类转换使用parseInt():将字符串转化为整数,那么“100px”会被转化为100。还有parseFloat():与parseInt一样,但是会保留第1个小数点后面的数字。
非空字符串、函数、json、undefined(未定义)和其他对象会变成NaN(not a number)。

  • String
    用双引号或单引号括起来的部分,“+”可以用来做字符串的拼接。但是在拼接时,如果一方不是字符串则会发生隐式转换。
    如:var a = "100"; console.log(100+a);
    运行结果为 “100100”
    String()方法:
    可以将其他数据类型强制转化为字符串类型,和toString()不一样的是在强制转化null和undefined时可以正确转化成字符串。
    三种值类型(字符串、数组和布尔值)都具有toString()方法,可以将自身转换为字符串。
  • Boolean
    布尔值只有true和false两种。
    Boolean()方法:
    可以把其他数据类型转化为布尔型。
    当要转换的值是至少有一个字符的字符串,非0数字或对象时,Boolean()函数将反回true,如果该值是空字符串,数字0或null,它将返回false。
    >和<可以让字符串和数字之间的比较显示正确,但是两个字符串比较不可以,如:‘10’>9和’10’>‘9’,前者为true后者为false,因为字符串之间的比较是从左向右一位一位的比较unicode编码大小。
    ==比较的是数值的相等,判断前将两边转化为数字。
    ===比较的是类型的相等,要值和类型都相等才为true。
  • Undefined
    未定义,一般是非人为的因素导致的。
    出现的情景:
    1.定义了一个变量未初始化。
    2.对一个没声明的变量调用typeof
    3.当函数无明确返回值时,返回值也是undefiend
  • Null
    空对象,可以人为设置某个变量为null。
    表示尚未存在的对象,如果函数要返回对象,那么找不到该对象时,返回的值通常是null。
  • Symbol
    es6新增,表示独一无二的值。

引用数据类型

  • Obiect
  • Function
  • Array
    这类数据类型的值是可变的,存储在堆区,当新建一个引用数据时,指针 存放在栈区,该指针指向存放在堆区的数据。当A对象的值赋给B的时候,是把A指针的指向给了B,也就是此时A、B的指针指向同一个数据,所以不管是对A还是B进行操作,另一个的值也会改变。

如何判断数据类型

此处参考了该篇文章

        var a = "123";
        var b = true;
        var c = null;
        var d = function kkk(){
            alter("d");
        }
        var e = new Date();
        var f = new Array(7);

        console.log(typeof(a));
        console.log(typeof(b));
        console.log(typeof(c));
        console.log(typeof(d));
        console.log(typeof(e));
        console.log(typeof(f));

运行结果如下:
在这里插入图片描述
使用typeof判断时,除了function被正确判断外,其他的函数都被判断为了object,包括null。

万能的办法:
Object.prototype.toString.call()

每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 “[object type]”,其中 type 是对象的类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值