热门搜索 :
教你做菜
您的当前位置:首页正文

JavaScript中判断整字类型最简洁的实现方法

2023-12-01 来源:海亿美食网

我们知道JavaScript提供了typeof运算符,因此最容易想到的是用typeof来判断是否是number类型。

代码如下:

function isNumber(obj) { return typeof obj === 'number'}

这个函数对于整数和浮点数都没有问题,但对于NaN值也返回true这让人感到不爽,毕竟用isNumber判断通过后谁也不会用NaN去做算术运算。

那改进一下,用Object.prototype.toString试试。

代码如下:

function isNumber(obj) { return Object.prototype.toString.call(obj) === '[object Number]' }

这次,如果传入的是非数字(NaN或者可转成NaN的值)就返回false了

代码如下:

function isNumber(obj) { return typeof obj === 'number' && !isNaN(obj)}isNumber(1) // trueisNumber(1.2) // trueisNumber(NaN) // falseisNumber( parseInt('a') ) // false

嗯,这个isNumber不错了,但还有一个等价的,用isFinite来判断

代码如下:

function isNumber(obj) { return typeof obj === 'number' && isFinite(obj) }

到现在,最短代码的数字判断是此文提到的第三个使用isNaN函数的。下面隆重推出世界上最短的数字判断网页代码

代码如下:

function isNumber(obj) { return obj === +obj}

对于整数,浮点数返回true,对于NaN或可转成NaN的值返回false。

没看懂是吗? 咕~~(╯﹏╰)

园友说这还不是世界上最短判断数字代码,参数obj可以改成一个字符的。(⊙o⊙)你是对的。

举一反三,类似的利用JS动态语言特性(运算符运算时内部自动类型转换)最短的判断还有。

代码如下:

// 判断字符串function isString(obj) { return obj === obj+''}// 判断布尔类型function isBoolean(obj) { return obj === !!obj}

小编还为您整理了以下内容,可能对您也有帮助:

JS判断数据类型的方法有哪些

JS判断数据类型的方法有:typeof方法用于返回该类型的字符串形式,instanceof方法用来判断原型,constructor方法以及Object.prototype.toString 方法

在JavaScript中有多种方法可以帮助我们去判断数据类型,接下来将在文章中为大家详细介绍这些方法,具有一定的参考作用希望对大家有所帮助。

【推荐课程:JavaScript教程】

方法一:typeof方法

typeof 是一个操作符,右侧是一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串的形式表示,包括:number、boolean、symbol、string、object、undefined、function 等。

返回值分以下几种类型:

对于基本类型。除了null值返回object以外,其他均返回正确的结果

对于引用值来说,除了function返回function类型,其他都返回object类型

例:

<script type="text/javascript">

var a = "string";

console.log(a); //string

var a = 1;

console.log(typeof a); //number

var a = false;

console.log(typeof a); //boolean

var a;

console.log(typeof a); //undfined

var a = null;

console.log(typeof a); //object

var a = document;

console.log(typeof a); //object

var a = [];

console.log(a); //[]

var a = function() {};

console.log(typeof a) //function

</script>效果图:

方法二:instanceof方法

instanceof 是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。 在这里需要特别注意的是:instanceof 检测的是原型。

<script type="text/javascript">

var a=[];

console.log(a instanceof Array)

</script>返回的结果:true

方法三:constructor方法

当一个函数被定义时,JS引擎会为它添加 prototype 原型,然后再在 prototype上添加一个 constructor 属性,并让其指向该函数的引用。

当执行 var f = new F() 时,F被当成了构造函数,f 是F的实例对象,此时 F 原型上的 constructor 传递到了 f 上,因此 f.constructor == F

方法四:Object.prototype.toString 方法

toString是Object原型对象上的一个方法,该方法默认返回其调用者的具体类型,更严格的讲,是 toString运行时this指向的对象类型, 返回的类型格式为[object,xxx],xxx是具体的数据类型,其中包括:String,Number,Boolean,Undefined,Null,Function,Date,Array,RegExp,Error,HTMLDocument等等都可以通过这个方法获取到。

console.log(Object.prototype.toString.call(num));

console.log(Object.prototype.toString.call('')) ;

console.log(Object.prototype.toString.call(1)) ;

console.log(Object.prototype.toString.call(true)) ;

console.log(Object.prototype.toString.call(null)) ;

