javascript文法の要約

6576 ワード

  • ""0NaNundefinednullは、if ()において自動的にfalseに変換され、残りはtrueである.
  • StringIntに切り替えるには、最も速い方法var str = '1'; +strが必要です.演算には、括弧を入れる必要があります.
  • に文字列が参加する加算演算があると、全部1 + (+str)タイプになり、他の演算法則Stringは全部(-,*,/,%)タイプの演算になります.
  • Numberは値タイプの空の値を表し、undefinedはポインタタイプの空の値を表しています.
  • 正規表現、関数、オブジェクト、配列はすべて参照タイプで、残りはすべて値タイプです.
  • 参照タイプとは、nullvar obj = {}に相当し、0x01010101 <==> {}; obj = 0x01010101に伝達されるものはvar obj2 = objであり、0x01010101は仮定のポインタである.
  • 匿名関数の呼び出し:
  • (function(){})();  //   
    (function(){}());  //   
    ~function(){}();   //   
    +function(){}();   //   
    function(){}();    //   
    //  4        
    
  • 0x01010101は、方法と同じ行で起動される:
  • function ClassA() { }
    ClassA.prototype.say = function() { console.log('prototype'); }
    ClassA.say = function() { console.log('constructor'); }
    new ClassA().say();    // prototype        (new ClassA()).say()
    new ClassA.say();      // constructor      new (ClassA.say())
    
  • new変数を検出するためのタイプ:
  • typeof 'a'              => string
    typeof 1/1.1/NaN        => number
    typeof true             => boolean
    typeof undefined        => undefined
    typeof function (){}    => function
    typeof {}、[]、null、/a/       => object
    
  • typeofは、オブジェクトがどのクラスまたは親クラスに属するかを識別するために使用される:
  • function Class1 () {}
    function Class2 () {}
    var class1 = new Class1;
    class1 instanceof Class1;    => true
    class1 instanceof Object;    => true
    class1 instanceof Class2;    => false
    
  • 変数のスコープアップ:
  • alert(a);    //   ,a   
    
    alert(a);    // undefined
    var a = 'a';    
    // ----------     ----------
    var a;
    alert(a);
    a = 'a';
    
  • 関数のスコープアップ:
  • b();          //     
    function b() {
          alert('b');
    }
    c();          // c = undefined,  
    var c = function () {
          alert('c');
    }
    
  • 類の定義
  • function Class1(name) {
          this.name = name;
    }
    Class1.prototype.setAge = function(age) {
          this.age = age;
    }
    var class1 = new Class1('class1');
    class1.setAge(10);
    
  • 類の継承
  • function Class2(time) {
          Class1.call(this, 'orange');
          this.time = time;
    }
    Class2.prototype = Object(Class1.prototype);
    Class2.prototype.constructor = Class2;
    var class2 = new Class2(10);
    class2.setAge(20);
    
  • instanceofの指さし
  • function Animal() {
           console.log(this); 
    }
    var animal = new Animal();  // this    Animal 
    
    function Animal() {
          console.log(this);
    }
    function Dog() {
          console.log(this);
          Animal.call(this);
    }
    var dog = new Dog();   //    Animal       Dog   this,    this     Dog
    
    var obj = {
          fn: function() {
              console.log(this);
          }
    }
    obj.fn();
    // --------------     ---------------
    var obj = new Object;
    obj.fn = function() {
          console.log(this);
    }
    obj.fn();   // this   obj     Object  
    
    var obj = {
          fns: {
                fn: function() {
                      console.log(this);
                }
           }
    }
    obj.fns.fn();  // this    fns     Object  
    // ----------------     ----------------
    var obj = new Object;
    var fns = new Object;
    fns.fn = function() {
          console.log(this);
    }
    obj.fns = fns;
    obj.fns.fn();
    
    function fn(){
          console.log('outer: ' + this);
          return function () {
                console.log('inner: ' + this);
          }
    }
    var closure = fn.call({});   // outer: Object
    closure();                   // inner: window
    // this             ,          。
    
    function fn() {
         console.log(this);
    }
    fn();     //       ,   this       Global,      window
    
  • thisプロトタイプ、オブジェクトにプロトタイプがありません.
    function Class1() { }
    var instance1 = new Class1;
    console.log(Class1.prototype);     // Object {constructor: function}
    console.log(instance1.prototype);  // undefined
    
    prototype属性を介したオブジェクトアクセスクラスの__proto__:
    function Class1() { }
    var instance1 = new Class1;
    console.log(Class1.prototype);       // Object {constructor: function}
    console.log(instance1.__proto__);    // Object {constructor: function}
    console.log(Class1.prototype === instance1.__proto__);   // true
    
    prototype方法とコンストラクタ内の方法の違い:
    function Class1() {
          this.setName = function (name) {
          }
    }
    Class1.prototype.setAge = function () {
    }
    var instance1 = new Class1;
    var instance2 = new Class1;
    console.log(instance1.setName === instance2.setName);  // false
    console.log(instance1.setAge === instance2.setAge);    // true
    //                          ,
    //                 ,             。
    
    prototype属性と構造関数の属性の違い:
    function Class1() {
          this.name = "";
    }
    Class1.prototype.age = 0;
    var instance1 = new Class1;
    var instance2 = new Class1;
    instance1.name = 'instance1';
    instance2.age = 10;
    console.log(instance1.age);    // 0
    console.log(instance2.age);    // 10
    console.log(instance1);        // Class1 {name: "instance1"}
    console.log(instance2);        // Class1 {name: "", age: 10}
    console.log(instance1.__proto__);  // Object {age: 0, constructor: function}
    console.log(instance2.__proto__);  // Object {age: 0, constructor: function}
    //     ,     ,             ,    ,
    //     __proto__   ,      ,     prototype        。
    
    ・クラス継承中のprototype
    function God() { }
    God.prototype.fly = function() { }
    function Parent() { }
    Parent.prototype = new God;
    Parent.prototype.run = function() { }
    function Children() { }
    Children.prototype = new Parent;
    Children.prototype.walk = function() { }
    var boy = new Children;
    console.log(boy.__proto__);                      // {walk: function}
    console.log(boy.__proto__.__proto__);            // {run: function}
    console.log(boy.__proto__.__proto__.__proto__);  // {fly: function, constructor: function}
    console.log(boy.fly);                            // function () { }
    //            ,         __proto__   ,
    //         ,      __proto__.__proto__ ,          undefined。