ゲストはいくつかの簡単なjavascript方法を来ますか?

3579 ワード

少しばかり話す
いくつかの私が最近出会った感じの役に立つjs方法を記録して、個人的な理解を加えることにします.観客が笑わないでください.あなたにとってとても簡単かもしれません.
彼らはそれぞれ
  • hasOwnPropertyは、オブジェクトに固有の属性があるかどうかを判断する.
  • propertyIsEnumerableは、オブジェクトの固有属性が列挙可能かどうかを判断する.
  • applycallの使い方.
  • 一つずつ来ます.
    1.ハスOwnPropertyhasOwnPropertyは、オブジェクトに名前が与えられた属性があるかどうかを判断するために用いられる.この方法では、オブジェクトのプロトタイプチェーンにこの属性があるかどうかを検出できません.例をあげる
    > var str = "javascript";
    > str.hasOwnProperty("split")
    false
    
    > String.prototype.hasOwnProperty("split")
    true
    
    プロトタイプチェーンにはsplitという属性がありますが、固有の属性ではないので、結果はfalseです.strは実際にこの方法を呼び出すことができます.
    > str.split('')
    [ 'j', 'a', 'v', 'a', 's', 'c', 'r', 'i', 'p', 't' ]
    
    もう一つ例をあげます
    > var str = {x: 1}
    undefined
    > str.hasOwnProperty("x")
    true
    > str.hasOwnProperty("toString")
    false
    
    toStringObject.prototypeというプロトタイプから継承された属性であるので、ここでfalseに戻る.xは、自身の属性であるため、trueに戻る.
    2.propertyIs Enumerable
    この方法は、オブジェクト属性が列挙可能かどうかを判断するために使用されます.
    エニュメレーションとは何ですか?forができるとまとめたのは です. 私たちはES 5の後に対応する方法を設定することができます.これらの方法は後で機会にします.
    JSを少しよく知っていますが、私たちのすべての対象はObject.prototypeというプロトタイプのオブジェクトから継承されています.私たちは次のスクリプトを見ます.
    > var a = {x: 2}
    undefined
    
    > a.x
    2
    
    > a.toString()
    '[object Object]'
    
    > for (var i in a) { console.log(i)}
    x
    undefined
    
    見えますか?オブジェクトaは、属性xを有し、aは同時にtoString方法を呼び出すこともできるが、ここでの属性xは、エニュメレーション可能であり、属性toStringはエニュメレーションできないものである(これはプロトタイプのところに既に設定されているものである).
    そこで、私達は便利にこのように判断することができます.
    > a.propertyIsEnumerable('x')
    true
    
    > a.propertyIsEnumerable('toString')
    false
    
    3.アプリとコール
    この二つのものを簡単に分けると、パラメータの受け取り方が違います.callによって受信されるパラメータは であるべきであり、applyによって受信されるパラメータは である.
    簡単な例を挙げると、オブジェクトを呼び出す方法の一つがあれば、直接に . を介して呼び出すことができる.
    たとえば、私たちは二つの配列をつなぎ合わせる時、こうしてもいいです.
    > var a = [1,2,3,4,5,6]
    undefined
    > a.concat([2,3,4,5,6])
    [ 1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6 ]
    
    しかし、私達はまたこのようにすることができます.
    直接Arayプロトタイプで呼び出します.callバージョン
    fun.call(thisArg,arg 1,arg 2,arg 3)
    > Array.prototype.concat.call(a, [2,3,4,5,6])
    [ 1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6 ]
    
    applyバージョン
    fun.apply(thisArg,[args Aray])
    > Array.prototype.concat.apply(a, [[2,3,4,5,6], [2,3,4,5,6]])
    [ 1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6 ]
    
    ちょっと深く考えてみます.
    もちろん、大胆になればいいです.
    Array.prototype.concat(a, [2,3,4,5,6])
    [ 1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6 ]
    
    私が行きますが、この何かの鬼は前のa.concat([2,3,4,5,6])と同じですか?ちょっと分析してみます.
    まず、このような連結結果を見ます.a.concat([2,3,4], [5,6])a.concat([2,3,4,5,6])の結果と同じであり、[ 1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6 ]。は複数のパラメータを受信できることを示している.そうすればconcatの結果も[].concat(a, [2,3,4,5,6])と同じではないですか?あいにく、ここの配列の原型はa.concat([2,3,4,5,6])に等しいです.
    > Array.prototype
    []
    
    換算するとArray.prototypeですので、最終結果は[]と同じです.
    怪しい仕組みです.
    最後に
    これらの方法は比較的簡単で、個人的な理解がついています.うるさいと思わないでほしいです.
    Happy Writing&Coding