console.log(Object.prototype.toString.call(new Function()) );

console.log(Object.prototype.toString.call(new Date())) ;

console.log(Object.prototype.toString.call([])) ;

console.log(Object.prototype.toString.call(document)) ;

console.log(Object.prototype.toString.call(window) );效果图:

总结:

javascript中如何判断类型汇总



前言

我们在写封装的插件或者函数时,常常用到JS的数据类型判断,典型的案例就是深度拷贝函数用到数据类型判断,这个知识点在面试的时候也是经常考到的一个问题。本文就来给大家总结了下javascript中判断类型的相关资料,下面话不多说了,来一起看看详细的介绍吧

String


一个字符串始终是一个字符串,所以这一块是很容易。除非使用new(new String)调用,否则typeof将返回“object”。所以也要包含那些可以使用的字符串instanceof。


// Returns if a value is a string
function isString (value) {
return typeof value === 'string' || value instanceof String;
}
Number


From typeof more things than just an ordinary number will return "number" like NaN and Infinity. To know if a value really is a number the function isFinite is also required.


从类型更多的东西,而不仅仅是普通的数字将返回像NaN和无限的“数字”。要知道值是否真的是数字,函数isFinite也是必需的。


// Returns if a value is really a number
function isNumber (value) {
return typeof value === 'number' && isFinite(value);
}
Array


在javascript 数组中不是像java和其他语言中那样的真正数组。它们实际上是对象,因此typeof将为它们返回“对象”。要知道某些东西是否真的是一个数组,它的构造函数可以与Array进行比较。


// Returns if a value is an array
function isArray (value) {
return value && typeof value === 'object' && value.constructor === Array;
}
// ES5 actually has a method for this (ie9+)
Array.isArray(value);
Function


// Returns if a value is a function
function isFunction (value) {
return typeof value === 'function';
}
Object


很多东西都是javascript中的对象。要知道值是否是可以具有属性并循环的对象,可以将其构造函数与Object进行比较。它不适用于从类创建的对象,因此可以使用instanceof运算符。


// Returns if a value is an object
function isObject (value) {
return value && typeof value === 'object' && value.constructor === Object;
}
Null & undefined


大多数情况下,您不需要显式检查null和undefined,因为它们都是假值。然而,要做到这一点,下面的功能就可以了。


// Returns if a value is null
function isNull (value) {
return value === null;
}
// Returns if a value is undefined
function isUndefined (value) {
return typeof value === 'undefined';
}
Boolean


对于布尔值, typeof就足够了,因为它返回true和false的“boolean”。


// Returns if a value is a boolean
function isBoolean (value) {
return typeof value === 'boolean';
}
RegExp


RegExp是对象,因此唯一需要检查的是构造函数是否为RegExp。


// Returns if a value is a regexp
function isRegExp (value) {
return value && typeof value === 'object' && value.constructor === RegExp;
}
Error


javascript中的错误与许多其他编程语言中的“异常”相同。它们有几种不同的形式,例如Error,TypeError和RangeError。一个instanceof语句对他们来说已经足够了,但我们还要确保我们还检查错误所具有的“message”属性。


// Returns if value is an error object
function isError (value) {
return value instanceof Error && typeof value.message !== 'undefined';
}
Date


日期实际上不是javascript中的数据类型。但要知道是否有某个Date对象,可以使用instanceof进行检查。


// Returns if value is a date object
function isDate (value) {
return value instanceof Date;
}
Symbol


// Returns if a Symbol
function isSymbol (value) {
return typeof value === 'symbol';
}
总结

javascript中如何判断类型汇总



前言

我们在写封装的插件或者函数时,常常用到JS的数据类型判断,典型的案例就是深度拷贝函数用到数据类型判断,这个知识点在面试的时候也是经常考到的一个问题。本文就来给大家总结了下javascript中判断类型的相关资料,下面话不多说了,来一起看看详细的介绍吧

String


一个字符串始终是一个字符串,所以这一块是很容易。除非使用new(new String)调用,否则typeof将返回“object”。所以也要包含那些可以使用的字符串instanceof。


// Returns if a value is a string
function isString (value) {
return typeof value === 'string' || value instanceof String;
}
Number


From typeof more things than just an ordinary number will return "number" like NaN and Infinity. To know if a value really is a number the function isFinite is also required.


