學(xué)習(xí)YUI.Ext 第三天
更新時(shí)間:2007年03月10日 00:00:00 作者:
對(duì)于以前很多混淆不清的知識(shí),有必要再梳理一下:就從最基礎(chǔ)的變量開(kāi)始說(shuō)起。
1.。變量variable
a.全局變量Global Variable 和 局部變量 Private Variable
加var和不加var是有區(qū)別的
--》如果不用關(guān)鍵字var,聲明一個(gè)變量,那么這個(gè)是全局變量,任何子函數(shù)都可以訪問(wèn),就算是跳出花括號(hào)的地方,亦可被訪問(wèn);
--》如果使用關(guān)鍵字var,則從所在的“花括號(hào){}”起,全體函數(shù)都可以訪問(wèn)該變量,如:
function foo(){
i=8 //Global Variable
alert(i)
}
function foo2(){
var i=88 //在此花括號(hào)下都可訪問(wèn)變量i
alert(i);
child()
function child(){alert(i)}
}
foo();foo2()
alert(i) //這里的i還是8
值得注意是function是編譯期的對(duì)象,必須執(zhí)行或?qū)嵗拍茉趦?nèi)存中分配這一變量。
全局變量習(xí)慣以_開(kāi)頭;p.s全部變量最好慎用,你很知道這個(gè)變量在那里何時(shí)發(fā)生變化!
-------》參見(jiàn) js手冊(cè):
“盡管并不安全,但聲明語(yǔ)句中忽略 var 關(guān)鍵字是合法的 JScript 語(yǔ)法。這時(shí),JScript 解釋器給予變量全局范圍的可見(jiàn)度。當(dāng)在過(guò)程級(jí)中聲明一個(gè)變量時(shí),它不能用于全局范圍;這種情況下,變量聲明必須用 var 關(guān)鍵字。”
b.變量的數(shù)據(jù)類型 the types of variable
Jscript 有三種主要數(shù)據(jù)類型、兩種復(fù)合數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型。
主要(基本)數(shù)據(jù)類型是:
字符串
數(shù)值
布爾
復(fù)合(引用)數(shù)據(jù)類型是:
對(duì)象
數(shù)組
特殊數(shù)據(jù)類型是:
Null
Undefined
下面簡(jiǎn)述一下JavaScript中的各種對(duì)象類型:
Native Object: JavaScript語(yǔ)言提供的不依賴于執(zhí)行宿主的對(duì)象,其中一些是內(nèi)建對(duì)象,如:Global、Math;一些是在腳本運(yùn)行環(huán)境中創(chuàng)建來(lái)使用的,如:Array、Boolean、Date、Function、Number、Object、RegExp、Error。
Build-in Object: JavaScript語(yǔ)言提供的不依賴于執(zhí)行宿主的內(nèi)建對(duì)象,如:Global、Math;內(nèi)建對(duì)象都是Native Object。
Host Object:JavaScript語(yǔ)言提供的任何依賴于宿主環(huán)境的對(duì)象,所有非Native Object的對(duì)象都是宿主對(duì)象,如:IE中的window,WScript中的wscript實(shí)例,任何用戶創(chuàng)建的類。
****如何檢查對(duì)象類型?******
1.typeof()
typeof 運(yùn)算符把類型信息當(dāng)作字符串返回。typeof 返回值有六種可能: "number," "string," "boolean," "object," "function," 和 "undefined."
2. val instanceof Array
返回一個(gè) Boolean 值,指出對(duì)象是否是特定類的一個(gè)實(shí)例。
例如用到檢查 數(shù)組或日期類型的時(shí)候(事實(shí)上,任何類型都允許,見(jiàn)例),必須使用instance of + class name(不用引號(hào)),例:
function foo(){}
var f = new foo();
alert(f instanceof foo2) //false
3.constructor
constructor 的用法感覺(jué)跟instance的用法一樣,只不過(guò)不返回boolean值
x = new String("Hi");
if (x.constructor == String)
// 進(jìn)行處理(條件為真)。
*******var i={}是什么類型?****
答案:object類型 等價(jià)于var i = new Object
Object對(duì)象是一切對(duì)象的載體,有點(diǎn)想父類吧
Object 對(duì)象很簡(jiǎn)單,
它就只有兩個(gè)property和兩個(gè)method
這兩個(gè)property是:
prototype
constructor
這兩個(gè)function是:
toString()
valueOf()
那么var obj = new MyObject()怎么文本化呢?其實(shí)也很簡(jiǎn)單的,obj的文本化定義如下:
var obj =
{
Properties1 : 1, Properties2 : '2', Properties3 : [3],
Method1 : function(){ return this.Properties1 + this.Properties3[0];},
Method2 : function(){ return this.Preperties2; }
};
類實(shí)例文本化定義的語(yǔ)法為,用一對(duì)"{}"表示類,也就說(shuō)"{}"完全等價(jià)于"new Object()"。然后"{}"內(nèi)按"key:value"組織屬性和方法,key可以是任意[A-Za-z0-9_]的字符組合,甚至數(shù)字開(kāi)頭都是合法的@_@,value是任何的合法的文本化JavaScript數(shù)據(jù),最后每個(gè)鍵值對(duì)用","來(lái)分隔就行了。
通常用于JSON交換數(shù)據(jù)。
*******undefined 的兩種含義*****
1.undefined關(guān)鍵字 2.undefined屬性
聲明了變量,但沒(méi)賦過(guò)值,是屬于第一種的情況;
完全沒(méi)有聲明,就跑出一個(gè)變量參與運(yùn)算,它的數(shù)據(jù)類型是第二種情況;
兩個(gè)相同名字卻不同含義,建議下一版本改名。
var declared; //聲明變量。
if (declared == undefined) //改為uninitialized沒(méi)初始化 會(huì)更準(zhǔn)確,js is loose language indeed!
document.write("declared has not been given a value.");
if (typeOf(notDeclared) == "undefined")
document.write("notDeclared has not been defined.");
1.。變量variable
a.全局變量Global Variable 和 局部變量 Private Variable
加var和不加var是有區(qū)別的
--》如果不用關(guān)鍵字var,聲明一個(gè)變量,那么這個(gè)是全局變量,任何子函數(shù)都可以訪問(wèn),就算是跳出花括號(hào)的地方,亦可被訪問(wèn);
--》如果使用關(guān)鍵字var,則從所在的“花括號(hào){}”起,全體函數(shù)都可以訪問(wèn)該變量,如:
function foo(){
i=8 //Global Variable
alert(i)
}
function foo2(){
var i=88 //在此花括號(hào)下都可訪問(wèn)變量i
alert(i);
child()
function child(){alert(i)}
}
foo();foo2()
alert(i) //這里的i還是8
值得注意是function是編譯期的對(duì)象,必須執(zhí)行或?qū)嵗拍茉趦?nèi)存中分配這一變量。
全局變量習(xí)慣以_開(kāi)頭;p.s全部變量最好慎用,你很知道這個(gè)變量在那里何時(shí)發(fā)生變化!
-------》參見(jiàn) js手冊(cè):
“盡管并不安全,但聲明語(yǔ)句中忽略 var 關(guān)鍵字是合法的 JScript 語(yǔ)法。這時(shí),JScript 解釋器給予變量全局范圍的可見(jiàn)度。當(dāng)在過(guò)程級(jí)中聲明一個(gè)變量時(shí),它不能用于全局范圍;這種情況下,變量聲明必須用 var 關(guān)鍵字。”
b.變量的數(shù)據(jù)類型 the types of variable
Jscript 有三種主要數(shù)據(jù)類型、兩種復(fù)合數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型。
主要(基本)數(shù)據(jù)類型是:
字符串
數(shù)值
布爾
復(fù)合(引用)數(shù)據(jù)類型是:
對(duì)象
數(shù)組
特殊數(shù)據(jù)類型是:
Null
Undefined
下面簡(jiǎn)述一下JavaScript中的各種對(duì)象類型:
Native Object: JavaScript語(yǔ)言提供的不依賴于執(zhí)行宿主的對(duì)象,其中一些是內(nèi)建對(duì)象,如:Global、Math;一些是在腳本運(yùn)行環(huán)境中創(chuàng)建來(lái)使用的,如:Array、Boolean、Date、Function、Number、Object、RegExp、Error。
Build-in Object: JavaScript語(yǔ)言提供的不依賴于執(zhí)行宿主的內(nèi)建對(duì)象,如:Global、Math;內(nèi)建對(duì)象都是Native Object。
Host Object:JavaScript語(yǔ)言提供的任何依賴于宿主環(huán)境的對(duì)象,所有非Native Object的對(duì)象都是宿主對(duì)象,如:IE中的window,WScript中的wscript實(shí)例,任何用戶創(chuàng)建的類。
****如何檢查對(duì)象類型?******
1.typeof()
typeof 運(yùn)算符把類型信息當(dāng)作字符串返回。typeof 返回值有六種可能: "number," "string," "boolean," "object," "function," 和 "undefined."
2. val instanceof Array
返回一個(gè) Boolean 值,指出對(duì)象是否是特定類的一個(gè)實(shí)例。
例如用到檢查 數(shù)組或日期類型的時(shí)候(事實(shí)上,任何類型都允許,見(jiàn)例),必須使用instance of + class name(不用引號(hào)),例:
function foo(){}
var f = new foo();
alert(f instanceof foo2) //false
3.constructor
constructor 的用法感覺(jué)跟instance的用法一樣,只不過(guò)不返回boolean值
x = new String("Hi");
if (x.constructor == String)
// 進(jìn)行處理(條件為真)。
*******var i={}是什么類型?****
答案:object類型 等價(jià)于var i = new Object
Object對(duì)象是一切對(duì)象的載體,有點(diǎn)想父類吧
Object 對(duì)象很簡(jiǎn)單,
它就只有兩個(gè)property和兩個(gè)method
這兩個(gè)property是:
prototype
constructor
這兩個(gè)function是:
toString()
valueOf()
那么var obj = new MyObject()怎么文本化呢?其實(shí)也很簡(jiǎn)單的,obj的文本化定義如下:
var obj =
{
Properties1 : 1, Properties2 : '2', Properties3 : [3],
Method1 : function(){ return this.Properties1 + this.Properties3[0];},
Method2 : function(){ return this.Preperties2; }
};
類實(shí)例文本化定義的語(yǔ)法為,用一對(duì)"{}"表示類,也就說(shuō)"{}"完全等價(jià)于"new Object()"。然后"{}"內(nèi)按"key:value"組織屬性和方法,key可以是任意[A-Za-z0-9_]的字符組合,甚至數(shù)字開(kāi)頭都是合法的@_@,value是任何的合法的文本化JavaScript數(shù)據(jù),最后每個(gè)鍵值對(duì)用","來(lái)分隔就行了。
通常用于JSON交換數(shù)據(jù)。
*******undefined 的兩種含義*****
1.undefined關(guān)鍵字 2.undefined屬性
聲明了變量,但沒(méi)賦過(guò)值,是屬于第一種的情況;
完全沒(méi)有聲明,就跑出一個(gè)變量參與運(yùn)算,它的數(shù)據(jù)類型是第二種情況;
兩個(gè)相同名字卻不同含義,建議下一版本改名。
var declared; //聲明變量。
if (declared == undefined) //改為uninitialized沒(méi)初始化 會(huì)更準(zhǔn)確,js is loose language indeed!
document.write("declared has not been given a value.");
if (typeOf(notDeclared) == "undefined")
document.write("notDeclared has not been defined.");
相關(guān)文章
Javascript YUI 讀碼日記之 YAHOO.util.Dom - Part.3
在 YAHOO.util.Dom 中能發(fā)現(xiàn)很多有趣的東西。下面先說(shuō)下 toCamel 的函數(shù),感謝 小馬 幫助我理解了這個(gè)函數(shù)。toCamel 把指定名稱替換為駝峰寫(xiě)法,比如把 border-width 替換為 borderWidth 。2008-03-03如何簡(jiǎn)單地用YUI做JavaScript動(dòng)畫(huà)
如何簡(jiǎn)單地用YUI做JavaScript動(dòng)畫(huà)...2007-03-03學(xué)習(xí)YUI.Ext 第四天--對(duì)話框Dialog的使用
學(xué)習(xí)YUI.Ext 第四天--對(duì)話框Dialog的使用...2007-03-03ext checkboxgroup 回填數(shù)據(jù)解決
解決checkboxgroup回填數(shù)據(jù)問(wèn)題的實(shí)現(xiàn)代碼2009-08-08可縮放Reloaded-一個(gè)針對(duì)可縮放元素的復(fù)用組件
可縮放Reloaded-一個(gè)針對(duì)可縮放元素的復(fù)用組件...2007-03-03解決extjs在firefox中關(guān)閉窗口再打開(kāi)后iframe中js函數(shù)訪問(wèn)不到的問(wèn)題
最近做ext時(shí)遇到一個(gè)問(wèn)題,在firefox中瀏覽ext應(yīng)用,加載后第一次打開(kāi)一個(gè)嵌入iframe的Window時(shí),可以直接通過(guò)js代碼來(lái)執(zhí)行 iframe中的js函數(shù),但是如果將窗口關(guān)閉后重新再打開(kāi),將會(huì)拋出異常,說(shuō)是funcName is not a function2008-11-11