簡體   English   中英

檢查變量是否為字符串的簡便方法?

[英]Easy way to check if a variable is a string?

這個問題是[]的一個衍生產品, 是Array的一個實例,但“”不是String的實例

鑒於

"" instanceof String; /* false */
String() instanceof String; /* false */
new String() instanceof String; /* true */

typeof "" === "string"; /* true */
typeof String() === "string"; /* true */
typeof new String() === "string"; /* false */

然后,如果我有一個變量abc ,我想知道它是否是一個字符串,我可以做

if(typeof abc === "string" || abc instanceof String){
    // do something
}

有沒有更簡單,更短和本地的方式,或者我必須創建自己的功能?

function isStr(s){
    return typeof s === "string" || s instanceof String;
}
if(isStr(abc)){
    // do something
}

我認為Object.prototype.toString.call(a) === "[object String]"是這樣做的最短/本地方式

你是對的:

typeof myVar == 'string' || myVar instanceof String;

是檢查變量是否為字符串的最佳方法之一。

您可能會感到困惑,因為[]是一個數組初始化器 (通常稱為數組文字),定義為創建一個Array 對象 ,而''是一個字符串文字 ,定義為創建一個字符串基元

基元不是任何類型對象的實例,但為方便起見,它可能被強制轉換為相關對象。

一個更重要的問題是為什么isString函數應該為字符串基元和字符串對象返回true? 字符串對象的使用是(非常?)罕見,我會認為它們的使用會推斷出特殊處理,並且你想要區分兩者而不是對它們進行相同處理。

忽略變量的類型更為常見,並且,如果它的類型可能不同,則無條件地將其轉換為所需的類型,例如,如果您需要字符串基元:

function foo(s) {
  s = String(s); // s is guaranteed to be a string primitive
  ...
}

例外情況是函數重載並具有不同的行為,具體取決於特定參數是函數,對象還是其他。 這種重載通常不被認為是一個好主意,但許多JavaScript庫依賴於它。 在這些情況下,傳遞String對象而不是字符串原語可能會產生意外后果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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