从类型更多的东西,而不仅仅是普通的数字将返回像NaN和无限的“数字”。要知道值是否真的是数字,函数isFinite也是必需的。


// Returns if a value is really a number
function isNumber (value) {
return typeof value === 'number' && isFinite(value);
}
Array


在javascript 数组中不是像java和其他语言中那样的真正数组。它们实际上是对象,因此typeof将为它们返回“对象”。要知道某些东西是否真的是一个数组,它的构造函数可以与Array进行比较。


// Returns if a value is an array
function isArray (value) {
return value && typeof value === 'object' && value.constructor === Array;
}
// ES5 actually has a method for this (ie9+)
Array.isArray(value);
Function


// Returns if a value is a function
function isFunction (value) {
return typeof value === 'function';
}
Object


很多东西都是javascript中的对象。要知道值是否是可以具有属性并循环的对象,可以将其构造函数与Object进行比较。它不适用于从类创建的对象,因此可以使用instanceof运算符。


// Returns if a value is an object
function isObject (value) {
return value && typeof value === 'object' && value.constructor === Object;
}
Null & undefined


大多数情况下,您不需要显式检查null和undefined,因为它们都是假值。然而,要做到这一点,下面的功能就可以了。


// Returns if a value is null
function isNull (value) {
return value === null;
}
// Returns if a value is undefined
function isUndefined (value) {
return typeof value === 'undefined';
}
Boolean


对于布尔值, typeof就足够了,因为它返回true和false的“boolean”。


// Returns if a value is a boolean
function isBoolean (value) {
return typeof value === 'boolean';
}
RegExp


RegExp是对象,因此唯一需要检查的是构造函数是否为RegExp。


// Returns if a value is a regexp
function isRegExp (value) {
return value && typeof value === 'object' && value.constructor === RegExp;
}
Error


javascript中的错误与许多其他编程语言中的“异常”相同。它们有几种不同的形式,例如Error,TypeError和RangeError。一个instanceof语句对他们来说已经足够了,但我们还要确保我们还检查错误所具有的“message”属性。


// Returns if value is an error object
function isError (value) {
return value instanceof Error && typeof value.message !== 'undefined';
}
Date


日期实际上不是javascript中的数据类型。但要知道是否有某个Date对象,可以使用instanceof进行检查。


// Returns if value is a date object
function isDate (value) {
return value instanceof Date;
}
Symbol


// Returns if a Symbol
function isSymbol (value) {
return typeof value === 'symbol';
}
总结

JavaScript中如何判断一个值的类型

我们知道在js中有一个运算符可以帮助我们判断一个值的类型,它就是typeof运算符。

console.log(typeof 123); //number

console.log(typeof '123'); //string

console.log(typeof true); //boolean

console.log(typeof undefined); //undefined

console.log(typeof null); //object

console.log(typeof []); //object

console.log(typeof {}); //object

console.log(typeof function() {}); //function

我们从以上结果可以看出typeof的不足之处,它对于数值、字符串、布尔值分别返回number、string、boolean,函数返回function,undefined返回undefined,除此以外,其他情况都返回object。

所以如果返回值为object,我们是无法得知值的类型到底是数组还是对象或者其他值。为了准确得到每个值的类型,我们必须使用js中另一个运算符instanceof。下面简单的说一下instanceof的用法。

instanceof运算符返回一个布尔值,表示指定对象是否为某个构造函数的实例。

instanceof运算符的左边是实例对象,右边是构造函数。它会检查右边构造函数的ptototype属性,是否在左边对象的原型链上。

var b = [];

b instanceof Array //true

b instanceof Object //true

注意,instanceof运算符只能用于对象,不适用原始类型的值。

所以我们可以结合typeof和instanceof运算符的特性,来对一个值的类型做出较为准确的判断。

//得到一个值的类型

function getValueType(value) {

var type = '';

if (typeof value != 'object') {

type = typeof value;

} else {

if (value instanceof Array) {

type = 'array';

} else {

if (value instanceof Object) {

type = 'object';

} else {

type = 'null';

}

}

}

return type;

}

getValueType(123); //number

getValueType('123'); //string

getValueType(true); //boolean

getValueType(undefined); //undefined

getValueType(null); //null

getValueType([]); //array

getValueType({}); //object

getValueType(function(){}); //function

总结

