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是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的 ...
随机推荐
- 使用Visual Studio2019 开启Openmp的方法
调试-->属性-->C/C++-->所有选项-->Openmp支持改为 是(可以使用下拉菜单) 严重性 代码 说明 项目 文件 行 禁止显示状态 禁止显示状态 错误 C2338 ...
- vue网络不好时不间断请求
配置默认参数 const { apiConfig: { timeout, retry, retryDelay } } = config; if(timeout) axios.defaults.time ...
- 判断Actiivty是否已经被销毁
一般会遇到这样的情况:在一个Activity中启动一个异步任务,异步任务中需要返回值,然后被Activity使用,但是当异步任务还未结束时,按下home键,如果这个时候系统内存比较紧张,这个Activ ...
- B站视频下载
借助Chrome插件 bilibili哔哩哔哩下载助手 在谷歌应用商城下载安装后在在浏览器右上角显示如下图标 打开想要下载的视频,网页右下角会有如下图标,点击该图标 点击下面的合并下载按钮即可 htt ...
- python命令行获取参数
python命令行获取参数 import sys # python获取参数 input_file = sys.argv[1] output_file = sys.argv[2] print(input ...
- BootStrap【三、组件】
特有标签属性 role 用于浏览器识别 aria-label 用于浏览器识别 tabIndex 用于浏览器识别 data- 自定义数据属性 图标 直接引用官方图标库中的class 官方图标库 Demo ...
- 【JAVA各版本特性】JAVA 1.0 - JAVA 12
make JDK Version 1.01996-01-23 Oak(橡树) 初代版本,伟大的一个里程碑,但是是纯解释运行,使用外挂JIT,性能比较差,运行速度慢. JDK Version 1.119 ...
- [Educational Codeforces Round 63 ] D. Beautiful Array (思维+DP)
Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array time limit per test 2 seconds ...
- import this: python原则
>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is ...
- MyBatis-12-动态SQL
12.动态SQL 什么事动态SQL:动态SQL就是指根据不同的条件生成不同的SQL语句 利用动态SQL这一特性可以彻底摆脱这种痛苦 动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似 ...