Javascriptの詳細
4230 ワード
本文は主にjavascriptの中のいくつかの目立たないところをまとめた.目立たないが、時にはこれらの細部が重要である.知識点は「Javascript権威ガイド第5版」と個人のいくつかの実践経験に由来している.
詳細1:typeofの戻り値
typeofが文字列を返していることはよく知られています(うん!くだらない話).しかし、いくつかの特別なオブジェクトがあり、その戻り値に注意する必要があります.重要な点は、すべてのコンストラクション関数がFunctionのインスタンスであり、Object/string/Array/Date/Number...の内部オブジェクトコンストラクション関数名を含む.次のコードと注釈を参照してください.
詳細2:==,!=,==,!==の違い
==/!= と===/!==唯一の違いは===/!=undefinedとnullは等しいと考えられ、===/!==等しくない!次のコードとコメントを見てください.
詳細3:in,for in,hasOwnProperty,propertyIsEnumerable,isPrototypeOf
in:オブジェクトにその属性またはメソッドが含まれているかどうかを判断します(オブジェクトのすべての属性、内部タイプの属性またはメソッドを含む:valueOf,toString,toLocalString,hasOwnPropertyなど)
in/for in:オブジェクト内の属性またはメソッドを列挙する(オブジェクトプロトタイプの属性またはメソッドおよびオブジェクトインスタンスの属性またはメソッドを含むが、内部タイプの属性またはメソッドは含まない:valueOf,toString,toLocalString,hasOwnPropertyなど.ただし、内部タイプの属性またはメソッドを書き換えると、firefoxは書き換えられた属性を検出することができ、IEはできない点が不思議である).
hasOwnProperty(x):このメソッドはObjectから継承され、現在のオブジェクトにxという名前のプロパティまたはメソッド(プロトタイプから中継されたプロパティを含まない)が含まれているかどうかを判断します.
propertyIsEnumerable(x):Objectから継承され、属性xがインスタンス属性(プロトタイプから継承された属性またはメソッドを含まない)であり、その属性が列挙できるかどうかを判断します.
isPrototypeOf(o):現在のオブジェクトがoのプロトタイプオブジェクトかどうかを判断します.
具体的には、次のコードとコメントを参照してください.
詳細4:varがグローバル、ローカル変数に与える影響
変数がローカル作用領域で定義されると、varを持たずにグローバル変数として定義されます.コードは次のとおりです.
詳細5:||演算子の付与文での役割
|代入語名に適用すると、各式が左から右に検出され、trueの最初の式が返されます.そうしないと、最後の式が返されます.
詳細6:「」、null、undefinedは論理式でfalseを返します.
コードとコメントを直接見ましょう.
詳細1:typeofの戻り値
typeofが文字列を返していることはよく知られています(うん!くだらない話).しかし、いくつかの特別なオブジェクトがあり、その戻り値に注意する必要があります.重要な点は、すべてのコンストラクション関数がFunctionのインスタンスであり、Object/string/Array/Date/Number...の内部オブジェクトコンストラクション関数名を含む.次のコードと注釈を参照してください.
alert(typeof null); // "object"
alert(typeof undefined);// "undefined"
alert(typeof [1,2,3]);// "object"
alert(typeof function(){});// "function"
alert(typeof Object);// "function"。 Object , typeof String/Array... function
詳細2:==,!=,==,!==の違い
==/!= と===/!==唯一の違いは===/!=undefinedとnullは等しいと考えられ、===/!==等しくない!次のコードとコメントを見てください.
alert(null==undefined);// true;
alert(null!=undefined);// false;
alert(null===undefined);// false;
alert(null!==undefined);// true;
詳細3:in,for in,hasOwnProperty,propertyIsEnumerable,isPrototypeOf
in:オブジェクトにその属性またはメソッドが含まれているかどうかを判断します(オブジェクトのすべての属性、内部タイプの属性またはメソッドを含む:valueOf,toString,toLocalString,hasOwnPropertyなど)
in/for in:オブジェクト内の属性またはメソッドを列挙する(オブジェクトプロトタイプの属性またはメソッドおよびオブジェクトインスタンスの属性またはメソッドを含むが、内部タイプの属性またはメソッドは含まない:valueOf,toString,toLocalString,hasOwnPropertyなど.ただし、内部タイプの属性またはメソッドを書き換えると、firefoxは書き換えられた属性を検出することができ、IEはできない点が不思議である).
hasOwnProperty(x):このメソッドはObjectから継承され、現在のオブジェクトにxという名前のプロパティまたはメソッド(プロトタイプから中継されたプロパティを含まない)が含まれているかどうかを判断します.
propertyIsEnumerable(x):Objectから継承され、属性xがインスタンス属性(プロトタイプから継承された属性またはメソッドを含まない)であり、その属性が列挙できるかどうかを判断します.
isPrototypeOf(o):現在のオブジェクトがoのプロトタイプオブジェクトかどうかを判断します.
具体的には、次のコードとコメントを参照してください.
// Rectangle rectangle;
function Rectangle(w,h){
this.w=w;
this.h=h;
}
Rectangle.prototype.area=function(return this.w*this.h);
Rectangle.prototype.color="red";
var rectangle=new Rectangle(10,20);
rectangle.border=1;
// in
alert("w" in rectangle);//true
alert("color" in rectangle);//true
alert("border" in rectangle);//true
alert("toString" in rectangle);//true
alert("isOwnProperty" in rectangle);//true
// for in
var names=[];
for(var name in rectangle){
names.push(name);
}
alert(names);// :['w','h','area','color','border']( )
// hasOwnProperty
alert(rectangle.hasOwnProperty("w"));//true
alert(rectangle.hasOwnProperty("color"));//false
alert(rectangle.hasOwnProperty("area"));//false
alert(rectangle.hasOwnProperty("border"));//true
// propertyIsEnumerable
alert(rectangle.propertyIsEnumerable("w"));//true
alert(rectangle.propertyIsEnumerable("color"));//false
alert(rectangle.propertyIsEnumerable("area"));//false
alert(rectangle.propertyIsEnumerable("border"));//true
// isPrototypeOf。 A.prototype B B.constructor==A
alert(Rectangle.prototype.isPrototypeOf(rectangle));//true:rectangle.constructor==Rectangle
alert(Function.prototype.isPrototypeOf(Object));//true:Object.constructor==Function
詳細4:varがグローバル、ローカル変数に与える影響
変数がローカル作用領域で定義されると、varを持たずにグローバル変数として定義されます.コードは次のとおりです.
(function(){
global="I'm global variable!";
var local="I'm local variable!";
})();
alert(global);//I'm global variable!
alert(local);//Error occor:local is undefined
詳細5:||演算子の付与文での役割
|代入語名に適用すると、各式が左から右に検出され、trueの最初の式が返されます.そうしないと、最後の式が返されます.
var a,b=0,c=1,d;
x=a||b||c||d;//x 1; x=c;
var e=0,f=0,g=0,h;
y=e||f||g||h;//y undefined; y=h;
詳細6:「」、null、undefinedは論理式でfalseを返します.
コードとコメントを直接見ましょう.
alert(""||null||undefined);//false