欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS数据类型的四种方式

程序员文章站 2022-03-23 11:13:55
typeoftypeof''; // string 有效typeof1; // number 有效typeofSymbol(); // symbol 有效typeoftrue; //boolean 有效typeofundefined; //undefined 有效typeofnull; //object 无效typeof[] ; //object 无效typeofnewFunction(); // function 有效typeofnewDate(); //object 无效typeof...

typeof

typeo f''; // string 有效
typeo f1; // number 有效
typeof Symbol(); // symbol 有效
typeof true; //boolean 有效
typeof undefined; //undefined 有效
typeof null; //object 无效
typeof [] ; //object 无效
typeof new Function(); // function 有效
typeof new Date(); //object 无效
typeof new RegExp(); //object 无效

总结

  • 对于基本类型,除了null,都能正确返回类型
  • 对于应用类型,除了function以外,一律返回object类型
  • 对于null,返回object类型

instanceof

  • 使用方法,A instanceof B,如果A是B的实例,返回true,否则返回false
  • 原理:insatanceof是监测的是原型
[] instanceof Array; // true
{} instanceof Object;// true
newDate() instanceof Date;// true
 
function Person(){};
newPerson() instanceof Person;
 
[] instanceof Object; // true
newDate() instanceof Object;// true
newPerson instanceof Object;// true
  • 以上需要注意的是,[]不仅是Array的实例,还是Object的实例。这是因为instanceof是根据原型监测的,array的__proto__是Array的prototgype,而Array的__proto__是Object的prototype,由此可以得到[]是Array的实例的依据
  • 所以,indtanceof只能判断两个对象是否属于实例关系,不能判断一个对象实例具体属于哪种类型

constructor

  • 函数被定义的时候,会为其添加prototype原型,而原型中有一个constructor属性,这个属性指向起构造函数
console.log(''.constructor); // String
console.log(new Number(1).constructor); // Number
console.log(true.constructor); // Boolean
console.log(new Function().constructor); // Function
console.log(new Date().constructor); // Date
console.log(new Error().constructor); // Error
console.log([].constructor); // Array
  • null和undefined是无效二点对象,因此没有constructor所以不能通过constructor进行判断类型

toString

toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。

对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。

console.log(Object.prototype.toString.call(''))   // [object String]);
console.log(Object.prototype.toString.call(1))    // [object Number]);
console.log(Object.prototype.toString.call(true)) // [object Boolean]);
console.log(Object.prototype.toString.call(Symbol())) //[object Symbol]);
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]);
console.log(Object.prototype.toString.call(null)) // [object Null]);
console.log(Object.prototype.toString.call(new Function())) // [object Function]);
console.log(Object.prototype.toString.call(new Date())) // [object Date]);
console.log(Object.prototype.toString.call([])) // [object Array]);
console.log(Object.prototype.toString.call(new RegExp())) // [object RegExp]);
console.log(Object.prototype.toString.call(new Error())) // [object Error]);

本文地址:https://blog.csdn.net/weixin_43760969/article/details/109238988