用来判别类型的方法有好多,整理了一下4种方法,平时用的时候,在不同情景下,还是要结合着使用的。

方法一

typeof:可以识别标准类型,除了Null;不能识别具体的对象类型,除了Function

<script>
var t = typeof(1);
console.log(t); // t==="number" var t = typeof(new Number(1))
console.log(t); // t==="object" var t = typeof("abc");
console.log(t); // t==="string" var t = typeof(new String("abc"));
console.log(t); // t==="object" var t = typeof(true);
console.log(t); // t==="boolean" var t = typeof(undefined);
console.log(t); // t==="undefined" var t = typeof(null);
console.log(t); // t==="object" var t = typeof({});
console.log(t); // t==="object" var t = typeof([]);
console.log(t); // t==="object" var t = typeof(new Date);
console.log(t); // t==="object" var t = typeof(/\d/);
console.log(t); // t==="object" var t = typeof(function(){});
console.log(t); // t==="function"
</script>

方法二

instanceof:可以识别内置对象类型,不能识别原始类型,可以识别自定义对象类型

<script>
var t = new Number(1);
console.log(1 instanceof Number); // false
console.log(1 instanceof Object); // false
console.log(t instanceof Number); // true
console.log(t instanceof Object); // true var t = new String("abc");
console.log("abc" instanceof String); // false
console.log("abc" instanceof Object); // false
console.log(t instanceof String); // true
console.log(t instanceof Object); // true console.log(true instanceof Boolean); // false
console.log(true instanceof Object); // false console.log(undefined instanceof Object); // false
console.log(undefined instanceof Undefined); // Uncaught ReferenceError: Undefined is not defined console.log(null instanceof Object); // false
console.log(null instanceof Null); // Uncaught ReferenceError: Undefined is not defined var t = new Object({});
console.log(t instanceof Object); // true
console.log({} instanceof Object); // true var t = new Array([]);
console.log(t instanceof Array); // true
console.log(t instanceof Object); // true
console.log([] instanceof Array); // true
console.log([] instanceof Object); // true var t = new Date();
console.log(t instanceof Date); // true
console.log(t instanceof Object); // true console.log(/\d/ instanceof Object); // true
console.log(/\d/ instanceof Regexp); // Uncaught ReferenceError: Undefined is not defined var t = function(){};
console.log(t instanceof Function); // true
console.log(t instanceof Object); // true
</script>

方法三:可以识别标准类型以及内置对象类型,不能识别自定义类型

    function type(obj){
return Object.prototype.toString.call(obj).slice(8,-1);
}

示例:

<script>
var t = type(1);
console.log(t); // t==="Number" var t = type(new Number(1));
console.log(t); // t==="Number" var t = type("abc");
console.log(t); // t==="String" var t = type(new String("abc"));
console.log(t); // t==="String" var t = type(true);
console.log(t); // t==="Boolean" var t = type(undefined);
console.log(t); // t==="Undefined" var t = type(null);
console.log(t); // t==="Null" var t = type({});
console.log(t); // t==="Object" var t = type([]);
console.log(t); // t==="Array" var t = type(new Date);
console.log(t); // t==="Date" var t = type(/\d/);
console.log(t); // t==="Regexp" var t = type(function(){});
console.log(t); // t==="Function" function add(){};
var f = new add();
var t = type(f);
console.log(t); // t==="Object"
</script>

