覚えていない20と1のJavascriptガジェット

この記事では、忘れられがちなJavascript ES3の機能について説明しています。 それらのいくつかは言語の奇妙なものであり、他のものは私の意見では覚えにくい特性にすぎません。 ここでは、言語の説明へのリンク(applyとcallの違いなど)を提供できるものではなく、マニュアルにはほとんど記載されていないものをここで収集しようとしました。



始める前に、この記事で証明しようとしない3つのポイントを明確にしたいと思います。



1.これらの機能がすべて忘れられているとか、本質的にそうだとか言っているわけではありません。 個人的には難しいと思います(たとえば、メモリ内で更新されないと詳細は忘れられます)。 彼らはあなたのために簡単にすることができます。 それでも、このコレクションは私だけでなく役に立つと思う。



2.言語のこれらの部分を使用する必要があると言っているのではなく、それらを知っていれば、他の開発者のコ​​ードを簡単に読むことができると主張するだけです。 それらのほとんどは有用ですが、コード内に存在することが常に最良の解決策とは限りません。



3.私はES5の機能に影響を与えません。厳密でも、一般的でも、ES6全般でもありません。 それらについては後で説明します。 説明した機能の一部は、ECMAScriptの将来のバージョンで変更または開発されていることを認めます。



それでは、始めましょう。



1. −0 = +0 = 0(または厳密なゼロは正および負のゼロに等しい)



JavaScriptの値は-0と+0で、どちらの側がゼロになったかを示します。 ただし、比較すると厳密なゼロに変換されます。

jsfiddle.net/codylindley/6phD9/light

console.log(-0); //logs 0 console.log(+0); //logs 0 console.log(-0 === +0); //logs true console.log(0 === -0); //logs true console.log(0 === +0); //logs true
      
      







2. newという単語は、コンストラクターを独立して実行できます



引数なしのコンストラクターの呼び出しは、コンストラクターの後に括弧を書くことなく、1つの新しいキーワードで実行できます。

jsfiddle.net/codylindley/nHCvx/light

 var Human = function(){ this.type = 'human'; console.log('I was called'); }; new Human; //       "I was called" console.log((new Human).type); // human (  )
      
      







3. instanceofはプリミティブでは機能しません



instanceof演算子は、文字列、数値、および論理変数に対してfalseを返します。 オブジェクト(つまり、プリミティブのラッパー)に配置されている場合、正常に機能します。 nullおよびundefinedにはオブジェクトラッパーがないことに注意してください。

jsfiddle.net/codylindley/bpJjZ/light



 //instanceof     console.log("" instanceof String); // false console.log(3 instanceof Number); // false console.log(false instanceof Boolean); // false //instanceof     () console.log(new String() instanceof String); // true console.log(new Number() instanceof Number); // true console.log(new Boolean() instanceof Boolean); // true console.log([] instanceof Array); // true console.log({} instanceof Object); // true console.log(/foo/ instanceof RegExp); // true // , console.log([] instanceof Object); // true
      
      







4. Typeof演算子-非ユニバーサルおよびエラーあり



typeofの適用可能性はプリミティブに限定されていますが、エラーもあります:(typeof null ===“ object”)== trueです。これがチェックの自己記述および松葉杖の方法が最適理由です。

jsfiddle.net/codylindley/U64aZ/light



 //    string, number,  boolean console.log(typeof ""); // "string" console.log(typeof 4); // number console.log(typeof true); // boolean console.log(typeof undefined); // undefined // ,    null console.log(typeof null); //?? !  Object
      
      







5. false値からのブールオブジェクトは常にtrue



 console.log(!!(new Boolean(false)) ) //true
      
      





new Boolean(new Boolean(false))-ラッパーオブジェクトを返すため、falseではありません。 そして、オブジェクト(手を見てください)は常にtrueに変換されます。 したがって、名前付きのソフィズムは、一般にコンストラクタの任意の値を指します。 そして、プリミティブ(NaN、false、0、null、undefined、および '')と式の値のみがtrue falseを作成します。



6.引数または関数パラメーター?



