比较相同javascript类型的两个变量的最佳方法是什么?:
即
[] = ['1','2','3']
[] != {}
Number = Number
null = null
等。等
答案 0 :(得分:6)
要仅比较类型,可以认为typeof
是正确的工具
typeof [] === typeof ['1','2','3']; // true, both are arrays
请注意,null
,数组等属于'object'
类型,这意味着
typeof [] === typeof null; // is true (both are objects)
typeof [] === typeof {}; // is true (both are objects)
这是预期的行为。
如果你必须专门检查null,数组或其他东西,你可以写一个更好的typeof
函数
var toType = function(obj) {
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}
然后你可以做
toType([]) === toType(['1','2','3']); // true
toType([]) === toType({}); // false
toType(1) === toType(9999); // true
toType(null) === toType(null); // true
toType(null) === toType([]); // false
答案 1 :(得分:0)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof
typeof 5 === typeof 37
typeof {} === typeof []
答案 2 :(得分:0)
这适用于所有"类型":
function haveSameType(a,b) {
return (a instanceof Array && b instanceof Array) ||
(a === null && b === null) ||
(typeof a === typeof b &&
b !== null &&
a !== null &&
! (a instanceof Array) &&
! (b instanceof Array)
);
}
答案 3 :(得分:0)
如果你想区分对象"类型"相互比较,比较他们的原型可能是一个好主意:
Object.getPrototypeOf([]) === Object.getPrototypeOf([1, 2, 3])
Object.getPrototypeOf({}) !== Object.getPrototypeOf([])
如果您没有传入对象,则会抛出此内容,因此如果您还想比较原始值的类型(包括null
),则必须进行更复杂的测试:
function sameType(a, b) {
var objectA = Object(a) === a,
objectB = Object(b) === b;
if (objectA && objectB)
return Object.getPrototypeOf(a) === Object.getPrototypeOf(b);
else if (!objectA && !objectB)
return typeof a === typeof b;
else
return false;
}