前端面试题 | JS的数据类型有哪些?判断数据类型的方法又有什么呢?

一、JS数据类型包含基本数据类型和复杂数据类型

(1)基本数据类型

  • String
  • Number
  • Boolean
  • undefined
  • Null
  • Symbol

(2)引用数据类型

引用数据类型是值对象类型Object type,最常用的是对象Object,数组Array,函数Function和Date

两种数据类型的区别:

1)声明变量时不同的分配内存

基本数据类型是存储在栈中的简单数据段,也就是说,他们的值直接存储在变量访问的位置

引用数据类型是存储在堆中的对象,存储在变量处的值是一个指针,指针存储对象的内存地址

2)不同的访问机制

基本数据类型可以直接访问

引用数据类型不可以直接访问,在需要访问时首先得到这个对象在堆中的内存地址,然后再通过地址去获取对象中的值。

3)复制变量时不同

基本数据类型再复制完成后是完全独立的,一个改变不影响另一个改变。引用数据类型在复制时只是将对象的内存地址赋值给了新变量,也就是说两变量都指向了堆内存中的同一个对象,一个的改变会影响另外一个。实现互不影响,需要进行深拷贝。

4)参数传递时不同

js中的参数都是按值传递的

基本数据类型将变量的值传递给参数后,变量和参数互不影响

引用数据类型只是将内存地址传进去,因此函数内存参数的改变会体现在外部

二、检验数据类型的方法有哪些?

  • typeof(值)或者typeof值
        1.console.log(typeof 1);
    	2.console.log(typeof 'kk');
    	3.console.log(typeof true);
    	4.console.log(typeof null);
    	5.console.log(typeof undefined);
    	6.console.log(typeof Symbol());
    	7.console.log(typeof {});
    	8.console.log(typeof new Function());
    	9.console.log(typeof new Array); 
    

    输出

    1.number
    2.string
    3.boolean
    4.object
    5.undefined
    6.symbol
    7.object
    8.function
    9.object
    

    typeof基本上可以识别所有的数据类型,但是识别不了null,对于引用数据类型,可以识别function,但是其他的都只能识别称Object

  • A instanof B ,判断A是否为B的实例

        1.console.log([] instanceof Array);
    	2.console.log({} instanceof Object);
    	3.console.log([] instanceof Object);
    	4.console.log(new Function() instanceof Function);
    	5.console.log(new Function() instanceof Object);
    

    输出都为true

instanceof只能用来判断两个对象之间是否属于实例的关系,而不能判断一个实例对象具体属于那种类型。比如 [] 是Array的实例也是Object的实例。具体可以通过原型链进行分析。那么针对数组的这种问题,可以使用Array.isArray()方法判断。

  • constructor(除了null和undefined,他们不是由队形构建)
    数字
    var num = 1;
    num.constructor
    ƒ Number() { [native code] }
     
    布尔值
    true.constructor
    ƒ Boolean() { [native code] }
     
    字符串
    "".constructor
    ƒ String() { [native code] }
     
    函数
    var func = function(){}
    func.constructor
    ƒ Function() { [native code] }
     
    数组
    [].constructor
    ƒ Array() { [native code] }
     
    对象
    var obj = {}
    obj.constructor
    ƒ Object() { [native code] }
  • toString() Object的原型方法
        1.console.log(Object.prototype.toString());
    	2.console.log(Object.prototype.toString.call({}));
    	3.console.log(Object.prototype.toString.call(1));
    	4.console.log(Object.prototype.toString.call(''));
    	5.console.log(Object.prototype.toString.call(true));
    	6.console.log(Object.prototype.toString.call(null));
        7.console.log(Object.prototype.toString.call(undefined));
        8.console.log(Object.prototype.toString.call(Symbol()));
    	9.console.log(Object.prototype.toString.call([]));
    	10.console.log(Object.prototype.toString.call(new Function()));
    

    输出

        1.console.log(Object.prototype.toString());
    	2.console.log(Object.prototype.toString.call({}));
    	3.console.log(Object.prototype.toString.call(1));
    	4.console.log(Object.prototype.toString.call(''));
    	5.console.log(Object.prototype.toString.call(true));
    	6.console.log(Object.prototype.toString.call(null));
        7.console.log(Object.prototype.toString.call(undefined));
        8.console.log(Object.prototype.toString.call(Symbol()));
    	9.console.log(Object.prototype.toString.call([]));
    	10.console.log(Object.prototype.toString.call(new Function()));
    

    可以实现所有数据类型的判断。

  • 觉得有帮助点个赞吧~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值