检验数据类型的四个方法

检验数据类型的几个方法 ,如有不对,请大佬指点

  1. typeof 可以检测一些基本的数据类型,语法上可以选择加括号不加都可以的。但是注意 在检验 数组、对象、正则、null 的时候返回的都是Object,所以有时要针对对象或数组做些判断就不是很好了。
    请看示例:
console.log(typeof "你好呀"); 输出结果 String
console.log(typeof 1); 输出结果 Number
console.log(typeof false); 输出结果 Boolean
console.log(typeof undefined); 输出结果 undefined
console.log(typeof /$/); 输出结果 Object
console.log(typeof null); 输出结果 Object
console.log(typeof []); 输出结果 Object
console.log(typeof {}); 输出结果 Object
console.log(typeof function () {}); 输出结果 function
  1. constructor 构造函数,
    请看示例:
console.log(("你好").constructor === String);  输出结果 true
console.log(([]).constructor === Array);  输出结果 true
console.log(({}).constructor === Object);  输出结果 true
console.log((1).constructor === Number);  输出结果 true
console.log((true).constructor === Boolean);  输出结果 true
console.log((function () {}).constructor === Function);  输出结果 true
console.log((/$/).constructor === RegExp);  输出结果 true
// console.log((null).constructor === null);  输出结果 报错
// console.log((undefined).constructor === undefined);  输出结果 报错

如果不算 null 与 undefined 的话 constructor基本可以应对基本数据类型与引用数据类型的数据类型是啥,但 事实还是有些偏差,constructor并不可靠,容易被修改 即使被修改了,也不会影响代码的正常运行。
正常开发的时候,constructor不小心被修改了,为了方便维护,和开发,可以手动更正constructor的指向。
请看示例:

function fn() {}
let f = new fn;
console.log(f.constructor.name);  输出结果 'fn'
console.log(fn.constructor);  输出结果 Function(){}
console.log(Function.constructor);  输出结果 Function(){}
  1. instanceof 检测当前实例是否隶属于某各类。双目运算符 a instanceof b ,判断a的构造器是否为 b,返回值为布尔值
    但是 如果直接对对象字面量创建的基础数据类型做验证 返回的却不是所属类型,而引用数据类型的验证却是正常的。如果我们以new字符去创建基础数据类型,此时的结果才是所属数据类型。对于null 和 undefined 这两个 我的理解是反正这两个怎么玩都是报错 o(╯□╰)o
    请看示例:
console.log(("你好") instanceof String);  输出结果 false
console.log((1) instanceof Number);  输出结果 false
console.log((true) instanceof Boolean);  输出结果 false

console.log(([]) instanceof Array);  输出结果 true
console.log(({}) instanceof Object);  输出结果 true
console.log((function () {}) instanceof Function);  输出结果 true
console.log((/$/) instanceof RegExp);  输出结果 true

console.log(new String("你好") instanceof String);  输出结果 true
console.log(new Number(1) instanceof Number);  输出结果 true
console.log(new Boolean(true) instanceof Boolean);  输出结果 true

//console.log((null) instanceof null);   输出结果 报错
//console.log(new(null) instanceof null);   输出结果 报错
//console.log((undefined) instanceof undefined);  输出结果 报错
//console.log(new(undefined) instanceof undefined);  输出结果 报错
  1. Object.prototype.toString.call() 我认为这个是最强大的方法(个人看法,不喜轻喷),就是长了点,当然 如果简单地就随意了。并且 我们改变原型也不会有任何影响
    请看示例:
let isType = (type) => {
      return Object.prototype.toString.call(type);
}
    
console.log(isType('111'));   输出结果 [object String]
console.log(isType(111));   输出结果 [object Number]
console.log(isType(true));   输出结果 [object Boolean]
console.log(isType(['111']));   输出结果 [object Array]
console.log(isType({a: '111'}));   输出结果 [object Object]
console.log(isType(/$/));   输出结果 [object RegExp]
console.log(isType(function () {}));   输出结果 [object Function]

function abc() {};
abc.prototype = new Array();
console.log(isType(abc));   输出结果 [object Function]
  1. isArray 判断是否为数组、 isNaN() 判断是否是NaN,这两个就简单示范一下了。
    请看示例
console.log(Array.isArray([])); 输出结果 true
console.log(Array.isArray(new Array()));  输出结果 true
console.log(isNaN(NaN)); 输出结果 true
console.log(isNaN(+"12ab")); 输出结果 true
  1. hasOwnporperty 检测当前属性是否为对象的私有属性。语法: obj.hasOwnporperty(“属性名(K值)”)
    请看示例:
let obj = {
	name:"xx"
};
console.log(obj.hasOwnProperty('name')); 输出结果 true
console.log(obj.hasOwnProperty('xxxx')); 输出结果 false

小汪还是一个小白,如有大佬指点,万分感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值