以上所述是小编给大家介绍的JavaScript中如何判断一个值的类型,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!javascript中怎么做对象的类型判断_基础知识

最近在翻看John Resig的大作《Pro JavaScript Techniques》,里面讲到了如何做javascript的类型判断的问题。文中介绍了两种方式,一种是使用typeof,另一种是使用constructor。略感遗憾的是作为jquery的作者,他尽然没有介绍jquery使用的类型判断方式。不过没有关系,我在这里给大家一起总结下。

在这里我首先像大家推荐一个很好用的在线编辑器:http://jsfiddle.net/。他提供了jquery、mootools、prototype和YUI三个主流js框架的各个版本,当你需要编写简单的js测试程序的时候可以直接使用它。省去了打开编辑软件,创建各种类型文件的步骤。编辑代码之后,点击[Run]按钮,一切搞定。

1.typeof

typeof是我们在做类型判断时最常用的方法,他的优点就是简单、好记,缺点是不能很好的判断object、null、array、regexp和自定义对象。

下面是我的测试代码:

代码如下:

var str='str';

var arr=['1','2'];

var num=1;

var bool=true;

var obj={name:'test'};

var nullObj=null;

var undefinedObj=undefined;

var reg=/reg/;

function fn(){

alert('this is a function');

}

function User(name){

this.name=name;

}

var user=new User('user');

console.log(typeof str);

console.log(typeof arr);

console.log(typeof num);

console.log(typeof bool);

console.log(typeof obj);

console.log(typeof nullObj);

console.log(typeof undefinedObj);

console.log(typeof reg);

console.log(typeof fn);

console.log(typeof user);

代码运行结果:

2.constructor

现在介绍一种不常使用的方法,对象构造器constructor。他的优点是支持大部分对象类型的判断,特别是对自定义对象的判断;缺点是不能在null和undefined上使用。

测试代码和之前的差不多,区别就是使用XXX.constructor代替了typeof。

代码如下:

var str='str';

var arr=['1','2'];

var num=1;

var bool=true;

var obj={name:'test'};

var nullObj=null;

var undefinedObj=undefined;

var reg=/reg/;

function fn(){

alert('this is a function');

}

function User(name){

this.name=name;

}

var user=new User('user');

console.log(str.constructor);

console.log(arr.constructor);

console.log(num.constructor);

console.log(bool.constructor);

console.log(obj.constructor);

console.log(reg.constructor);

console.log(fn.constructor);

console.log(user.constructor);

console.log(nullObj.constructor);

console.log(undefinedObj.constructor);

运行结果:

运行到 console.log(nullObj.constructor); 的时候,浏览器报错:Uncaught TypeError: Cannot read property 'constructor' of null。类似的问题也发生在console.log(undefinedObj.constructor); 上面:Uncaught TypeError: Cannot read property 'constructor' of undefined。

3.Object.prototype.toString.call()

最后要介绍的是jquery中使用的方式,Object.prototype.toString.call()。优点是支持绝大多数类型的判断,唯一的缺点是不支持自定义对象的判断。

测试代码如下:

代码如下:

var str='str';

var arr=['1','2'];

var num=1;

var bool=true;

var obj={name:'test'};

var nullObj=null;

var undefinedObj=undefined;

var reg=/reg/;

function fn(){

alert('this is a function');

}

function User(name){

this.name=name;

}

var user=new User('user');

var toString=Object.prototype.toString;

console.log(toString.call(str));

console.log(toString.call(arr));

console.log(toString.call(num));

console.log(toString.call(bool));

console.log(toString.call(obj));

console.log(toString.call(reg));

console.log(toString.call(fn));

console.log(toString.call(user));

console.log(toString.call(nullObj));

console.log(toString.call(undefinedObj));

运行结果:

console.log(toString.call(user)); 的返回结果为:[object Object],不能做进一步判断。

总结

javascript中经常使用的对象判断方式包括:typeof、constructor和Object.prototype.toString.call()。其中typeof很好理解,他是JavaScript本身支持的语法。constructor很少使用,但是相信大家通过demo也能看懂他代表的意思。至于Object.prototype.toString.call()可能多少会让人有点费解,他和XXX.toString()有什么区别呢,为什么不能直接使用XXX.toString()呢?

我们在浏览器中运行下面的代码:查看运行结果:

