ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 解析における理解しにくい 11 の問題_javascript のヒント
1. 元の値と基準値
元の値はスタックに保存され、参照値はヒープに保存されます。たとえば、次のプログラム:
var num = 10;
var bol = true;
var str = "abc";
var obj = new Object();
var arr = ['a','b ','c'];
var person = new person(100,"バカの座右の銘",25);
2.未定義および null
未定義: 変数は未定義です。
の排他的な値です。null: 参照は割り当てられていません。これは Null 型の排他的な値です。
typeof(未定義)== 未定義;
typeof(null) == オブジェクト;
未定義==null;
未定義!==null;
null オブジェクトのインスタンス == false;
未定義のオブジェクトのインスタンス == false;
未定義型と Null 型がありますが、次の例は、これら 2 つの型が非表示であること、つまりそれらの値のみを使用できることを示しています。
alert(未定義の未定義インスタンス);alert(Null の null インスタンス);
3. 擬似配列
特徴:1) 長さ属性があります。
2) 配列のようにインデックス順にデータにアクセスします。
擬似配列は Array.prototype.slice:
を通じて実際の配列に変換できます。
var faceArray = {0: 'a', 1: 'b', length: 2}//標準の疑似配列;var realArray = Array.prototype.slice.call(fakeArray);
JS の疑似配列: argument、node.childNodes、document.getElementsByTagName()...
IEの問題: IEのnode.childNodesをスライスで変換できません。
Jquery の擬似配列: Jquery 自体は擬似配列です:
alert($('.class1').length); alert($('.class1').[0].tagName); 4. 単純型リテラルについて
var a = 1; b = true、c = "ccc"; リテラルには型があるようです
alert(typeof a);//number
alert(typeof b);//booleanalert(typeof c);//string
ただし、instanceof
では測定できません
alert(数値のインスタンス)//false
アラート(ブール値のインスタンス)//false
アラート(オブジェクトのインスタンス)//falsealert(c インスタンスオブ String)//false
alert(c オブジェクト インスタンス)//false
5. 関数のプロトタイプ属性とオブジェクト インスタンスの内部プロトタイプ属性
各関数 (コンストラクター) にはプロトタイプ属性があり、各オブジェクト インスタンスには、コンストラクターのプロトタイプ属性を指す、目に見えない (mozilla が公開し、__proto__ を通じて取得できる) 内部プロトタイプ属性があります。プロトタイプ チェーンを構成する独自のプロトタイプ属性。オブジェクトが最上位のオブジェクトであるため、すべてのプロトタイプ チェーンは最終的に Object.prototype をポイントします。アクセスできない場合は、オブジェクト インスタンス自体から検索を開始します。見つかった場合は、Object.prototype.prototype == null になるまでプロトタイプ チェーンに沿って上向きに検索します。
6. コンストラクターのちょっとした秘密
コードをコピーします
コードをコピー
◦組み込みオブジェクト object obj を作成し、初期化します。
◦ p の内部 [[Prototype]] を Person.prototype;
にポイントします。◦ p をこのように使用し、引数パラメーターを使用して Person の内部 [[Call]] メソッドを呼び出します。つまり、 Person 関数本体を実行して戻り値が返されない場合は、未定義が返されます。 🎜>
◦前のステップでオブジェクト型が返された場合は、この値を p に返し、そうでない場合は、obj を返します。 8. オブジェクトの所有プロパティと継承プロパティ組み込みオブジェクト fn を作成します;
fn の内部 [[Prototype]] を Function.prototype に設定します;内部 [[Call]] 属性を設定します。これは、関数呼び出しのロジックを処理する内部実装メソッドです。 (関数本体を指すと単純に理解されます);
関数にパラメータがない場合は、fn.length を funArgs.length に設定します。
fn.prototype のコンストラクターは fn 自体を指します。
fn に戻ります
10.instanceof
の原則 a が B のインスタンスであるかどうかを確認するには、B のプロトタイプ (コンストラクターの prototype 属性) が指すオブジェクトが a のプロトタイプ チェーン上にあるかどうかを確認する必要があります。
11. 関数とオブジェクトについての推測
alert(FunctioninstanceofFunction);//truealert(FunctioninstanceofObject);//true
alert(ObjectinstanceofFunction);//truealert(ObjectinstanceofObject);/ /true
長い間考えてきたけど、まだよく考えていない...