2.値3


無限


Cのように従来のコンパイル言語を使用する開発者は、「0除算」のようなコンパイル/ランタイムエラーを多く見ている可能性があります。
var a=1/0 ;
ただしjavascriptでは0を演算で割ることがよく定義されているため、Infinity(Number.POSITIVE INFINITY)と呼ばれる結果値が得られる.
分子が-の場合-INfinity(Number.NEGATIVE INFINITY)が現れる
JAvascriptは有限数値式(前述のIEEE 754浮動小数点数)を用いるため、数学の教科書とは異なり、加減などの演算結果は+無限大/-無限大、例えば
let a =Number.MAX_VALUE // 1.7976931348623157e+308
a+a //무한대
a+Math.pow(2,970) //무한대
a+Math.pow(2,969) //무한대
IEEE 754リストでは、加算などの演算結果が大きすぎて表現しにくい場合、四捨五入モードが結果値を決定すると指摘している。大まかに言えば数字MAX_VALUE +Math.pow(2969)は無限大ではなく、数字です。MAX VALUEに近いので廃棄します。 Number.MAX_VALUE+Math.pow(2970)は無限大に近いため,処理を向上させる.

考えてみれば、脳が傷ついて脳が失われる可能性があるからだ.
でも説明するなら.
  • いったん武漢に入ると、これ以上有限(無限子債は有限ではない)
  • に入ることはできません.
  • 無限を無限で割ると1または無限になりますが、結果はNANです.
    (これは数学の本と同じです)
  • 有限個の負数を無限大で割ると、もちろん0有限個の負数を無限大で割るのでしょうか.
  • 0/-infinity // -0???

    0(Zero)


    JavaScriptには0:0と+0,,,-0の2種類があります。

    まず、-0を理解するために、JavaScriptが0を処理する方法を理解してみましょう.
    音のゼロは-0と表記されているだけではありません.特定の式の演算結果も-0に下がります.
    たとえば
    let a =0/-3 //-0
    let b =0*-3 //-0
  • の不思議な点は、-0の「文字列」を「0」にすると、常に「0」になることです.(toString())
  • とは逆に、「-0」をデジタル化すると、-0が表示されます.(Number("-0"))
  • もしそうなら、-0を他の値と比較します.
    let a =0
    let b=0/-3
    
    a==b //true
    -0==0 //true
    
    a===b //true
    -0===0 //true
    
    0>-0 //false
    a>b //false
    上の式では0が-0に等しいので、0と-0を区別するために、 次の関数を使用します。
    const isNegZero=(n)=>{
      n=Number(n)// 여기서 무조건 -0이 되도록바꿈
      // 만약 n이 0과 같고 1과 나눴을때 -인피니티가 나올경우
      //(분모가 0이면 무한 -0이면 네거티브 무한)true 둘중 하나라도
      //안맞으면 false(그냥 0이다)
      return (n===0)&&(1/n ===-Infinity)
    }
    isNegZero(-0) //true
    isNegZero(0/-3) //true
    isNegZero(0) //false
    では-0はいったいなぜ作られたのでしょうか.
    ある情報をサイズで表す場合(例えば、x座標y座標間を往復移動するアニメーション)
    この値はどこから来たのですか.知るために
    +方向から-または方向から来た場合は-0/0で表すことができます.
    javascriptは何を表現するために作成されたのか知っておくべきです.
    jsは最初はフロントエンドを動的に表す言語である.
    フロントエンドにエラーが発生した場合も、そのまま表現すべきだからです.
    ネジが1つ抜けていて、道理に合わないように見えるものもあります.
    しかし、これは言語が悪いという意味ではありません.
    必要に応じて作っているので、これを把握して、よく使えばいいです.

    2.4.4. 特殊な同等比較


    前述したように,NaNと−0の同等比較は独特であり,NaNaと自身も等しくない(特定の観点から−前の記事を参照)。isnan(),(または多段文字)を使用する必要があります。-0も詐欺師で、通常は0と等しいふりをして(厳密に等しい演算子の中でも)、isNegZero関数を小細工とします。

    なぜなら。この問題を解決するオブジェクト。is()ユーティリティをサポートします。

    let a = 2/"foo" //NaN
    let b = -3*0 //-0
    
    object.is(a,NaN) // true
    object.is(b,-0) // true
    object.is(b,0) //false 정확히 0과 -0을 비교한다.
    Object.is()は特殊な同等比較に用いられる.

    2.5値と参照値


    その他の形式の言語は、使用する区分に応じて、値-コピー(copy)、転送コピーの形式で割り当て/転送される。 JavaScriptの値の転送/割り当て方法について

    javascriptは転送(参照)の値を指すため、10個の異なる転送がある場合、共有された単一の値をそれぞれ参照します.
    値のタイプによってのみ値をコピー(直接変数に値を割り当てる)または参照をコピー(変数に変数を割り当てる)
    両方とも美しい
    たとえば
    let a =2
    let b =a //b는 언제나 a에서 값을 !!복사!! 한다.
    b++
    a // 2
    b // 3
    
    let c =[1,2,3]
    let d =c //d는 항상 c레퍼런스 하며 d가 바뀌면 c도 바뀐다.(d를 바꾸는건 c를 바꾸는 것과 같다)
    
    d.push(4)
    c //[1,2,3,4]
    d //[1,2,3,4]
    
    null、undefined、string、number、boolean、およびES 6のsymbolのような単純な値は、常に値-レプリケーションで割り当て/伝達されます.
    オブジェクトセット(配列やネストされたオブジェクトRapper)や関数などの合成値は、割り当て/転送時にRapperコピーを生成する必要があります.
    ここで、cとdは、[1,2,3]という名前の値を等しく参照(共有)するだけであるため、dによって[1,2,3]を変更すると、[1,2,3]と等しいcの値も変更される.
    重要!
    参照値とは、変数ではなく値そのものを指します.
    let a = [1,2,3]
    let b = a
    a // [1,2,3]
    b // [1,2,3] a변수를 레퍼런스하는것이아닌 a변수에 들어있는 "값인 [1,2,3]을 참조"
    //이후
    b=[4,5,6] //이럴경우 [1,2,3]이 영향을 받지 않고 [4,5,6]으로 새로은 값이 할당된다.
    ここで関数の様子を見てみましょう.
    パラメータ受信配列で4を解放すると、
    [4,5,6]を再びパラメータに割り当て、7を解放すると、
    何が起こるの?
    let a =[1,2,3]
    
    function foo(x){
      x.push(4)
      x //[1,2,3,4]
      //그후
      x=[4,5,6]
      x.push(7)
      x //[4,5,6,7]
      
    }
    foo(a)
    
    a// [1,2,3,4]
    この場合、aの参照コピーはxに割り当てられ、xおよびaは同じ[1,2,3]値を指す個別の参照である.
    新しい値を割り当てます([4,5,6])
    初期パラメータに渡されたaの値には注目しません.
    したがって,aが持つ[1,2,3]値は変化しない.
    したがって、aに単純に配列を配置する場合[4,5,6]、
    let a =[1,2,3]
    
    function foo(x){
      x.push(4)
      x //[1,2,3,4]
      //그후
      x.length=0 //모든 배열을 지움 즉 a가 가지고있던 배열을 모두 비움(새로운값을 할당하는것이아니다)
      x.push(4,5,6,7) //비워진 a가 가지고있던 배열에 push
      x //[4,5,6,7]
      
    }
    foo(a)
    
    a// [4,5,6,7]
    ユーザーは、値のコピー(値のみのコピー)/値のコピー(参照値のコピー)を任意に決定できないことを覚えておいてください。

    配列などの合成値をコピーして使用する場合
    純粋な値をコピーして割り当てる関数を使用するだけです.
    let a =[1,2,3,4]
    let b =a.slice() //얕은 복사에 의한 사본만들기
    let a=[1,2,3,4]
    b.push(1)
    a // [1, 2, 3, 4]
    b // [1, 2, 3, 4, 1]
    逆に、スカラーの元の値をRapperanceのような値に変換する場合は、元の値を他の関数値(オブジェクト、配列)に変換する必要があります.
    function foo(wraped){
     	wraped.a=42 
    }
    let wrap={a:2}
    let ref=wrap
    foo(wrap)
    
    wrap.a //42
    ref.a //42
    Number()を使う方法もありますが、一般的な良い習慣ではありません。この法律を勇敢にスキップしましょう。

    2.6定理

  • JavaScript配列は、すべてのタイプの値をデジタルインデックスとして作成します.
  • 文字列は「類似配列」ですが、それ自体の特性上、配列として扱う場合は注意してください.
  • JavaScriptの数字には、「整数」と「浮動小数点数」が含まれます.
  • nullタイプにはnullの値が1つしかありません.同様に、未定義のタイプも未定義です.
    void演算子は、すべての値を未定義に変更します.
  • の数字には、NaN、+Infinity、-Infinity、-0などの特殊な値があります.
  • 単純スカラー元の値(文字列、数字など)は、値-コピー合成値(オブジェクトなど)から転送-コピー割当/転送値
  • からなる.