[英]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]"
是這樣做的最短/本地方式
您可能會感到困惑,因為[]
是一個數組初始化器 (通常稱為數組文字),定義為創建一個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.