js判断数据类型(全)

js基本数据类型

  1. 基本数据类型:
    String、Number、Boolean、Undefined未定义、null空、symbol表示独一无二的值(es6引入的新的原始数据基本类型)。
    Number:返回的特殊值NaN,表示不是数值,用于表示本来要返回的数值的操作失败了。
    String:字符串是不可变的,一旦创建,值就不能变了。做的字符串操作是先对原字符串进行销毁再创建的。
    null:null值表示一个空对象指针,typeof null 结果是object。
    symbol(符号):是原始值,且实例是唯一、不可变的。用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。
  2. 引用类型:
    对象Object、数组Array、函数function
    函数存在三种常见的表达方式:
    1.函数声明 function sum(a,b){return a+b;}
    2.函数表达式 let sum = function(a,b){return a+b};
    3.箭头函数 let sum = (a,b)=>{return a+b;}

查看数据类型

  1. typeof
    typeof对于一些类型的处理只返回了处于其原型链最顶端的object类型。
    引用类型除了function返回function类型之外,其他都返回object。
    ○ NaN的数据类型是number
    ○ 数组(Array)和日期Date的数据类型是object
    ○ 不能检测出null,检测null的数据类型是object

  2. toString
    toString是Object的原型方法,调用该方法,返回当前对象的[[class]]。对于Object对象,直接调用toString()就可以返回,对于其他类型需要通过call()/apply()来调用才能返回正确的类型信息。
    使用:
    Object.prototype.toString.call(‘’ '); //[[Object String]]

  3. constructor
    无法判断null和undefined
    原型prototype的一个属性,函数被定义的时候,js引擎会为函数添加原型prototype,并且这个prototype种constructor属性指向函数应用。
    使用:
    [].constructor ==Array //true
    new Date().constructor == Date //true

  4. instanceof
    用来判断A是否为B的实例,A instanceof B,如果A是B的实例,返回true否则返回false。instanceof检测的是原型。
    在这里插入图片描述

    可以看出[] 的原型指向Array.prototype,间接指向Object.prototype,因此 [] instanceof Array 返回true,[] instanceof Object 也返回true。

    instanceof只能判断两个对象之间是否属于实例关系,不能判断一个对象属于哪种类型。

  5. typeof与instanceof的区别
    1.typeof返回字符串,也就是返回一个变量基本类型,instanceof返回布尔值
    2.instanceof相对来说,更适合判断:一个对象是否是一个构造函数的实例 。对于类型的判断存在不确定性:例如一个数组,它的_proto_原型执行Array.prototype,间接指向Object.prototype,因此 [] instanceof Array 返回true,[] instanceof Object 也返回true。
    3.typeof存在弊端,无法检测null类型和除了function以外的引用类型。

  6. 怎样判断是否是数组

    1. Array.isArray(arr)== true;
    2. arr.constructor()=== Array ;
    3. Object.prototype.toString.call(arr) === “[object Array]”

7.什么不直接Object.prototype.toString().call(arr),为什么要放在call()中

  1. 两个toString根本不是同个方法,object本身是一个构造函数,任意一个函数自身的toString方法都是继承自function构造函数。而Object原型下面的构造函数是返回对象内部的class值。

  2. 虽然Array也继承自Object,但js在Array.prototype上重写了toString,而我们通过toString.call(arr)实际上是通过原型链调用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值