ゲストはいくつかの簡単なjavascript方法を来ますか?
3579 ワード
少しばかり話す
いくつかの私が最近出会った感じの役に立つjs方法を記録して、個人的な理解を加えることにします.観客が笑わないでください.あなたにとってとても簡単かもしれません.
彼らはそれぞれ 一つずつ来ます.
1.ハスOwnProperty
2.propertyIs Enumerable
この方法は、オブジェクト属性が列挙可能かどうかを判断するために使用されます.
エニュメレーションとは何ですか?
JSを少しよく知っていますが、私たちのすべての対象は
そこで、私達は便利にこのように判断することができます.
この二つのものを簡単に分けると、パラメータの受け取り方が違います.
簡単な例を挙げると、オブジェクトを呼び出す方法の一つがあれば、直接に
たとえば、私たちは二つの配列をつなぎ合わせる時、こうしてもいいです.
直接Arayプロトタイプで呼び出します.
fun.call(thisArg,arg 1,arg 2,arg 3)
fun.apply(thisArg,[args Aray])
もちろん、大胆になればいいです.
まず、このような連結結果を見ます.
怪しい仕組みです.
最後に
これらの方法は比較的簡単で、個人的な理解がついています.うるさいと思わないでほしいです.
Happy Writing&Coding
いくつかの私が最近出会った感じの役に立つjs方法を記録して、個人的な理解を加えることにします.観客が笑わないでください.あなたにとってとても簡単かもしれません.
彼らはそれぞれ
hasOwnProperty
は、オブジェクトに固有の属性があるかどうかを判断する.propertyIsEnumerable
は、オブジェクトの固有属性が列挙可能かどうかを判断する.apply
とcall
の使い方.1.ハスOwnProperty
hasOwnProperty
は、オブジェクトに名前が与えられた属性があるかどうかを判断するために用いられる.この方法では、オブジェクトのプロトタイプチェーンにこの属性があるかどうかを検出できません.例をあげる> 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
toString
はObject.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