null和undefined因为不存在toString()方法,所以会报错,我们就不去管他们了。至于其他对象,通过toString()返回的内容和使用Object.prototype.toString.call()返回的内容差别很大。这是因为Object.prototype.toString()方法被设计用来返回对象类型的。String、Array、Boolean、Regexp、Number和Function都继承自Object,同时也就继承了Object的原型方法toString(),但是他们都对toString()进行了重写。执行xxx.toString()时使用的是重写后的方法,返回的结果自然会和Object.prototype.toString.call()的结果不一致。

通过上面的例子,大家一定对这三种方式有了更深刻的认识,熟悉他们的优缺点,然后可以根据自己的需要选择合适的方式。推荐使用Object.prototype.toString.call()方法,因为他能解决绝大部分情况的判断,在遇到返回值为[object Object]时,再使用constructor辅助判断,看是否是自定义对象。

代码如下:

var str='str';

var arr=['1','2'];

var num=1;

var bool=true;

var obj={name:'test'};

var nullObj=null;

var undefinedObj=undefined;

var reg=/reg/;

function fn(){

alert('this is a function');

}

function User(name){

this.name=name;

}

var user=new User('user');

console.log(str.toString());

console.log(arr.toString());

console.log(num.toString());

console.log(bool.toString());

console.log(obj.toString());

console.log(reg.toString());

console.log(fn.toString());

console.log(user.toString());

console.log(nullObj.toString());

console.log(undefinedObj.toString());

海亿美食网还为您提供以下相关内容希望对您有帮助:

javascript中判断否是数字和字母的代码怎么写

这个用正则表达式是最简单的如\d代表判断是否是数字,\w判断是否是字母和数字,包括大小写,等等还有很多,用法参照,百度一下还有很多用法,可以研究一下 参考资料:http://www.yesky.com/imagesnew/software/vbscript/html/...

js如何判断输入的数据是整数还是小数

可以转换为整数parseInt(number)和原来的数比较。也可以转换成字符串判断。var str = number+"";if(str.indexOf(".")==-1){ alert("整数")}else{ alert("小数");}

JS判断数据类型的方法有哪些

【推荐课程:JavaScript教程】方法一:typeof方法typeof 是一个操作符,右侧是一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串的形式表示,包括:number、boolean、symbol、string、object、undefined、fun...

javascript中如何判断类型汇总

// Returns if a value is really a numberfunction isNumber (value) { return typeof value === 'number' &amp;&amp; isFinite(value);}Array在javascript 数组中不是像java和其他语言中那样的真正数组。它们实际上是对象,因...

详解在javaScript中检测数据类型的几种方式总结

二、instanceof 检测instanceof 检测某个对象是不是另一个对象的实例,可以在继承关系中用来判断一个实例是否属于它的父类型。三、Object.prototype.toString.call 检测 使用Object.prototype上的原生toString()方法判断数据类型,...

请问各位大师:js中判断字符串是整数且值大于等于100,怎么判断?

String num = request.getParameter("number");boolean isOK;try{ isOk = Integer.valueOf(num) &gt;=100;}catch(Exception ex){ isOK = false;}

js怎么判断一个数是否是字符串

javaScript判断一个字符串中是否包括有数字和"-",在一些表单提交的地方,这是比较有用的常规判断,这里收集有几种不同的方法,包括普通的JS验证法、正则表达式法,另外还有判断是否为浮点数的js函数,在最后还将简要介绍下is...

javascript里面如何判断一个字符是否为字母

字符串可以直接比较大小,运算符号即可实现。举例如下:var s = '1';//需要判断的字符,如果是字符串判断会不准确var flag=false;if((s&gt;='a'&amp;&amp;s&lt;='z')||(s&gt;='A'&amp;&amp;s&lt;='Z'))flag=true;alert(flag); 本回答由提问者推荐...

JavaScript中如何判断一个值的类型

我们知道在js中有一个运算符可以帮助我们判断一个值的类型,它就是typeof运算符。console.log(typeof 123); //numberconsole.log(typeof '123'); //stringconsole.log(typeof true); //booleanconsole.log(typeof ...

js如何判断字符是中文,英文,数字还是字符

1、首先,打开html编辑器,新建html文件,例如:index.html。2、在index.html中的标签,输入js代码:document.body.innerText = test('测');function test(t) { var a = [{'reg':/[^/u4e00-/u9fa5]/, 'name':...

Top