簡體   English   中英

javascript-var中發生什么事

[英]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

我對nullundefined進行了明確的測試,因為我認為瀏覽器可能與它們不兼容,但我不確定。 無論如何,它們很容易進行顯式測試。

因此,您可以像這樣使用它:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM