サーチ…
備考
一部の言語では、宣言する変数の種類を事前に定義する必要があります。 JavaScriptはそれをしません。それだけでそれを理解しようとします。場合によっては予期しない動作が発生することがあります。
次のHTMLを使用すると
<span id="freezing-point">0</span>
JSを介してコンテンツを取得しても、それを期待しているにもかかわらず、数字に変換することはありません 。以下のスニペットを使用すると、 boilingPoint
が100
になると予想されることがあります。しかし、JavaScriptはmoreHeat
を文字列に変換し、2つの文字列を連結します。結果は0100
ます。
var el = document.getElementById('freezing-point');
var freezingPoint = el.textContent || el.innerText;
var moreHeat = 100;
var boilingPoint = freezingPoint + moreHeat;
これを解決するには、 freezingPoint
を数値に明示的に変換します。
var el = document.getElementById('freezing-point');
var freezingPoint = Number(el.textContent || el.innerText);
var boilingPoint = freezingPoint + moreHeat;
最初の行では、格納する前に"0"
(文字列)を0
(数値)に変換します。追加した後、期待した結果が得られます( 100
)。
文字列を数値に変換する
Number('0') === 0
Number('0')
は文字列( '0'
)を数値( 0
)に変換し、
より短いが、あまり明確でない形式:
+'0' === 0
単項+
演算子は数値に何も作用しませんが、何かを数値に変換します。
興味深いことに、 +(-12) === -12
。
parseInt('0', 10) === 0
parseInt('0', 10)
は文字列( '0'
)を数値( 0
)に変換します。第2引数は基数です。指定されていない場合、parseIntは文字列を間違った番号に変換できます。
数値を文字列に変換する
String(0) === '0'
String(0)
は数字( 0
)を文字列( '0'
)に変換します。
より短いが、あまり明確でない形式:
'' + 0 === '0'
二重否定(!! x)
二重否定!!
別個のJavaScript演算子でも特殊な構文でもなく、2つの否定のシーケンスです。その適切に任意の型の値を変換するために使用されるtrue
またはfalse
それがtruthyかfalsyであるかどうかに応じてブール値。
!!1 // true
!!0 // false
!!undefined // false
!!{} // true
!![] // true
最初の否定はに任意の値を変換しfalse
それはtruthyとする場合にはtrue
falsyある場合。 2番目の否定は通常のブール値で動作します。彼らは一緒に任意のtruthy値に変換true
とする任意のfalsy値false
。
しかし、多くの専門家は、このような構文を許容できないものとして使用することを検討し、書いた方が長くても、選択肢を読みやすくすることを推奨します。
x !== 0 // instead of !!x in case x is a number
x != null // instead of !!x in case x is an object, a string, or an undefined
!!x
使用は、以下の理由により貧弱な方法とみなされます。
- 文体的にはそれは特殊な特殊構文のように見えるかもしれないが、実際に暗黙的な型変換を伴う2つの連続する否定以外は何もしていない。
- 変数とプロパティに格納されている値の型に関する情報をコードを通じて提供する方が良いでしょう。たとえば、
x !== 0
は、x
はおそらく数字であると言っていますが、!!x
はコードの読者にこのような利点を伝えません。 -
Boolean(x)
使用法は同様の機能を提供し、より明示的な型の変換です。
暗黙の変換
JavaScriptは、使用時に自動的に変数をより適切な型に変換しようとします。通常、明示的に変換を行うことをお勧めします(他の例を参照)。しかし、暗黙のうちにどのような変換が行われるかは分かりません。
"1" + 5 === "15" // 5 got converted to string.
1 + "5" === "15" // 1 got converted to string.
1 - "5" === -4 // "5" got converted to a number.
alert({}) // alerts "[object Object]", {} got converted to string.
!0 === true // 0 got converted to boolean
if ("hello") {} // runs, "hello" got converted to boolean.
new Array(3) === ",,"; // Return true. The array is converted to string - Array.toString();
よりトリッキーな部分のいくつか:
!"0" === false // "0" got converted to true, then reversed.
!"false" === false // "false" converted to true, then reversed.
数値をブール値に変換する
Boolean(0) === false
Boolean(0)
は、数値0
をブール値false
変換しfalse
。
より短いが、あまり明確でない形式:
!!0 === false
文字列をブール値に変換する
文字列をブール値に変換するには
Boolean(myString)
またはより短いがあまり明確でない形態
!!myString
空文字列(長さがゼロ)を除くすべての文字列はブール値としてtrue
と評価されtrue
。
Boolean('') === false // is true
Boolean("") === false // is true
Boolean('0') === false // is false
Boolean('any_nonempty_string') === true // is true
整数から浮動小数点へ
JavaScriptでは、すべての数値は内部的に浮動小数点として表されます。つまり、整数を浮動小数点として使用するだけで、整数を変換する必要があります。
整数から浮動小数点へ
浮動小数点を整数に変換するために、JavaScriptには複数のメソッドが用意されています。
floor
関数はfloat以下の最初の整数を返します。
Math.floor(5.7); // 5
ceil
関数は、浮動小数点数以上の最初の整数を返します。
Math.ceil(5.3); // 6
round
関数はフロートを丸めます。
Math.round(3.2); // 3
Math.round(3.6); // 4
切り捨て( trunc
)フロートから小数を削除します。
Math.trunc(3.7); // 3
切り捨て(との違いに注意してくださいtrunc
)とfloor
:
Math.floor(-3.1); // -4
Math.trunc(-3.1); // -3
文字列を浮動小数点数に変換する
parseFloat
は文字列を引数として受け取り、float /
parseFloat("10.01") // = 10.01
ブール値に変換する
Boolean(...)
は、すべてのデータ型をtrue
またはfalse
変換しfalse
。
Boolean("true") === true
Boolean("false") === true
Boolean(-1) === true
Boolean(1) === true
Boolean(0) === false
Boolean("") === false
Boolean("1") === true
Boolean("0") === true
Boolean({}) === true
Boolean([]) === true
空の文字列と数字0はfalseに変換され、その他の文字列はすべてtrueに変換されます。
より短いが、あまり明確でない形式:
!!"true" === true
!!"false" === true
!!-1 === true
!!1 === true
!!0 === false
!!"" === false
!!"1" === true
!!"0" === true
!!{} === true
!![] === true
この短い形式では、論理NOT演算子を2回使用する暗黙の型変換を利用します(http://www.riptutorial.com/javascript/example/3047/double-negation#x-
ここでは、 ECMAScript仕様のブール変換の完全なリストを示します
- 型
myArg
がundefined
またはnull
場合Boolean(myArg) === false
-
myArg
がboolean
型の場合、Boolean(myArg) === myArg
-
myArg
がnumber
場合、Boolean(myArg) === false
myArg
が+0
myArg
、‑0
、またはNaN
場合はBoolean(myArg) === false
。それ以外の場合はtrue
- もし
myArg
型のstring
次にBoolean(myArg) === false
場合myArg
空の文字列である(その長さがゼロです)。それ以外の場合はtrue
- もし
symbol
またはobject
の型myArg
の場合はBoolean(myArg) === true
ブール値としてfalse
に変換される値は、 falsyと呼ばれます (そして、他はすべてtruthyと呼ばれます )。 比較操作を参照してください。
配列を文字列に変換する
Array.join(separator)
は配列を文字列として出力し、設定可能なセパレータで出力することができます。
デフォルト(separator = "、"):
["a", "b", "c"].join() === "a,b,c"
文字列セパレータを使用する場合:
[1, 2, 3, 4].join(" + ") === "1 + 2 + 3 + 4"
空白のセパレータを使用する場合:
["B", "o", "b"].join("") === "Bob"
配列メソッドを使用した文字列への配列
この方法は、あなたがjoin()でそれを行うことができる何かを習得するために匿名関数を使用しているので、uselssのように見えるかもしれません。しかし、配列をStringに変換しているときに文字列に何かを加える必要がある場合は、これが便利です。
var arr = ['a', 'á', 'b', 'c']
function upper_lower (a, b, i) {
//...do something here
b = i & 1 ? b.toUpperCase() : b.toLowerCase();
return a + ',' + b
}
arr = arr.reduce(upper_lower); // "a,Á,b,C"
プリミティブからプリミティブへの変換テーブル
値 | 文字列に変換されました | 番号に変換 | ブール型に変換 |
---|---|---|---|
未定 | "未定義" | NaN | 偽 |
ヌル | "ヌル" | 0 | 偽 |
真実 | "真" | 1 | |
偽 | "偽" | 0 | |
NaN | "NaN" | 偽 | |
空文字列 | 0 | 偽 | |
"" | 0 | 真実 | |
"2.4"(数値) | 2.4 | 真実 | |
"test"(数値ではない | NaN | 真実 | |
"0" | 0 | 真実 | |
"1" | 1 | 真実 | |
-0 | "0" | 偽 | |
0 | "0" | 偽 | |
1 | "1" | 真実 | |
無限 | "無限大" | 真実 | |
- 無限 | " - 無限大" | 真実 | |
[] | "" | 0 | 真実 |
[3] | "3" | 3 | 真実 |
['a'] | "a" | NaN | 真実 |
['a'、 'b'] | "a、b" | NaN | 真実 |
{} | "[オブジェクトオブジェクト]" | NaN | 真実 |
関数(){} | "関数(){}" | NaN | 真実 |
太字の値は、プログラマが驚くほどの変換を強調します
明示的な値を変換するには、String()を使用できます。Number()Boolean()