你所要知道JS(DHTML)中的一些技巧
更新時(shí)間:2007年01月09日 00:00:00 作者:
這些天都沒有更新日志了,這篇文章就也算是自己的一些經(jīng)驗(yàn)談了。簡單的說一些技巧給大家,希望對你有所幫助,如果還有疑問,可以在下邊留言。
一、全等運(yùn)算符
在JS中,不為0的數(shù)皆為true,除了幾個(gè)特殊的變量除外。比如:undefined,null,""等。這在大多數(shù)情況下,也是我們所期望的。
但你不應(yīng)該忽略這個(gè)全等運(yùn)算符。因此需要較為嚴(yán)格的效驗(yàn)下,我們可以用===這個(gè)全等運(yùn)算符,看下面的代碼:
//平常的一些效驗(yàn)
var foo = function(arg) {
if (!arg) {
alert("normal false");
} else { alert("true"); }
}
foo(null); //false
foo(false); //false
foo(""); //false
foo("never-online"); //true
//全等效驗(yàn)
var foo = function(arg) {
if (arg===false) {
alert("false");
} else { alert("not a false variable") }
}
foo(null); //not a false variable
foo(false); //false
foo(""); //not a false variable
foo("never-online"); //not a false variable
二、變量的應(yīng)用之一——去除網(wǎng)頁嵌套
例如,你要把baidu.com嵌入你自己的一個(gè)iframe里,得到的結(jié)果卻不是你想要的,因?yàn)樗羞@么一句代碼
if(self!=top){top.location=self.location;}
這句代碼的意思是:如果網(wǎng)頁有嵌套的話(也就是用了frame技術(shù)的話,將去除嵌套,并把該frame里的url給到頂層窗口)
這是個(gè)令人頭痛的問題,比如,在一些免費(fèi)空間中也使用了上面的這句代碼。如果去除呢?用這一句代碼就可去除嵌套:
<script>
var location='never-online';
</script>
下面來說明用了這句代碼為什么可以去除嵌套:
我們知道,JS變量中,假如變量是這樣
<script type="text/javascript">
//<![CDATA[
myVar = "never-online";
(function () {
//var myVar;
alert(myVar)
})()
//]]>
</script>
是可以顯示"never-online"這個(gè)字符串的。而當(dāng)你把//var myVar這句還原時(shí)(也就是不注釋掉它時(shí))結(jié)果就不一樣了,將顯示undefined。我們用var location="never-online"時(shí)也是一樣的道理,以下的代碼也許將會(huì)為你解疑。
<script type="text/javascript">
//<![CDATA[
alert(location);
//var location;
//]]>
</script>
同樣,第二次運(yùn)行時(shí),把var location這句還原,比較一下就應(yīng)該明白原因了。同理,window,document都是如此。有興趣你就可以試試。
三、得到當(dāng)前頁的路徑
要達(dá)到這個(gè)目的,方法有很多種,比如利用location對象,但我這里舉的例是用創(chuàng)建的一個(gè)IMG標(biāo)簽??创a:
<script type="text/javascript">
//<![CDATA[
var p = document.createElement("IMG");
p.src="."; alert(p.src);
//]]>
</script>
我們所知道的,"."在路徑中表示的是當(dāng)前文件夾。因此,用IMG來取得路徑在某些情況下,可以較快的得到路徑。
四、用!!運(yùn)算符得到一個(gè)變量的boolean值,在某種程度上說,就是相當(dāng)于強(qiáng)制轉(zhuǎn)型
比如
<script type="text/javascript">
//<![CDATA[
var isSupportedXMLHttp = !!new ActiveXObject("MSXML2.XMLHTTP");
alert(isSupportedXMLHttp)
//]]>
</script>
為什么會(huì)這樣,我們可以從技巧一中可以得知答案。這里不再重復(fù)。
五、條件編譯。
如果你覺得有必要的話,可以使用此方法。這和一些強(qiáng)語言里的條件編譯類似。很多情況下用于——兼容。
這里只是簡單的提一下,如果你有興趣,可以參看MSDN,或者看一些JS條件編譯的文章。
只需要幾個(gè)語法:
@cc_on - 這句在條件編譯中是必寫的,表示激活條件編譯
@set @varname = term - 這句是賦值的
下面這里就是判斷的了
@if
@else
@end
簡單的例子:
/*@cc_on
document.write("JScript 版本: " + @_jscript_version + ".<br>");
/*@if (@_jscript_version >= 5)
document.write("JScript 版本 5.0+.<br \/>");
document.write("只有當(dāng)瀏覽器支持JScript5+的時(shí)候你才能看到這些文字.<br>");
@else @*/
document.write("當(dāng)你使用其他瀏覽器(比如: Firefox, IE 4.x 之類)的時(shí)候看到這行文字<br>");
/*@end
@*/
六、其它的,現(xiàn)在一下想不到那么多,暫時(shí)先寫到這吧
一、全等運(yùn)算符
在JS中,不為0的數(shù)皆為true,除了幾個(gè)特殊的變量除外。比如:undefined,null,""等。這在大多數(shù)情況下,也是我們所期望的。
但你不應(yīng)該忽略這個(gè)全等運(yùn)算符。因此需要較為嚴(yán)格的效驗(yàn)下,我們可以用===這個(gè)全等運(yùn)算符,看下面的代碼:
//平常的一些效驗(yàn)
var foo = function(arg) {
if (!arg) {
alert("normal false");
} else { alert("true"); }
}
foo(null); //false
foo(false); //false
foo(""); //false
foo("never-online"); //true
//全等效驗(yàn)
var foo = function(arg) {
if (arg===false) {
alert("false");
} else { alert("not a false variable") }
}
foo(null); //not a false variable
foo(false); //false
foo(""); //not a false variable
foo("never-online"); //not a false variable
二、變量的應(yīng)用之一——去除網(wǎng)頁嵌套
例如,你要把baidu.com嵌入你自己的一個(gè)iframe里,得到的結(jié)果卻不是你想要的,因?yàn)樗羞@么一句代碼
if(self!=top){top.location=self.location;}
這句代碼的意思是:如果網(wǎng)頁有嵌套的話(也就是用了frame技術(shù)的話,將去除嵌套,并把該frame里的url給到頂層窗口)
這是個(gè)令人頭痛的問題,比如,在一些免費(fèi)空間中也使用了上面的這句代碼。如果去除呢?用這一句代碼就可去除嵌套:
<script>
var location='never-online';
</script>
下面來說明用了這句代碼為什么可以去除嵌套:
我們知道,JS變量中,假如變量是這樣
<script type="text/javascript">
//<![CDATA[
myVar = "never-online";
(function () {
//var myVar;
alert(myVar)
})()
//]]>
</script>
是可以顯示"never-online"這個(gè)字符串的。而當(dāng)你把//var myVar這句還原時(shí)(也就是不注釋掉它時(shí))結(jié)果就不一樣了,將顯示undefined。我們用var location="never-online"時(shí)也是一樣的道理,以下的代碼也許將會(huì)為你解疑。
<script type="text/javascript">
//<![CDATA[
alert(location);
//var location;
//]]>
</script>
同樣,第二次運(yùn)行時(shí),把var location這句還原,比較一下就應(yīng)該明白原因了。同理,window,document都是如此。有興趣你就可以試試。
三、得到當(dāng)前頁的路徑
要達(dá)到這個(gè)目的,方法有很多種,比如利用location對象,但我這里舉的例是用創(chuàng)建的一個(gè)IMG標(biāo)簽??创a:
<script type="text/javascript">
//<![CDATA[
var p = document.createElement("IMG");
p.src="."; alert(p.src);
//]]>
</script>
我們所知道的,"."在路徑中表示的是當(dāng)前文件夾。因此,用IMG來取得路徑在某些情況下,可以較快的得到路徑。
四、用!!運(yùn)算符得到一個(gè)變量的boolean值,在某種程度上說,就是相當(dāng)于強(qiáng)制轉(zhuǎn)型
比如
<script type="text/javascript">
//<![CDATA[
var isSupportedXMLHttp = !!new ActiveXObject("MSXML2.XMLHTTP");
alert(isSupportedXMLHttp)
//]]>
</script>
為什么會(huì)這樣,我們可以從技巧一中可以得知答案。這里不再重復(fù)。
五、條件編譯。
如果你覺得有必要的話,可以使用此方法。這和一些強(qiáng)語言里的條件編譯類似。很多情況下用于——兼容。
這里只是簡單的提一下,如果你有興趣,可以參看MSDN,或者看一些JS條件編譯的文章。
只需要幾個(gè)語法:
@cc_on - 這句在條件編譯中是必寫的,表示激活條件編譯
@set @varname = term - 這句是賦值的
下面這里就是判斷的了
@if
@else
@end
簡單的例子:
/*@cc_on
document.write("JScript 版本: " + @_jscript_version + ".<br>");
/*@if (@_jscript_version >= 5)
document.write("JScript 版本 5.0+.<br \/>");
document.write("只有當(dāng)瀏覽器支持JScript5+的時(shí)候你才能看到這些文字.<br>");
@else @*/
document.write("當(dāng)你使用其他瀏覽器(比如: Firefox, IE 4.x 之類)的時(shí)候看到這行文字<br>");
/*@end
@*/
六、其它的,現(xiàn)在一下想不到那么多,暫時(shí)先寫到這吧
相關(guān)文章
Javascript學(xué)習(xí)筆記7 原型鏈的原理
說到prototype,就不得不先說下new的過程。2010-01-01JavaScript操作數(shù)組的常用方法總結(jié)
這篇文章總結(jié)了JavaScript操作數(shù)組的常用方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06javascript學(xué)習(xí)筆記(一)基礎(chǔ)知識(shí)
本文是學(xué)習(xí)筆記系列的第一篇,跟以前一樣,介紹些基礎(chǔ)知識(shí),包括js基本概念、 JScript 的變量、js的數(shù)據(jù)類型、3.JScript 的運(yùn)算符、js流程控制、js函數(shù)。有需要的朋友可以參考下2014-09-09