方法四:可以识别所有类型:标准类型、内置对象类型、自定义对象类型

        function getConstructorName(obj){
return (obj===undefined||obj===null)?obj:(obj.constructor&&obj.constructor.toString().match(/function\s*([^(]*)/)[1]);
}

示例:

<script>
var t = getConstructorName(1);
console.log(t); // t==="Number" var t = getConstructorName(new Number(1));
console.log(t); // t==="Number" var t = getConstructorName("abc");
console.log(t); // t==="String" var t = getConstructorName(new String("abc"));
console.log(t); // t==="String" var t = getConstructorName(true);
console.log(t); // t==="Boolean" var t = getConstructorName(undefined);
console.log(t); // t==="undefined" var t = getConstructorName(null);
console.log(t); // t==="null" var t = getConstructorName({});
console.log(t); // t==="Object" var t = getConstructorName([]);
console.log(t); // t==="Array" var t = getConstructorName(new Date);
console.log(t); // t==="Date" var t = getConstructorName(/\d/);
console.log(t); // t==="Regexp" var t = getConstructorName(function(){});
console.log(t); // t==="Function" function add(){};
var f = new add();
var t = getConstructorName(f);
console.log(t); // t==="add"
</script>

Demo:

输入任意格式的年月日,均返回 Date 格式:

/*
* 输入格式:
* '2016-11-06'
* 1478401733333
* {y:2016,m:11,d:6}
* [2016,11,6]
* 返回格式:Date
*/
function toDate(param){
if (typeof(param) == 'string' ||
typeof(param) == 'number' ){
return new Date(param);
}
if (param instanceof Array){
var date = new Date(0);
date.setYear(param[0]);
date.setMonth(param[1]-1);
date.setDate(param[2]);
return date;
}
if (typeof(param) == 'object') {
var date = new Date(0);
date.setYear(param.y);
date.setMonth(param.m-1);
date.setDate(param.d);
return date;
}
return -1;
}

js学习之类型识别的更多相关文章

  1. JS中的类型识别

    JS为弱类型语言,所以类型识别对JS而言尤为重要,JS中常用的类型识别方法有4种:typeof.Object.prototype.toString.constructor和instanceof. (1 ...

  2. 关于js中的类型内容总结(类型识别)

    JS 有7种数据类型: 6种原始类型:Boollean    String   Number    Null    Underfined   Symbol 引用类型:Object 类型识别主要有以下四 ...

  3. JS学习笔记(一)基本数据类型和对象类型

    js是一种弱类型的语言,所有的变量都用var进行声明,字符串用双引号或单引号括起来,常见基本数据类型为number,string,boolean等.如 var num = 123;或var num = ...

  4. WebGL three.js学习笔记 6种类型的纹理介绍及应用

    WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...

  5. JS 学习笔记--8---Function类型

    练习使用的浏览器IE11   JS 中Function类型实际上是一种对象,每一个函数实际上都是Function类型的一个实例,每一个函数都有一些默认的属性和方法.由于函数是对象,故函数名实际上也是一 ...

  6. (C/C++学习笔记) 二十三. 运行时类型识别

    二十三. 运行时类型识别 ● 定义 运行时类型识别(Run-time Type Identification, RTTI) 通过RTTI, 程序能够使用基类的指针或引用来检查(check)这些指针或引 ...

  7. C++学习之显式类型转换与运行时类型识别RTTI

    static_cast const_cast reinterpret_cast 运行时类型识别(RTTI) dynamic_cast 哪种情况下dynamic_cast和static_cast使用的情 ...

  8. Javascript 基础学习(三)js 的原始类型和声明变量

    java的基本数据类型一共有 byte short int long float double char boolean js中定义变量使用关键字 var js的原始类型(五个) String: 字符 ...

  9. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

随机推荐

  1. 百度MIP页规范详解 —— canonical标签

    百度MIP的规范要求必须添加强制性标签canonical,不然MIP校验工具会报错: 强制性标签<link rel="/^(canonical)$/"> 缺失或错误 这 ...

  2. 数据库优化案例——————某市中心医院HIS系统

    记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...

  3. 分布式锁1 Java常用技术方案

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资 ...

  4. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  5. MVC Core 网站开发(Ninesky) 1、创建项目

    又要开一个新项目了!说来惭愧,以前的东西每次都没写完,不是不想写完,主要是我每次看到新技术出来我都想尝试一下,看到.Net Core 手又痒了,开始学MVC Core. MVC Core最吸引我的有三 ...

  6. 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...

  7. winform异步加载数据到界面

    做一个学习记录. 有两个需求: 1.点击按钮,异步加载数据,不卡顿UI. 2.把获取的数据加载到gridview上面. 对于需求1,2,代码如下: public delegate void ShowD ...

  8. [WPF] Wait for a moment.

    一.控件介绍 在 WPF 中使用的等待控件,控件包括三种,普通的等待信息提示(WaitTip),进度条提示(WaitProgress),以及主程序覆盖的模拟时钟等待窗口(WaitClock),具体效果 ...

  9. Java中,异常的处理及抛出

    首先我们需要知道什么是异常? 常通常指,你的代码可能在编译时没有错误,可是运行时会出现异常.比如常见的空指针异常.也可能是程序可能出现无法预料的异常,比如你要从一个文件读信息,可这个文件不存在,程序无 ...

  10. [bzoj2152][聪聪和可可] (点分治+概率)

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...