JavaScript基礎--『JavaScript秘密花園読書ノート』

6564 ワード

some thoughts of JavaScript Garden
ここをクリックしてJavaScript-Gardenに転送します.本文は主に私が読んでいるいくつかの思考の総括です.
JavaScriptのすべての変数はオブジェクトとして使用できます.例外:nullとundefinedです.
まず、Numberが点文法を使用するとき、小数点による誤りに注意し、安全な書き方をしなければならない.
    1..toString();
    1 .toString();
    (1).toString();

第二にnullとundefinedがオブジェクトとして使用できないという理解についてお話しします.まずオブジェクトとして使用できない、つまりObjectを使用できない方法です.プロトタイプチェーンの観点から、Object.prototype.proto==nullは一目瞭然であり、nullはもちろんオブジェクトとして使用できないことがわかります.undefinedについては、個人的にはundefinedはJavaScriptプロトタイプチェーンにないと思います.
対象の理解
1、点文法と角括弧文法の使用は、基本的に同じですが、keyが変数の場合は角括弧文法しか使用できません.2、一般的に私たちは{}でオブジェクトを宣言します(new Objectもあるとは言わないでください(--!).属性を追加するときは、通常、点構文または角カッコ構文で直接追加することが多いので、Object.defineProperty(obj,prop,descriptor)で定義することをお勧めします.
    /*
        Object.defineProperty(obj,props, descriptor)
        descriptor {
            configurable: false, //             
            enumerable: false, //      
            writable: false, //      
            value: null, // 
            set: undefined, //  
            get: undefined //  
        }
    }
    */
    var people = {};
    Object.defineProperty(people,'name',{
        enumerable: true,
        configurable: true,
        writable: false,
        value: 'daiqingyun'
    });

現在比較的熱いMVVMフレームワークの中の双方向バインディングはまさにこの方法を用いて、Vue双方向データバインディングの原理
オブジェクトのプロパティを削除するために主に使用されるdeleteメソッド
プロトタイプチェーンゲート
関数#カンスウ#
function bar() {}
         ,        ,                 。

var foo = function bar() {}
           ,        。
     bar     。

this
実はこの私の理解では、誰がそれを呼び出して、それは誰を指しています.比較的特殊なのは、newのコンストラクション関数で、thisが新しいコンストラクションのオブジェクトを指します.thisの変更方法:apply(thisArg,[argsArray]),call(thisArg,arg 1,arg 2...),bind(thisArg,arg 1,arg 2...)
    //apply call                 。
    //bind     
    if(!function(){}.bind) {
        Function.prototype.bind = function(context){
           var self = this;
           var args = Array.prototype.slice.call(arguments,1);
           return function(){
               return self.apply(context, args);
           }
        }
    }

クローズドパッケージ
単純な閉包形式
    function some(start) {
        //  li     ,    add get       。
        var li = start;
        return {
            add: function() {
                li++;
            },
            get: function() {
                return li;
            }
        }
    }

Argumentsオブジェクト
1、arguments      。
2、     :[].slice.call(arguments);
3、arguments         ,  arguments     getter setter  。
4、    arguments.callee      。

アクティブドメイン
1、es5        ,       。
2、JavaScript         ,                        。
3、              。(  var        )
4、      。
5、     foo     :          var foo    --》          foo --->         foo --->   
6、    ,    IIFE(      ) (function(){}())、(function(){})()、+function(){}()。
7、          [   ](http://blog.leapoahead.com/2015/09/15/js-closure/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io)

を選択します.
1、      ==,  ===。       
2、        =      ,             。       :
    function copy(data) {
        var type = Object.prototype.toString.call(data);
        if(type === '[object Array]') {
            var temp = [];
            var length = data.length;
            for(var i = 0; i < length; i++) {
                temp.push(data[i]);
            }
            return temp;
        }
        else if(type === '[object Object]') {
            var temp = {};
            for (var p in data) {
                if (data.hasOwnProperty(p)) {
                    temp[p] = data.p;
                }
            }
            return temp;
        }
        else {
            return data;
        }
    }
3、typeof               ,            object。
4、instanceof            ,              ,        typeof      。
5、          ,   Object.prototype.toString.call(); --> '[object ****]'
6、      : '' + 10
7、     : + '10'
8、     : !!'foo'