JSでは変数を文字列に変換します.

3497 ワード

言葉の細かいところを調べてもいいです.あまり本当のことは必要ないですが、少しも知らないとまずいです.
  • 原文:Coverting a value to string in JavaScript
  • 翻訳者:Fundbug
  • 可読性を保証するために、本文は直訳ではなく意訳を採用する.また、この著作権は元の作者に帰属し、翻訳は学習にのみ使用されます.
    JavaScriptには、変数を文字列に変換できる3つの方法があります.このブログでは、これらの方法を詳しく紹介し、彼らの優劣を比較します.
    3つの方法
    変数を文字列に変換する3つの方法は以下の通りです.
  • value.toString()
  • "+value
  • "
  • String
  • valueがnullまたはundefinedの場合、第1の方法はだめです.方法2と方法3は基本的に同じです.
  • ""+value:valueを空の文字列に加算すると文字列に変換できます.この方法は、開発者の意図を理解するのが難しいかもしれません.しかし、この点については、人によっては、この方法が好きな人がいます.
  • String(value):String関数を用いてvalueを文字列に変換する方法は非常に明確である.しかし、Stringには2つの異なる使い方があり、紛らわしいです.特にJava開発者にとって.String()と演算子newが一緒に構成関数として使用されると、新しく作成されたStringオブジェクトに戻ります.new演算子を用いずにStering()を呼び出すと、valueだけを元の文字列に変換します.この両者は非常に違っています.
  • > String("Fundebug") === new String("Fundebug")
    false
    
    > typeof String("Fundebug")
    'string'
    > String("Fundebug") instanceof String
    false
    
    > typeof new String("Fundebug")
    'object'
    > new String("Fundebug") instanceof String
    true
    実際にはString()を構造関数として使うことはあまりないので、文字列を変換するためにそれだけを使うといいです.
    "+valueとString(value)の微妙な違い
    "+valueとString(value)は、valueを文字列に変換できますが、どうやってできますか?実は、結果は同じですが、方法はちょっと違います.
    prmitive基本タイプを文字列に変換します.
    両方の方法は内部関数ToString()を用いてprmitive基本タイプを文字列に変換する.ToString()関数はECMAScript 5.1(§9.8)で定義されていますが、直接使用できないので、内部関数と呼ばれています.以下の表はToString関数がどのようにprmitive基本タイプを文字列に変換するかを示しています.
    パラメータ
    結果undefined"undefined"null"null"ボロア"true"または"false"Number
    数字を文字列に変換します.例えば、"1.765".
    String
    変換なし
    Objectを文字列に変換
    文字列に変換する前に、両方の方法でObjectをprmitiveに変換します.異なるのは、「」+valueは内部関数ToPrimitive(Number)を使用しており(dateタイプを除く)、Stringは内部関数ToPrimitiveを使用している.
  • ToPrimitive(Number):まずObj.valueOfを呼び出し、結果がprmitiveであれば戻ります.もしobj.toStringを呼び出したら()、結果がprmitiveなら戻ってきます.そうでないとType Errに戻ります.
  • ToPrimitive(String):ToPrimitive(Number)と似ていますが、Obj.toString()を先に呼び出して、Obj.valueOf()を呼び出します.
  • 以下の例によって区別が分かります.
    var obj = {
        valueOf: function()
        {
            console.log("valueOf");
            return {};
        },
        toString: function()
        {
            console.log("toString");
            return {};
        }
    };
    呼び出しの結果:
    > "" + obj
    valueOf
    toString
    TypeError: Cannot convert object to primitive value
    
    > String(obj)
    toString
    valueOf
    TypeError: Cannot convert object to primitive value
    それらの結果は同じです.
    "+valueはStringとは違いますが、私たちはあまり感じられません.なぜなら、ほとんどのobjectはデフォルトのvalueOf()を使って、対象自体に戻ります.
    > var x = {}
    > x.valueOf() === x
    true
    valueOf()の戻り値はprmitiveではないので、ToPrimitive(Number)はvalueOf()をスキップしてtoStering()の戻り値を返します.このように、ToPrimitive(String)との戻り値は同じです.
    objectがBoolean、NumberまたはStringの例である場合、valueOf()はprmitiveに戻ります.これは両者の計算過程がこうであることを意味する.
  • ToPrimitive:valueOf()はprmitive値を返し、ToString()を使って文字列に変換する.
  • ToPrimitive:toString()はToString()関数によりprmitive値を文字列に変換する.
  • 計算過程は違っていますが、その結果は同じであることが分かります.
    結論
    どの方法を選ぶべきですか?value値がnullとundefinedではないことを確認できれば、value.toString()を使用してもいいです.そうでなければ、「」+valueとStringしか使えません.基本的には同じです.
    参照
  • JavaScript values:not everthing is an object
  • What is{}+{}in JavaScript?
  • String concation in JavaScript
  • JavaScript Stringオブジェクト
  • 著作権声明:転載する時、作者のFunebugと本文の住所を明記してください.https://blog.fundebug.com/201...