JavaScript判断数据类型的4中方法
一: typeof
typeof 是一种运算符,它的值有如下几种(number、boolean、string、undefined、null、function、object、symbol)
console.log(typeof 1); // number
console.log(typeof 1.232); // number
console.log(typeof 111111111111111111111111111111); // number
console.log(typeof NaN); // number console.log(typeof true); // boolean
console.log(typeof false); // boolean console.log(typeof ''); // string
console.log(typeof 'a'); // string
console.log(typeof 'hello'); // string
console.log(typeof "world!"); // string
console.log(typeof String('你好')); // string console.log(typeof undefined); // undefined
console.log(typeof null); // object console.log(typeof {}); // object
console.log(typeof {name: 'Tom', age: 23}); // object console.log(typeof []); // object
console.log(typeof [1, 2, 3]); // object
console.log(typeof function say(){}); // function
console.log(typeof function Person(name, age) {
this.name = name;
this.age = age;
this.say = function () {
console.log('hello, my name is ' + this.name + ', and i am ' + this.age + ' years old.');
};
}); // function console.log(typeof Symbol); // function
console.log(typeof Symbol('name')); // symbol
console.log(typeof new Set()); // object
console.log(typeof new Map()); // object
console.log(typeof new WeakSet()); // object
console.log(typeof new WeakMap()); // object
function Person(name, age) {
this.name = name;
this.age = age;
} let p = new Person('Tom', 23);
console.log(typeof p); // object
从上面的结果可以看出,typeof 运算符只能判断基本类型number、boolean、string、undefined、symbol和函数类型function,其他的如null、数组、字面量对象、构造函数创建的对象都判断为object,无法判断出具体的类型。
二: instanceof 运算符
console.log(1 instanceof Number); // false
console.log(1.232 instanceof Number); // false
console.log(111111111111111111111111111111 instanceof Number); // false
//console.log(NaN instanceof NaN); // TypeError: Right-hand side of 'instanceof' is not an object
console.log(NaN instanceof Number); // false
console.log('1================================='); console.log(true instanceof Boolean); // false
console.log(false instanceof Boolean); // false
console.log('2================================='); console.log('' instanceof String); // false
console.log('a' instanceof String); // false
console.log('hello' instanceof String); // false
console.log("world!" instanceof String); // false
console.log(String('你好') instanceof String); // false
console.log('3================================='); // console.log(undefined instanceof undefined); // TypeError: Right-hand side of 'instanceof' is not an object
console.log(undefined instanceof Number); // false
console.log(undefined instanceof Object); // false
// console.log(null instanceof null); // TypeError: Right-hand side of 'instanceof' is not an object
console.log(null instanceof Object); // false
console.log('4================================='); console.log({} instanceof Object); // true
console.log({name: 'Tom', age: 23} instanceof Object); // true
console.log('5================================='); console.log([] instanceof Array); // true
console.log([1, 2, 3] instanceof Array); // true
console.log(new Array(4) instanceof Array); // true
console.log('6================================='); console.log(function say(){} instanceof Function); // true
console.log(function Person(name, age) {
this.name = name;
this.age = age;
this.say = function () {
console.log('hello, my name is ' + this.name + ', and i am ' + this.age + ' years old.');
};
} instanceof Function); // true
console.log(Symbol instanceof Function); // true
console.log('7================================='); console.log(Symbol('name') instanceof Symbol); // false
console.log(new Set() instanceof Set); // true
console.log(new Map() instanceof Map); // true
console.log(new WeakSet() instanceof WeakSet); // true
console.log(new WeakMap() instanceof WeakMap); // true
console.log(new Date() instanceof Date); // true
console.log(new RegExp(/he/) instanceof RegExp); // true
function Person(name, age) {
this.name = name;
this.age = age;
} let p = new Person('Tom', 23);
console.log(p instanceof Person); // true
从测试结果可以得出,instanceof 运算符的右边必须为对象,而且 instanceof 运算符只能判断某个构造函数的原型对象是否存在于被检测对象的原型链上(即被检测对象是否是某个够早函数的实例)。
三: 使用 Object.prototype.toString.call(被检测值)
这个方法获取的是对象的 Class 属性值,返回值是固定格式的:[object Class属性]
function myTypeof(obj) {
let s = Object.prototype.toString.call(obj);
return s.match(/\[object\s(\w*)\]/)[1].toLowerCase();
}
console.log(myTypeof(1)); // number
console.log(myTypeof(1.232)); // number
console.log(myTypeof(111111111111111111111111111111)); // number
console.log(myTypeof(NaN)); // number
console.log(myTypeof(true)); // boolean
console.log(myTypeof(false)); // boolean
console.log(myTypeof('')); // string
console.log(myTypeof('a')); // string
console.log(myTypeof('hello')); // string
console.log(myTypeof("world!")); // string
console.log(myTypeof(String('你好'))); // string
console.log(myTypeof(undefined)); // undefined
console.log(myTypeof(null)); // null
console.log(myTypeof({})); // object
console.log(myTypeof({name: 'Tom', age: 23})); // object
console.log(myTypeof([])); // array
console.log(myTypeof([1, 2, 3])); // array
console.log(myTypeof(new Array(4))); // array
console.log(myTypeof(function say(){})); // function
console.log(myTypeof(function Person(name, age) {
this.name = name;
this.age = age;
this.say = function () {
console.log('hello, my name is ' + this.name + ', and i am ' + this.age + ' years old.');
};
})); // function
console.log(myTypeof(Symbol)); // function
console.log(myTypeof(Symbol('name'))); // symbol
console.log(myTypeof(new Set())); // set
console.log(myTypeof(new Map())); // map
console.log(myTypeof(new WeakSet())); // weakset
console.log(myTypeof(new WeakMap())); // weakmap
console.log(myTypeof(new Date())); // date
console.log(myTypeof(new RegExp(/he/))); // regexp
function Person(name, age) {
this.name = name;
this.age = age;
}
let p = new Person('Tom', 23);
console.log(myTypeof(p)); // object
从检测结果可以得知,次方法可以检测基本类型,函数,数组,js原生对象类型,但是无法检测自定义的对象类型。
四:使用 constructor 属性
constructor 属性返回创建该对象的构造函数的引用。利用此特性我们可以判断对象的类型,其中 null 和 undefined 由于没有构造函数,所以 null 和 undefined 需要特殊处理。
function myTypeof(obj) {
return obj === undefined ? 'undefined' :
(obj === null ? 'null' :
obj.constructor.toString().match(/function\s*([^(]*)/)[1].toLowerCase());
}
console.log(myTypeof(1)); // number
console.log(myTypeof(1.232)); // number
console.log(myTypeof(111111111111111111111111111111)); // number
console.log(myTypeof(NaN)); // number
console.log(myTypeof(true)); // boolean
console.log(myTypeof(false)); // boolean
console.log(myTypeof('')); // string
console.log(myTypeof('a')); // string
console.log(myTypeof('hello')); // string
console.log(myTypeof("world!")); // string
console.log(myTypeof(String('你好'))); // string
console.log(myTypeof(undefined)); // undefined
console.log(myTypeof(null)); // null
console.log(myTypeof({})); // object
console.log(myTypeof({name: 'Tom', age: 23})); // object
console.log(myTypeof([])); // array
console.log(myTypeof([1, 2, 3])); // array
console.log(myTypeof(new Array(4))); // array
console.log(myTypeof(function say(){})); // function
console.log(myTypeof(function Person(name, age) {
this.name = name;
this.age = age;
this.say = function () {
console.log('hello, my name is ' + this.name + ', and i am ' + this.age + ' years old.');
};
})); // function
console.log(myTypeof(Symbol)); // function
console.log(myTypeof(Symbol('name'))); // symbol
console.log(myTypeof(new Set())); // set
console.log(myTypeof(new Map())); // map
console.log(myTypeof(new WeakSet())); // weakset
console.log(myTypeof(new WeakMap())); // weakmap
console.log(myTypeof(new Date())); // date
console.log(myTypeof(new RegExp(/he/))); // regexp
function Person(name, age) {
this.name = name;
this.age = age;
}
let p = new Person('Tom', 23);
console.log(myTypeof(p)); // person
从检测结果得出,利用 constructor 属性能判断出除 null 和 undefined 之外的所有类型。
JavaScript判断数据类型的4中方法的更多相关文章
- javascript 判断数据类型的几种方法
javascript 判断数据类型的几种方法一.typeof 直接返回数据类型字段,但是无法判断数组.null.对象 typeof 1 "number" typeof NaN &q ...
- js中判断数据类型的4中方法
注意: js中数据类型有7种(number, boolean, string, null, undefined, object, Symbol(es6新增)) 原始数据类型: number, stri ...
- js中判断数据类型的四种方法总结
js中判断数据类型的四种方法 前言 在js中,我们经常需要判断数据的类型,那么哪些方法可以用来判断数据的类型呢?哪种方法判断数据类型最准确呢? 我们来一个个分析: 1.typeof typeof是一个 ...
- JavaScript判断数据类型总结
最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断网页特效,在此做一个总结吧! 一.JS中的数据类型 1.数值型(Number):包 ...
- Javascript判断数据类型的五种方式及其特殊性
Javascript判断数据类型的五种方式及区别 @ 目录 typeof instanceof Object.prototype.toString isArray iisNaN ----------- ...
- javascript判断数据类型的各种方法
一.Object.prototype.toString方法(摘自http://javascript.ruanyifeng.com/stdlib/object.html#toc3) //不同数据类型的O ...
- JavaScript判断数据类型
JavaScript中判断数据类型的方式有三种: 1.typeof typeof 1; //"number" typeof "abc"; //" ...
- js判断数据类型的四种方法
1.typeof typeof是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型.返回的结果用该类型的字符串(全小写字母)形式表示,包括number,string,boolean,und ...
- [转]js判断数据类型的四种方法
原文地址:https://www.cnblogs.com/crackedlove/p/10331317.html 1.typeof typeof是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的 ...
随机推荐
- 【ES6 】ES6 解构赋值--函数参数解构赋值
函数的参数也可以使用解构赋值. function add([x, y]){ return x + y; } add([1, 2]); 上面代码中,函数add的参数表面上是一个数组,但在传入参数的那一刻 ...
- spring利用xml配置定时任务
在开发中会经常遇到做定时任务的需求,例如日志定时清理与处理,数据信息定时同步等需求. 1.在spring中利用xml配置定时任务,如下 <!-- ftpiptv信息同步接口定时任务配置--> ...
- JS实现旋转的魔方
js <script> window.onload = function () { let cube = document.querySelector('.cube') let timer ...
- sql简易教程
讲干货,不啰嗦,本教程主要基于Mysql数据库,讲解sql的基本使用. 数据库主要包括增.删.改.查等基本操作,以下为设计到的常用的sql语句: 一.查 1.select 语法查询 SELECT co ...
- 利用axis调用webservice接口
一.首先把wsdl文件放入eclipse中某个项目中的src目录下 二.右键弹出webservice,然后点击webservice菜单,选中genernator client ,选择axis生成Jav ...
- 【坑】Mybatis原始获取配置方式,获取配置失败
错误环境: mysql版本:6.0.6 mybatis 3.4.1 idea 2017.1.2 maven 3.5.0 错误描述: 配置经路径见图1,classpath是java文件夹 获取配置的代码 ...
- 多容器共享volume
目标: pod中 包含两个容器: tomcat和busybox, 设置volume:app-logs, 用于tomcat向其中写日志, busybox读日志文件 apiVersion: apps/v1 ...
- 【收藏】linux快速查找文件的技巧
有时候,我们需要在系统中查找文件,Linux有一个非常优秀的搜寻系统. 一般提到搜寻文件的时候,很多人第一反应是find命令,但其实find不是常用的,因为速度慢,而且毁硬盘.一般我们都先用where ...
- Collection 和 Collections 有什么区别?(未完成)
Collection 和 Collections 有什么区别?(未完成)
- libusb_bulk_transfer 异步同步
同步方式 libusb_bulk_transfer(devh, ep_bulk, buf, CAM_BUF_SZ, &len, timeout); 进入libusb研究,发现libusb是采用 ...