引数は、関数が呼び出されるときに使用されます。 関数に引数を渡します。 パラメータは、関数が定義されるときに設定されます。 したがって、パラメータは関数を定義するために使用されると言われています。 これらの単語は同じ意味で使用されますが、それらの違いを知っていると便利です。

jsfiddle.net/codylindley/8Zkdd/light



 var myFunction = function(x,y,z){ //x,y,z -  return x+y+z }; myFunction(1,2,3); //1,2,3 - 
      
      







7.パラメーターの値を変更しても、引数の値は変更されません



たとえば、関数に配列を渡す場合、パラメーター値を変更しても元のパラメーター値は変更されません。

jsfiddle.net/codylindley/c2xb4/light

 var myFunction = function(parameter){ parameter = undefined; //    undefiend console.log(parameter); }; var myArray = [1,2,3]; myFunction(myArray); // myFunction,   //myArray -  undefined ,   ,        console.log(myArray); //logs [1,2,3]
      
      







8.関数としてブール()を呼び出すと、値がブールに変換されます



引数を指定してコンストラクターを関数(newなし)として呼び出すと、コンストラクターが論理的なものに変換されます。



jsfiddle.net/codylindley/4wQLd/light

 //,  ,  false console.log(Boolean(undefined)); console.log(Boolean(null)); console.log(Boolean(0)); console.log(Boolean('')); console.log(Boolean(NaN)); //,  ,  true console.log(Boolean(1)); console.log(Boolean('false')); console.log(Boolean([])); console.log(Boolean({})); console.log(Boolean(function(){})); console.log(Boolean(/foo/));
      
      





もちろん、二重反転!!()でも同じ効果が得られます。 しかし、それは私を好きになるほど十分に表現力がありません。

jsfiddle.net/codylindley/jNPvH/light

 //,  ,  false console.log(!!undefined); console.log(!!null); console.log(!!0); console.log(!!''); console.log(!!NaN); //,  ,  true console.log(!!1); console.log(!!'false'); console.log(!![]); console.log(!!{}); console.log(!!function(){}); console.log(!!/foo/);
      
      







9.新しい戻りプリミティブなしでプリミティブオブジェクトのコンストラクターを呼び出す



jsfiddle.net/codylindley/ymGmG/light

 // true console.log(String('foo') === 'foo'); console.log(Number(5) === 5); console.log(Boolean('true') === true); // false,      console.log(new String('foo') === 'foo'); console.log(new Number(5) === 5); console.log(new Boolean('true') === true);
      
      







10. Object()はプリミティブのオブジェクトラッパーを作成します



他のコンストラクタとは異なり、Object()はラッパーでプリミティブをラップします。

jsfiddle.net/codylindley/tGChw/light

 // number    console.log(Object(1) instanceof Number); //logs true // string    console.log(Object('foo') instanceof String); // boolean    console.log(Object(true) instanceof Boolean);
      
      







11.プリミティブのプロパティにアクセスするとエラーが隠される





誰が言っても、すべてがプリミティブで完全に書かれています。 読書に問題はありません。 常に未定義で読み取られることを除きます。 その理由は、プリミティブのオブジェクトラッパーが作成されないためです

jsfiddle.net/codylindley/E7GGK/light

 //  var N = 5; var S = 'foo'; var B = true; //   ,  ,       N.test = 'test'; S.test = 'test'; B.test = 'test'; //,     console.log(N.test); // undefined console.log(S.test); // undefined console.log(B.test); // undefined
      
      







12. deleteは継承されたプロパティを削除しません



jsfiddle.net/codylindley/xYsuS/light



 var Person = function(){}; //  Person Person.prototype.type = 'person'; //  var cody = new Person(); // Person delete cody.type // (?) type console.log(cody.type) // person,       
      
      







13.文字列のオブジェクトシェルは配列に似ています



文字列オブジェクトのシェルは配列のようなオブジェクトを作成するため、(つまりconsole.log(new String( 'foo')); // foo {0 = "f"、1 = "o"、2 =を出力します“ O”})、文字インデックスを使用できます(IE7-を除く)。

jsfiddle.net/codylindley/7p2ed/light



 //  var foo = 'foo'; //      console.log(foo[0]) // "f",      {0="f", 1="o", 2="o"} //       console.log(foo['length']); // 3
      
      







14.数値のプリミティブからプロパティへのアクセス



数値のプリミティブの後の最初のポイントは小数点として認識され、プロパティにアクセスするという意味でポイントと競合します。 しかし、2番目...

jsfiddle.net/codylindley/Pn6YT/light



 //  console.log(2['toString']()); //logs 2 //       . console.log(2..toString()); //logs 2 //    console.log((2).toString()); //logs 2
      
      







15. Array.lengthは書き換え可能です。これには副作用があります



lengthプロパティを明示的に割り当てることにより、一連の未定義の値を配列の最後に追加したり、配列を短くしたりできます。

jsfiddle.net/codylindley/9Pp9h/light



 var myArray1 = []; myArray1.length = 3; console.log(myArray1); // [undefined, undefined, undefined] //   myArray2 = [1,2,3,4,5,6,7,8,9] myArray2.length = 1; console.log(myArray2); // [1]
      
      







16.論理演算子「||」 最初の真の値に機能します



このステートメントの左の引数の値がtrueに変換される場合、右の値は計算されません。これは比fig的に「短絡」と呼ばれます(短絡、短絡、またはこの場合-「短絡」)。 実際、最初の値でtrueが検出されると、右側の関数や式には触れず、非表示のセッターの値は変更されません。

jsfiddle.net/codylindley/NUKKZ/light



 //  ,   true,     var foo = false || 0 || '' || 4 || 'foo' || true; console.log(foo); // 4,     //       
      
      







17.論理演算子「&&」は最初のfalse値まで実行されます



同様に、逆論理値を使用すると、最初のファウルが含まれるまで実行されます。

jsfiddle.net/codylindley/DEbk5/light



 //  ,   false,     var foo = true && 'foo' && '' && 4 && 'foo' && true; console.log(foo); // '',      false
      
      







18. nullを使用する場合と、未定義の場合



簡単に言えば、nullは「なし」の値であり、undefinedは非常に「なし」そのものです。つまり、プリミティブ、オブジェクト、プロパティ、空の参照がありません。 通常の実践では、開発者はnullを使用して明示的に値の欠如を示し、undefinedを使用してJavascriptに任せて「発生しなかった」ことを示さないことをお勧めします。 プログラムでヌルを使用する場合、スクリプトメッセージと意識的なヌル設定の痕跡を区別します。



19.デフォルトでは未定義



undefinedは、値がないことを示します。 次の例では、値を作成しません(未定義を返します)。

jsfiddle.net/codylindley/3buPG/light

jsfiddle.net/codylindley/3buPG/light

 //    -    var foo; console.log(foo); //undefined //      undefined console.log(this.foo); //undefined //   ,  ,   undefined- var myFunction = function f(x){return x} console.log(myFunction()); //undefined //  undefined,     return  var myFunc = function f(){}; console.log(myFunc()); //undefined
      
      







20.演算子ができない場合に式が機能する



式は値を返し、演算子はアクションを実行します。これは、条件式のifと3項論理演算子の違いの例で明確に示されています。 関数パラメーターを指定するときに「If」が機能しない場合は、条件式を使用できます。

jsfiddle.net/codylindley/SSh68/light

 var verify = true; // if     if(verify){console.log('verify is true');} //   ,       //   (  --..) var check = verify ? console.log('verify is true') : console.log('verify is false'); //    console.log(verify ? 'verify is true' : ' verify is false');
      
      







21.演算子の場所++および-



演算子が接頭辞(変数の前)である場合、値が最初に変更され、次に式に返されます。 後置の場合-初​​期値は式に返されますが、変数は返される前に変更されます。

jsfiddle.net/codylindley/QzG9w/light

 http://jsfiddle.net/codylindley/QzG9w/light/ var boo = 1; var foo = 1; console.log(boo++); // 1,   console.log(boo)   2 console.log(++foo); // 2,    foo
      
      






All Articles