0

JavaScriptを作成するとき、私は常に2つの整数を足し合わせると別の整数になることを当然のことと思っていました。または、2つの文字列を一緒に追加すると、連結が発生します。しかし、私は、インスタンスを使用して操作を実行する前に、言語が舞台裏でインスタンスのタイプをどのように決定するのかを考えるようになりました。

var one = 1;
var two = 2;
var fourStr = 'four';
var floaty = 1.5;

//this results in an integer
var three = one + two;           //3

//but this results in a string
var result = fourStr + one;      //'four1'

//and this results in a float
var floatenized = one + floaty;  //2.5

ランタイムはインスタンスタイプを決定し、ある種の内部タイプの優先順位などを参照するだけですか?異なるタイプのインスタンスが組み合わされたときに、ランタイムによってこれらの操作がどのように実行されるかを正確に説明できる人はいますか?

4

2 に答える 2

3

ecmascript仕様は、+(セクション11.6.1)のような演算子がさまざまなタイプでどのように動作するかを正確に説明しています。

あなたの例に関連する:

  • (数値)+(数値):結果はフロートの合計になります
  • (文字列)+(数値):結果は、文字列の連結と数値の文字列表現になります
  • (数値)+(文字列):結果は、数値と文字列の文字列表現の連結になります

ただし、+は、二項演算子のように、文字列を数値に変換する単項演算子としても機能します-(例:+"4"+5==95-"4"==1)。

型変換アルゴリズムは、仕様のセクション9で説明されています。環境がプリミティブとオブジェクトのタイプをどのように格納するかは指定されていません。

于 2012-04-13T13:09:20.950 に答える
2

変数に番号を割り当てるとき

var one = 1;
//or
var floaty = 1.5;

値の型は数値です....変数に文字列を割り当てる場合

var fourStr = 'four';

値の型は文字列です。文字列と数値を追加すると、数値が文字列に変換され、2つの文字列が連結されます

Mozillaのこのドキュメントの値のセクションを参照してください

于 2012-04-13T13:08:00.577 に答える