Javascript类型比较

时间:2014-05-04 20:34:27

标签: javascript typeof

比较相同javascript类型的两个变量的最佳方法是什么?:

[] = ['1','2','3']
[] != {}
Number = Number
null = null

等。等

4 个答案:

答案 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()
}

FIDDLE

然后你可以做

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)

答案 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;
}