[英]javascript - what kind of thing in a var
在var Z中,我有一個文字對象或它的組件之一。 以下之一
var Q = {"name" : 123};
Z = Q;
Z = Q["name"];
如何確定是哪一個?
在這種情況下,可以使用typeof
[ mozilla docs ]檢查該值是否為數字。
if (typeof z === "number") {
alert("I'm the property!");
} else {
alert("I'm the object!");
}
如果x
是原始的"number"
, "boolean"
, "string"
, "undefined"
或"function"
,則typeof x
很有用,但是您需要對其他類型進行更復雜的檢查。
如果有人使用對象包裝類型而不是原始類型,則此檢查也有可能表現異常。 patrick dw的出色答案提供了可以解決此問題的解決方案。
typeof
一種更安全,更通用的方法是通過調用Object.prototype.toString
並將Z
設置為調用上下文來找出其內部[[Class]]屬性,如下所示:
var type = Object.prototype.toString.call( Z ); // [object ???]
結果將采用[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
的情況,它將始終返回typeof
"object"
。
使用typeof
Z = Q;
typeof Z == "object"; //true
Z = Q["name"];
typeof Q == "number"; //true
是的,正如之前的帖子所述,'typeof'是您想要的方法。
值得一提的是,即使類型為undefined或boolean,typeof也會返回字符串,因此請記住在檢查中使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.