我在var Z中有一个文字对象或其中一个组件。也就是说。以下之一
var Q = {"name" : 123};
Z = Q;
Z = Q["name"];
我该如何确定它是什么?
答案 0 :(得分:4)
如果是这种情况,您可以使用typeof
[mozilla docs] 来检查值是否为数字。
if (typeof z === "number") {
alert("I'm the property!");
} else {
alert("I'm the object!");
}
如果typeof x
是原始x
,"number"
,"boolean"
,"string"
或"undefined"
,则 "function"
非常有用你需要对其他类型进行更复杂的检查。
如果有人使用对象包装器类型而不是基本类型,则此检查也可能出现意外行为。 patrick dw's excellent answer提供了可以解决此问题的解决方案。
答案 1 :(得分:2)
typeof
是一种更安全,更通用的方法,通过调用Object.prototype.toString
并将Z
设置为var type = Object.prototype.toString.call( Z ); // [object ???]
来查找其内部 [[Class]] 属性调用上下文,如下所示:
[object Class]
结果将采用[object Object]
[object Array]
[object Number]
[object Boolean]
[object String]
的形式,如:
function getType( x ) {
return x === void 0 ? 'undefined' :
x === null ? 'null' :
Object.prototype.toString.call( x ).slice( 8, -1 ).toLowerCase();
}
你可以轻松地将它变成一个函数,如下所示:
"string"
"number"
"array"
// ...etc
这将返回所需类型的小写字符串结果:
null
我对undefined
和if( getType( Z ) === "string" ) {
// do something
} else {
// do something else
}
进行了明确的测试,因为我认为浏览器可能与这些浏览器不兼容,但我不确定。无论如何,他们很容易明确地测试。
那么你就像使用它一样:
typeof
这更安全的原因是,如果一个字符串恰好作为其对象包装器给出,"object"
将返回"string"
而不是typeof new String("test"); // "object"
。
Array
另外,它涵盖了"object"
的情况,总是使用typeof
返回{{1}}。
答案 2 :(得分:0)
使用typeof
Z = Q;
typeof Z == "object"; //true
Z = Q["name"];
typeof Q == "number"; //true
答案 3 :(得分:0)
是的,正如之前的帖子所说,'typeof'是你想要的方法。
值得知道typeof返回一个字符串,即使该类型未定义或布尔值为例如此,请记住在支票中使用它。