[0] 5 つのデータ型:
[0.1]基本データ型: 未定義、Null、ブール、数値、文字列
[0.1.1] 基本型の値は単純なデータ セグメントを参照し、変数に格納されている実際の値を操作できるため、5 つの基本型は値によってアクセスされます
[0.1.2] 基本型の値はメモリ内の固定サイズのスペースを占有し、スタック メモリに格納されます。プリミティブ型の値をある変数から別の変数にコピーすると、値のコピーが作成されます。
[0.1.3] 基本型の値に属性を追加できません[0.2] 参照データ型: オブジェクト
[0.2.1] 参照型の値は、複数の値で構成できるオブジェクトを参照します。 js はメモリ内の場所への直接アクセスを許可しません。つまり、操作オブジェクトのメモリ空間に直接アクセスすることはできません。オブジェクトを操作するときは、実際には実際のオブジェクトではなく、オブジェクトへの参照を操作していることになります。
参照型の値を含む変数には、実際にはオブジェクト自体ではなく、オブジェクトへのポインターが含まれます。参照型の値をある変数から別の変数にコピーすると、実際にはポインターがコピーされるため、最終的には両方の変数が同じオブジェクトを指すことになります。
[0.2.3] 参照型の値の場合、属性とメソッドを追加したり、属性やメソッドを変更したり削除したりすることもできます
[1]未定義[1.1] 未定義型には、未定義の値が 1 つだけあります
[1.2]var a var a = 未定義;
[1.3] 宣言されていない変数の場合、実行できる操作は 1 つだけです。それは、typeof 演算子を使用してそのデータ型を検出することです (ただし、厳密モードではエラーが発生します)[1.4] 登場シーン:
[1.4. 1] 宣言された未代入変数
オブジェクトの存在しない属性を取得します
[1.4.3] 戻り値のない関数の実行結果
[1.4.4] 関数のパラメータは
に渡されません
[1.4.5]void(式)[1.5]型変換
ブール値(未定義):false
数値(未定義):NaN
文字列(未定義):'未定義'
[2]Null
[2.1] Null 型には null という値が 1 つだけあります。論理的な観点から見ると、null 値は null オブジェクト ポインターを表します。
[2.2] 定義した変数をオブジェクトの保存に使用する場合は、変数を null に初期化するのが最善です[2.3] 実際、未定義値は null 値から派生するため、unknown == null
[2.4] 発生シナリオ: オブジェクトが存在しない場合
[2.5]型変換
ブール値(null):false
数値(null):0
文字列(null):'null'
[注 1] null は null オブジェクト ポインタ、[] は空の配列、{} は空のオブジェクト、これら 3 つは異なります
[注 2]null ではカスタム属性を追加できません
[3]ブール値
[3.1] ブール型には true と false の 2 つの値しかありません
[3.2] 登場シーン:[3.2.1] 条件文により、システムによって Hermit タイプ変換が実行されます
[3.2.2]リテラルまたは変数の定義
[3.3]型変換
数値 (true): 1 || 数値 (false) : 0
文字列(true):'true' || 文字列(false):'false'
[3.4]ブール値()
ブール値(未定義):false
ブール値(null):false
ブール値 (空でないオブジェクトには空の配列 [] と空のオブジェクト {} が含まれます): true
ブール値 (0 以外): true || ブール値 (0 および NaN): false
ブール値 (スペースを含む空でない文字列):true || ブール値(''):false
[注] true が 1 に等しいとは限らず、false が 0 に等しいとは限りません
[4]数字
[4.1] Number 型は、整数と浮動小数点値を表すために IEEE754 形式を使用します
[注] 数値に変換するには、値 -0 を使用できます[4.2] 3 つのリテラル形式は 10 進数、8 進数、16 進数です
最初の数字は 0 で、その後に 8 進数の数字シーケンス (0 ~ 7) が続く必要があります。リテラル値の値が範囲を超える場合、先頭の 0 は無視され、後続の値は 10 進数として解析されます。
[4.2.2] 8 進リテラルは厳密モードでは無効であり、js がエラーをスローします
[4.2.3] 16 進リテラル値の最初の 2 桁は 0x であり、その後に一連の 16 進数字が続く必要があります。文字は大文字でも小文字でもかまいません。
g、hなどが表示される場合は、範囲外の値が表示されます。エラーが報告されます
[4.2.5] 算術計算を実行する場合、8 進数および 16 進数で表現されたすべての値は最終的に 10 進数の値に変換されます
[4.3] 数値表現:
[4.3.1] 正の 0 と負の 0 は js に保存でき、等しいとみなされます
[4.3.2] 浮動小数点値: 値には小数点が含まれている必要があり、小数点の後に少なくとも 1 桁の数字が必要です。
[4.3.2.1] 浮動小数点値は整数値を格納するために 2 倍のメモリ空間を必要とするため、数値がない場合、js は機会を失わずに浮動小数点値を整数値に変換します。または小数点以下の浮動小数点値は整数を表し、この値は整数値として保存されます。
[4.3.2.2] 浮動小数点値の最高精度は小数点以下 17 桁です[4.3.2.3] 非常に大きい数値または非常に小さい数値については、科学表記法 e で表される浮動小数点値で表すことができます。
[4.3.2.4] デフォルトでは、js は小数点以下にゼロが 6 つ以上ある浮動小数点値を e 表記で表現される値に変換します
[4.3.2.5] IEEE754 数値に基づく浮動小数点計算でよくある問題丸め誤差のこと。例: 0.1 0.2 === 0.3(15 0)4
[4.3.3] js の数値範囲は Number.MIN_VALUE(5e-324) —— Number.MAX_VALUE(1.7976931348623157e 308) です
[4.3.3.1] 正の数値の範囲を超える場合は Infinity (正の無限大)、負の数値の範囲を超える場合は -Infinity (負の数値) finity) が出力されます
[4.3.3.2] - Infinity は数値計算に参加できません
[4.3.3.3]number.max_value 1! = 無限大、コンピューターは最大 52 ビットのデジタル数字を保存できるため、1,000 を超える値を保存することはできず、精度は失われています。位置はすべて 0 なので、加算は変わりません。
[4.3.3.4]Number.MIN_VALUE - 1 != -Infinity、同じ理由のため、結果は -1 になります[4.3.3.5] isFinite() を使用して、暗黙的な型変換 Number() を含め、値が有限であるかどうかを判断できます
[4.3.3.6]isFinite(NaN) //false
[4.3.4]NaN
[4.3.4.1]NaN は、NaN 自体を含め、どの値とも等しくありません
[4.3.4.2] NaN を含む操作はすべて NaN を返します
[4.3.4.3] isNaN() は、暗黙的な型変換を含め、数値が NaN であるかどうかを判断します Number()
[4.4] 数値変換: Number() は任意の型に使用できます。parseInt() と parseFloat は特に文字列を数値に変換するために使用されます
[注 1]Number()、parseInt()、および parseFloat() はさまざまな基数の数値を受け入れることができますが、数値を含む文字列には適用できません
[注 2] Number()、parseInt()、parseFloat() の数値が 1.2 の場合はエラーが報告されますが、文字列が '1.2.' の場合はエラーは報告されません
[4.4.1]Number()
数値 (true):1 || 数値 (false):0
数値 (さまざまな基数の数値): 1.0 や 1.、01 などの演算後の 10 進数は 1 として出力されます
数値(未定義):NaN
数値(null):0
数値 (文字列):
数値(10進数と16進数のみを含む文字列): 演算後の10進数
[注意] 文字列内ではエイトプルーフは認識されず、10進数処理は行われません
数値('' および ' '):0
数値 (その他の場合は文字列): NaN
番号 (オブジェクト):
数値([] と [0] と [-0]):0
Number([number]): 演算後の数値
数値([1,2] と {} およびその他のオブジェクト):NaN
[4.4.2] parseInt(): 文字列を変換するとき、最初の非スペース文字が見つかるまで、文字列の前のスペースは無視されます。最初の文字が数字または負符号でない場合、parseInt() は NaN を返します。そうである場合、解析が完了するか、数字以外の文字が検出されるまで、解析は続行されます。
[4.4.2.1] parseInt() はさまざまな基数の整数を識別できますが、8 進数のリテラル文字列を解析する場合、ECMAScript3 は 8 進数を解析しますが、ECMAScript5 には 8 進数を解析する機能がありません
[4.4.2.2] parseInt() 関数は、次のような基数を示す 2 番目のパラメーターを提供します: parseInt('123', 16 or 10 or 2)
[4.4.2.3] parseInt (さまざまな基数の数値): 1.0 や 1 などの演算後の 10 進数。または 01 は 1 として出力されます。
parseInt() は文字列変換数値の処理に特別に使用されるため、parseInt (他の型には '')//NaN
[4.4.3] parseFloat(): parseInt() と同様に、最初の非スペース文字
が見つかるまで文字列の前のスペースを無視します。[4.4.3.1] parseFloat() は 10 進文字列のみを解析できます
[4.4.3.2] parseFloat (さまざまな基数の数値): 1.0 や 1 などの演算後の 10 進数。または 01 は 1 として出力されます
[5]文字列: 一重引用符または二重引用符で囲まれた文字シーケンス。任意の文字列の長さは、長さ属性
にアクセスすることで取得できます。[5.1] エスケープシーケンスとも呼ばれる文字リテラル
n 改行
t 集計
bスペース
r
を入力しますf 用紙を給紙します
\スラッシュ
' 一重引用符
“ 二重引用符
xnn は 16 進数の nn (n は 0 ~ f) の文字を表します。たとえば、x41 は「A」を表します
unnnn は、16 進数の nnnn (n は 0 ~ f) で Unicode 文字を表します。たとえば、u03a3 はギリシャ文字 ε
を表します。[5.2] ECMAScript の文字列は不変です
[5.3] 文字列の連結では、最初に新しい文字列を作成し、次にその新しい文字列に接続する必要がある 2 つの文字列を入力し、最後に元の文字列を破棄する必要があります。このプロセスはバックグラウンドで発生し、一部の古いブラウザ (IE6) で文字列の結合が遅くなる原因でもありますが、この非効率な問題は現在解決されています
[5.4] 文字列変換
[5.4.1]toString()
Null と Unknown にはこのメソッドがありません
ブール値、オブジェクト、文字列にはこのメソッドがあります
Number このメソッドを使用して、基数 2、8、10、16 を渡します (例: var num = 10;num.toString(2);//1010
)ただし、番号の後に識別子を続けることができないため、10.toString(2) はエラーを報告します
[5.4.2]文字列()
toString() メソッドがあります。toString() メソッドを使用してください
String(null);//'null'
文字列(未定義);//'未定義'
[5.4.3] 値を文字列に変換するには、プラス演算子を使用して空の文字列 ''
に値を追加します。[5.4.4] 配列内の項目の値が null または未定義の場合、その値は、join()、toLocaleString()、toString()、および valueOf() によって返される結果では空の文字列になります。 ) メソッドは
を意味します。最後に、これら 5 つの基本タイプの違いを説明する簡単な例を示します
var testString = "Hello"; var testBoobean = true; var testUndefined = undefined; var testUndefined1; var testNull = null; var testObject = {a:1}; var testFunction = function(){return;}; alert(testString);//"string" alert(testBoobean);//"boolean" alert(testUndefined);//"undefined" alert(testUndefined1);//"undefined" alert(testUndefined2);//"undefined" alert(testNull);//"object" alert(testObject);//"object" alert(testFunction);//"function"