JS中检测数据类型的7种方法

目录

一.JS中的数据类型:

二、检测数据类型的方法:

1、typeof 检测一些基本的数据类型

2、A  instanceof   B检测当前实例是否隶属于某各类

3、constructor构造函数

4、hasOwnporperty 检测当前属性是否为对象的私有属性

 5、is Array 判断是否为数组

6、valueOf

7、Object.portotype.toString (最好的)


一.JS中的数据类型:

1) 简单类型:String、Number、Boolean、Undefined、Null、Symbol
2)引用(复杂)类型:Object

二、检测数据类型的方法:

1、typeof 检测一些基本的数据类型

语法:typeof 后面加不加括号都是可以用的
注意:正则、{}、[]、null输出结果为object
 

    console.log(typeof /\d/);//object
	console.log(typeof {});//object
	console.log(typeof []);//object
	console.log(typeof (null));//object
	console.log(typeof 123);//number
	console.log(typeof true);//boolean
	console.log(typeof function () {});//function
	console.log(typeof (undefined));//undefined

2、A  instanceof   B检测当前实例是否隶属于某各类

双目运算符 a instanceof b ,判断a的构造器是否为b,返回值为布尔值

    function b(){}
	let a = new b;
	console.log(a instanceof b);//true
	console.log(b instanceof Object);//true
	let arr = [1,2,3,4];
	console.log(arr instanceof Array);//true

3、constructor构造函数

语法:实例.constructor
        对象的原型链下(构造函数的原型下)有一个属性,叫constructor
缺点:**constructor并不可靠,容易被修改(只有参考价值)。即使被修改了,也不会影响代码的正常运行。正常开发的时候,constructor不小心被修改了,为了方便维护,和开发,可以手动更正constructor的指向。


	function a() {}
	let a = new b;
	console.log(a.constructor.name);//a
	console.log(b.constructor);//Function(){}
	console.log(Function.constructor);//Function(){}

4、hasOwnporperty 检测当前属性是否为对象的私有属性

语法: obj.hasOwnporperty(“属性名(K值)”)

例子:
	let obj = {
	name:"lxw"
	};
	console.log(obj.hasOwnProperty('name'));//true
	console.log(obj.hasOwnProperty('lxw'));//false

 5、is Array 判断是否为数组


	console.log(Array.isArray([]));//true
	console.log(Array.isArray(new Array()));//true

6、valueOf

可以看到数据最本质内容(原始值)

例子:
	let a = "12345";
	let b= new String('12345');
	console.log(typeof a);//string
	console.log(typeof b);//object
	console.log(a == b);//true  (typeof检测出来是对象居然和一个数组相等,显然b并不是一个真的对象。)
	//此时看看 valueOf()的表现
	console.log(b.valueOf());//12345  拿到b的原始值是 字符串的12345
	console.log(typeof b.valueOf())//string  这才是 b的真正的数据类型

1.Math是个对象,不是类。类才有prototype(原型)。也就是说类都有原型:prototype,对象都有原型链:proto,函数既是类,也是对象,也是函数。
2.如何把对象转换成字符串?
 对象下的toString方法是检测数据类型的,而不是用来转化成字符串的,这时可以用JSON的方法来转化
 

例子:
	let obj={name:'朱军林'}
	obj.toString()//=>"[object Object]"
	
	
	JSON.stringify({name:'朱军林'})//"{"name":"朱军林"}"

7、Object.portotype.toString (最好的)

语法:Object.prototype.toString.call([value])
        获取Object.portotype上的toString方法,让方法的this变为需要检测的数据类型值,并且让这个方法执行

在Number、String、Boolean、Array、Function、RegExp…这些类的原型上都有一个toString方法:这个方法就是把本身的值转化为字符串

例子:
	(123).toString()//'123'
	(true).toString()//'true'
	[12,23].toString()//'12.23'

...

在Object这个类的原型上也有一个方法toString,但是这个方法并不是把值转换成字符串,而是返回当前值得所属类详细信息,固定结构:’[object 所属的类]'

调取的正是Object.prototype.toString方法obj.toString()
 首先执行Object.prototype.tostring方法,这个方法中的this就是我们操作的数据值obj


总结:Object.prototype.toString执行的时候返回当前方法中的this的所属类信息,也就是,我想知道谁的所属类信息,我们就把这个toString方法执行,并且让this变为我们检测的这个数据值,那么方法返回的结果就是当前检测这个值得所属类信息 

	Object.prototype.toString.call(12)//[boject Number]

	Object.prototype.toString.call(true)//[boject Boolean]
										//"[object Number]"
										//"[object String]"
										//"[object Object]"
										//"[object Function]"
										//"[object Undefined]"
										//"[object Null]"
										//"[object RegExp]"
										//"[object Boolean]"
......
  • 24
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
JavaScript,有七基本数据类型和一复杂数据类型。 1. 基本数据类型: - number:数字类型,包括整数和浮点数 - string:字符串类型 - boolean:布尔类型,true或false - undefined:未定义类型 - null:空类型 - symbol:符号类型,ES6新增 - bigint:大整数类型,ES10新增 2. 复杂数据类型: - object:对象类型,包括数组、函数、正则表达式等 检测数据类型方法: 1. typeof运算符 typeof是JavaScript的一元运算符,可以返回一个值的数据类型。例如: ```javascript typeof 123; // "number" typeof "hello"; // "string" typeof true; // "boolean" typeof undefined; // "undefined" typeof null; // "object" typeof Symbol(); // "symbol" typeof 100n; // "bigint" ``` 需要注意的是,typeof null返回的是"object",这是一个历史遗留问题。 2. instanceof运算符 instanceof运算符用于检测一个对象是否属于某个类或构造函数的实例。例如: ```javascript const arr = [1, 2, 3]; arr instanceof Array; // true const fn = function() {}; fn instanceof Function; // true ``` 需要注意的是,instanceof只能用于检测对象类型,不能检测基本数据类型。 3. Object.prototype.toString方法 Object.prototype.toString方法可以返回一个值的完整数据类型。例如: ```javascript Object.prototype.toString.call(123); // "[object Number]" Object.prototype.toString.call("hello"); // "[object String]" Object.prototype.toString.call(true); // "[object Boolean]" Object.prototype.toString.call(undefined); // "[object Undefined]" Object.prototype.toString.call(null); // "[object Null]" Object.prototype.toString.call(Symbol()); // "[object Symbol]" Object.prototype.toString.call(100n); // "[object BigInt]" ``` 需要注意的是,null和undefined没有自己的构造函数,所以通过Object.prototype.toString方法检测它们的类型需要特殊处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燕穗子博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值