Javascriptの詳細


本文は主にjavascriptの中のいくつかの目立たないところをまとめた.目立たないが、時にはこれらの細部が重要である.知識点は「Javascript権威ガイド第5版」と個人のいくつかの実践経験に由来している.
詳細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