【javaScript经验】javaScript类型判断

原生JS提供了typeof操作符来判断类型,判断基本类型时没问题,但当判断复杂类型时便有点不尽人意。

基本类型有哪些?

众说纷纭,争议的是null和function算不算基本类型?个人觉得能被typeof出正确类型的都是基本类型,来看以下代码:

/*基本类型*/
alert(typeof nudefined);//输出 "nudefined"
alert(typeof function(){});//输出 "function"
alert(typeof "a");//输出 "string"
alert(typeof 1);//输出 "number"
alert(typeof true);//输出 "boolean"

/*复杂类型*/
alert(typeof []);//输出 "object"
alert(typeof {});//输出 "object"
alert(typeof new Date());//输出 "object"
alert(typeof new RegExp());//输出 "object"
alert(typeof null);//输出 "object"

以上用typeof都能正确输出基本类型值,而复杂类型输出的都是"object",那该怎么正确的得知复杂类型的正确类型值呢?

Object.prototype.toString.call() 来看ECMA5中的描述:

When the toString method is called, the following steps are taken:
If the this value is undefined, return “[object Undefined]“.
If the this value is null, return “[object Null]“.
Let O be the result of calling ToObject passing the this value as the argument.
Let class be the value of the [[Class]] internal property of O.
Return the String value that is the result of concatenating the three Strings “[object ", class, and "]“.

由于 JavaScript 中一切都是对象,任何都不例外,对所有值类型应用 Object.prototype.toString.call() 方法结果如下:

(小知识点:为什么讲JS中一切皆是对象,原因是你把任何类型当作对象的时候它就是对象,后台会自动把它包装成对象)

console.log(Object.prototype.toString.call(123)) //[object Number]
console.log(Object.prototype.toString.call(‘123‘)) //[object String]
console.log(Object.prototype.toString.call(undefined)) //[object Undefined]
console.log(Object.prototype.toString.call(true)) //[object Boolean]
console.log(Object.prototype.toString.call({})) //[object Object]
console.log(Object.prototype.toString.call([])) //[object Array]
console.log(Object.prototype.toString.call(function(){})) //[object Function]

所有类型都会得到不同的字符串,几乎完美。当真完美。

Object.prototype.toString.call()  可以简化成 {}.toString.call()。

时间: 2024-08-04 05:39:52

【javaScript经验】javaScript类型判断的相关文章

JavaScript 学习笔记— —类型判断

//1 判断是否为数组类型 var a=[0]; console.log(isArray(a)); function isArray(obj){ return (typeof obj=='object') && obj.constructor==Array; } console.log("2-----------------------------------") //2 判断是否为字符串类型 console.log(isString('test')); console

《饿了么大前端 Node.js 进阶教程》—Javascript 基础问题—类型判断

lodash的类型判断源码 <饿了么大前端 Node.js 进阶教程>地址:https://github.com/ElemeFE/node-interview  lodash介绍:lodash是目前很流行的JS工具库,它封装了许多JS常用到的工具方法,在阅读源码时,你会发现代码冗长:官网说这是性能优化,不管你信不信,反正我信了! (1)null 类型 function isNull(value) { return value === null; } (2)number类型 function i

JavaScript之type类型判断

通常我们判断类型是typeof 但是并不精确,只能区分类型 "number","string","undefined","boolean","object" 五种.对于数组.函数.对象来说,其关系错综复杂,使用 typeof 都会统一返回 "object" 字符串. 所以JavaScript提供了 Object,prototype.toString.call() 来判断 ,它可以给出数据

javascript数据变量类型判断(JS变量是否是数组,是否是函数的判断)

function isArray(o) { return Object.prototype.toString.apply(o) === “[object Array]”;}function isFunction(o) { return Object.prototype.toString.apply(o) === ”[object Function]“;} --JQuery  源码有....

类型判断(下)

前言 在上篇<JavaScript专题之类型判断(上)>中,我们抄袭 jQuery 写了一个 type 函数,可以检测出常见的数据类型,然而在开发中还有更加复杂的判断,比如 plainObject.空对象.Window 对象等,这一篇就让我们接着抄袭 jQuery 去看一下这些类型的判断. plainObject plainObject 来自于 jQuery,可以翻译成纯粹的对象,所谓"纯粹的对象",就是该对象是通过 "{}" 或 "new O

JavaScript类型判断

JavaScript的数据类型可以分为:标准类型和对象类型. 标准类型有:undefined Null Boolean Date Number Object 对象类型(构造器类型)有:Boolean Date Number Object Array Date Error Function RegExp 用来判断数据类型的一般有四种方式,分别是: 1.typeof 可以识别标准类型(Null除外) 不能识别对象类型(Function除外) 2.Prototype.toString() 可以识别标准

javascript类型判断方法

判断javascript中的类型,共有四种常用的方法 var a=6; var b="str"; var c=true; var arr=[]; typeof 用于基本类型的判断 1.typeof最好用于基本类型的判断,返回类型名(小写). 例外 typeof null==="object" //true typeof function(){}==="function" //true 2.typeof返回的是字符串 3.对变量执行typeof操作

【JavaScript】Object.prototype.toString.call()进行类型判断

权声明:本文为博主原创文章,未经博主允许不得转载. [javascript] view plain copy print? op = Object.prototype, ostring = op.toString, ... function isFunction(it) { return ostring.call(it) === '[object Function]'; } function isArray(it) { return ostring.call(it) === '[object A

javascript 的工具方法 --- 类型判断

Javascript中常见类型对象有: Boolean, Number, String, Function, Array, Date, RegExp, Object, Error, Symbol等等. 下面提供区分这几种类型的工具方法,前提是使用javascript,如果项目中使用了jquery或者angularjs等框架,就没必要自己再写这样的工具函数. 第一种:最笨的办法,一一列举 function isBoolean(value) {return typeof value === 'boo

JavaScript各变量类型的判断方法

我们很容易被漂亮的代码吸引,也不知不觉的在自己的代码库中加入这些.却没有冷静的想过它们的优劣.这不,我就收集了一系列形如 "是否为……?" 的判断的boolean函数. isNull: function(a){ return a === null; }, isUndefined: function(a){ return a === undefined; }, isNumber: function(a){ return typeof a === 'number'; }, isString