JavaScript各变量类型的判断方法

我们很容易被漂亮的代码吸引,也不知不觉的在自己的代码库中加入这些。却没有冷静的想过它们的优劣。这不,我就收集了一系列形如 "是否为……?" 的判断的boolean函数。

isNull: function(a){
	return a === null;
},
isUndefined: function(a){
	return a === undefined;
},
isNumber: function(a){
	return typeof a === ‘number‘;
},
isString: function(a){
	return typeof a === ‘string‘;
},
isBoolean: function(a){
	return typeof a === ‘boolean‘;
},
isPrimitive: function(b){
	var a = typeof b;
	return !!(b === undefined || b === null || a == ‘boolean‘ || a == ‘number‘ || a == ‘string‘);
},
isArray: function(a){
	return proto_obj.toString.call(a) === ‘[object Array]‘;
},
isFunction: function(a){
	return proto_obj.toString.call(a) === ‘[object Function]‘;
},
isPlainObject: function(o){
	if (!o || o === win || o === doc || o === doc.body) {
		return false;
	}
	return ‘isPrototypeOf‘ in o && proto_obj.toString.call(o) === ‘[object Object]‘;
},
isWindow: function(o){
	return o && typeof o === ‘object‘ && ‘setInterval‘ in o;
},
isEmptyObject: function(o){
    for(var a in o) {
	return false;
    }
    return true;
}

以上isXX系列中,isUndefined在类库中用的最多。如判断是否传入了某个参数,判断对象是否拥有某个属性等等。但这个函数是不必存在,我已将其移除。理由如下

  1. isUndefined 与 使用全等(===)或typeof 多了一层函数调用。很明显多一层函数调用比直接使用原生的运算符效率会低(虽然有些微不足道),但如果isUndefined调用次数很多如上万次还是很 明显的。我曾经在邮箱框架中加入了该函数,调用次数有4000多次,从性能分析工具看占用了近1%的时间。仅仅一个判断占1%的调用时间还是很可怕的。当 然,邮箱框架内的isUndefined处在多层闭包的顶层,访问其也会占用较多时间。如果这一条还不足以让你放弃isUndefined,请看下面。
  2. 函数从一定程度上是对一些代码的封装,抽象。是组织良好代码的方式之一,且有利于降低代码的复杂性。但isNull/isUndefined/isBoolean/isNumber/isString函数内仅有一句,抽象层次很低。因此完全不必封装而提取出一个函数。塔河县臧清机械
  3. isUndefined(a) 与 a === undefined相比并不会节省几个字节(呵,你可以命名的更短但损失了可读性)。

综上,我去掉了类库中对基本类型判断的isNull/isUndefined/isBoolean/isNumber/isString,需要用到这些判断的时候直接使用typeof运算符等。

时间: 2024-10-07 23:56:30

JavaScript各变量类型的判断方法的相关文章

javascript中对变量类型的判断

本文正式地址:http://www.xiabingbao.com/javascript/2015/07/04/javascript-type 在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null, Boolean, Number和String:复杂数据类型是Object,Object中还细分了很多具体的类型,比如:Array, Function, Date等等.今天我们就来探讨一下,使用什么方法判断一个出一个变量的类型. 在讲解各种方法之

JS 中对变量类型的判断

总结:1. 一般简单的使用 typeof 或 instanceof 检测(这两种检测的不完全准确)          2. 完全准确的使用 原生js中的 Object.prototype.toString.call  或 jquery中的 $.type 检测 在 JS 中,有 5 种基本数据类型和 1 种复杂数据类型,基本数据类型有:Undefined, Null, Boolean, Number和String:复杂数据类型是Object,Object中还细分了很多具体的类型,比如:Array,

javascript四种类型识别的方法

× 目录 [1]typeof [2]instanceof [3]constructor[4]toString 前面的话 javascript有复杂的类型系统,类型识别则是基本的功能.javascript总共提供了四种类型识别的方法,本文将对这四种方法进行详细说明 typeof运算符 typeof是一元运算符,放在单个操作数的前面,返回值为表示操作数类型的首字母小写的字符串 [注意]typeof运算符后面带不带圆括号都可以 console.log(typeof 'a');//'string' co

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中变量类型的重新理解

<JavaScript启示录>这本书中提出:JavaScript中,对象为“王”(JavaScript里的几乎所有东西都是对象或者用起来像对象). 飞燕草对JavaScript最深刻的理解--也是这么久以来最有收获的一个认识:JavaScript的值有两种--原始值和对象(原始值的集合)组成.再直接一点,全部都可以理解为对象,原始值虽然不是对象,但是原始值拥有等效包装器对象,按照这么说的话,在JavaScript中真的可以说是对象为“王”. 一:原始值(或简单值) 1.原始值有5种:5(num

【JavaScript】Number类型格式化字符串方法toFixed()、toExponential()、toPrecision()

toFixed()方法会按照指定的小数位返回数值的字符串表示 var num = 10; console.log(num.toFixed(2)); //"10.00" // 给 toFixed()方法传入了数值 2,显示2位小数 var num = 10.005; console.log(num.toFixed(2)); //"10.01" // 如果数值本身包含的小数位比指定的还多,那么接近指定的最大小数位的值就会舍入 toExponential()方法返回以指数

JavaScript - 数值类型的判断与常用转换方式

主要参考: isNaN() - JavaScript | MDN Number.isNaN() - JavaScript | MDN parseInt() - JavaScript | MDN parseFloat() - JavaScript | MDN 数值类型的判断方法isNaN()和Number.isNaN() 可接受任意参数,用来判断其参数是否为NaN(not a number) 由于把NaN与任何值(包括其自身)相比得到的结果都是false,因此无法通过==或===运算符来判断某个值

初窥Python(四)——三种方法判断python变量类型

python 是动态语言,定义变量时不用指定变量类型,在代码执行过程中,会根据变量的值确定变量类型.python 中常用的变量类型有 int  float  long  bool  str  list  tuple set dict 等,常用的变量类型的有 types 库及内置的 type(object) 和 isinstance(object,class-or-type-or-tuple) 方法,下面分别来看一下如何通过这些方法进行变量类型的判断. 1.使用types库结合type(objec

如何判断c语言的变量类型

变量三要素: 一个变量有三个基本的要素,变量的名称,变量的类型,变量的值.所以int a = 10; 变量名为a,变量的存储类型为int型,变量的值为10. 变量还有一些属性如作用范围和存储类型. 变量作用范围和存储类型 作用范围有局部变量和全局变量.局部只在特定范围内起作用.全部变量在整个程序运行期间起作用. 存储类型有auto(自动),static(静态),register(寄存器变量) 自动变量auto默认省略,int a = 10; 和 auto int a = 10;是一样的.自动变量