深入了解javascript(一)

前端瞬息萬(wàn)變,但萬(wàn)變不離其宗,這個(gè)“宗”指的就是javascript,很多現(xiàn)在很熱門的框架,比如angluar.js、vue.js、jquery都是基于javascript。我承認(rèn)我手動(dòng)敲代碼的能力有點(diǎn)薄弱,尤其是javascript這塊,不想一直重復(fù)造輪子,所以才想深入js

1、嚴(yán)格模式與混雜模式的區(qū)別

嚴(yán)格模式:又稱標(biāo)準(zhǔn)模式,是瀏覽器按照w3c標(biāo)準(zhǔn)解析代碼

混雜模式:又稱兼容模式,瀏覽器用自己的方式解析代碼

h5并無(wú)嚴(yán)格模式與混雜模式之分,因?yàn)樗奈臋n的聲明是這樣的<!DOCTYPE ?html>,沒(méi)有dtd


其實(shí)現(xiàn)在是用h5了,所以很少聽(tīng)到說(shuō)嚴(yán)格模式與混雜模式之分,因?yàn)樽罱谏钊雑s,書上總是提到嚴(yán)格模式,所以我不得不去了解下,記住一點(diǎn)嚴(yán)格模式就是瀏覽器按照w3c的標(biāo)準(zhǔn)去解析代碼

2、<noscript></noscript>的作用,如果當(dāng)前瀏覽器不支持腳本或者該瀏覽器禁用了腳本

我們可以使用noscript來(lái)寫內(nèi)容,可以在上面說(shuō)的兩種情況下呈現(xiàn),但是對(duì)于支持腳本的瀏覽器則是無(wú)效的,不會(huì)顯示noscript里面的內(nèi)容

3、script 的defer屬性可以讓當(dāng)前該腳本在文檔呈現(xiàn)之后再執(zhí)行腳本(好像并沒(méi)有什么用),async屬性表示當(dāng)前腳本不必等其他腳本,也不會(huì)阻塞其他腳本(好像很少用到,不過(guò)這些知識(shí)還是知道的好)

4、一個(gè)關(guān)于ECMAscript的變量的問(wèn)題(劃重點(diǎn)),用var定義的變量在該函數(shù)的作用域當(dāng)中是局部變量,離開(kāi)該函數(shù)的作用域之后,變量就會(huì)被銷毀

如:function test(){

var message = “hi";//局部變量

}

test();

alert(message);//錯(cuò)誤

如:function test(){

?message = “hi";//局部變量(不推薦省略var 來(lái)定義全局變量,因?yàn)榫植孔饔糜蛑卸x的全部變量很難維護(hù),況且在嚴(yán)格模式下給未聲明的變量賦值會(huì)拋出一個(gè)ReferenceError錯(cuò)誤,那在哪里定義全局變量呢,當(dāng)然是函數(shù)外面拉)

}

test();

alert(message);//hi

5、數(shù)據(jù)類型,undefined、boolean、string、number、object、null,這里特別強(qiáng)調(diào)的是undefined,是使用var關(guān)鍵字聲明但是并沒(méi)有初始化(重點(diǎn)重點(diǎn)),之前我以為就是沒(méi)有聲明就是返回undefined,誰(shuí)知理解錯(cuò)誤

比如 var message; alert(message);//undefined

6、null指針是一個(gè)特殊的對(duì)象(object),不得不提null與undefined的區(qū)別,,undefined是派生自null的,null是要要保存對(duì)象但是并沒(méi)有真正的保存對(duì)象,undefined與null的意思很相近,但還是有些細(xì)微的差別,比如轉(zhuǎn)化為數(shù)值的是后,undefined是NaN(not a number非數(shù)值),null是0??戳巳钜环宓娜罩?,總結(jié)到,null表示”此處沒(méi)有值“,而undefined表示”此處有值,但還沒(méi)有定義“


http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html阮一峰關(guān)于undefined與null的區(qū)別的日志,想了解得更清楚可以參考下

6、isNaN方法的意思,能轉(zhuǎn)化為數(shù)值返回flase,不能轉(zhuǎn)化數(shù)值返回ture

? 比如alert(isNaN("NaN")) //不能轉(zhuǎn)化為數(shù)值,返回值是ture,同樣的alert(isNaN("blue")也返回true

而alert(isNaN("true"I)//可以轉(zhuǎn)化0,alert(isNaN(”10“))//可以轉(zhuǎn)化數(shù)值10,返回f都是false

7、數(shù)值轉(zhuǎn)換的方法parseInt()、parseFloat()、Number()

如果是布爾型,則返回1、0;如果是數(shù)字型,則只是簡(jiǎn)單傳入與返回;如果是null則返回0;如果是undefined則返回NaN;如果是數(shù)字型的字符串,則返回?cái)?shù)字,如果是進(jìn)制的數(shù)字則返回相同大小的十進(jìn)制,其他類型的字符串則返回NaN(非數(shù)字)

8、一元操作符的注意事項(xiàng),比如說(shuō) ?var n=’z'; ? var s1='2'; ? s1++ //變成數(shù)值型的3,而n++//返回NaN

9、按位異或(如果兩個(gè)都是1或者都是0的話返回0,其他的返回1。按照我們高中老師的說(shuō)法,性別相同的人生不出孩子,有點(diǎn)小污~~~~)?

10、==與===的區(qū)別==只會(huì)判斷值是否相等,而===會(huì)判斷值和類型是否一致

比如undefined==null 返回true,因?yàn)樗鼈儠?huì)返回類似的值

null===undefined會(huì)false,因?yàn)樗麄兪遣煌愋偷闹?/p>

11、label語(yǔ)句label:statement

比如start:for ( var i=0; i<count; i++){ alert(i); } ? ? ?start可以用break或者continue引用,加標(biāo)簽的語(yǔ)句一般與for語(yǔ)句配合使用(講真,以前看不懂這種寫法)

12、with語(yǔ)句:作用是將代碼的作用域設(shè)置到一個(gè)特定的對(duì)象當(dāng)中 with(expression)statement;

比如:var qs=location.search.substring(1);

? ? ? ? var ?hostname=loaction.hostname;

? ? ? ? var url = location.href;

上面的代碼都包含了location對(duì)象,使用with語(yǔ)句可以這么做

with(location){

var qs = search.substring(1);

var ?hostname = hostname;

var url = ?href;

}(使用了with語(yǔ)句關(guān)聯(lián)了location對(duì)象)嚴(yán)格模式當(dāng)中不允許使用with語(yǔ)句,否則將視為語(yǔ)法錯(cuò)誤

使用大量的with語(yǔ)句會(huì)導(dǎo)致性能下降,因此在大型的項(xiàng)目開(kāi)發(fā)當(dāng)中不建議使用with語(yǔ)句

13、參數(shù)

ECMAscript不介意傳遞進(jìn)來(lái)多少個(gè)參數(shù),也不介意參數(shù)的類型,之所以這樣,是因?yàn)镋CMAscript的參數(shù)是用一個(gè)數(shù)組表示的,在函數(shù)體可以通過(guò)arguments對(duì)象去訪問(wèn)這個(gè)數(shù)組,從而獲取每一個(gè)參數(shù),他并不是數(shù)組的實(shí)例,只是與數(shù)組類似,比如訪問(wèn)第一個(gè)參數(shù)arguments[0],arguments[1]...

比如:function doAdd(){

? if(arguments.length == 1) alert(arguments[0]+10);

}else if(arguments.length ==2 ) alert(arguments[0]+arguements[1]);

}

doAdd(10); ? //20 因?yàn)橹挥幸粋€(gè)參數(shù)

doAdd(20,30); ? ?//50 因?yàn)橛袃蓚€(gè)參數(shù)

14、ECMAscript沒(méi)有重載(不能向其他語(yǔ)言一樣比如java,重載的意思就是為一個(gè)函數(shù)編寫兩個(gè)定義,只要這兩個(gè)函數(shù)定義的簽名(接受的類型和數(shù)量)不同即可,但是是ECMAscript沒(méi)有簽名,因此無(wú)法真正的重載

比如 ?function sum1(num){ ? ? return num+100 ; ?}

? function sum1(num ) { ? return num+200; ?}

var result = sum1(100); //300




留下兩個(gè)問(wèn)題!現(xiàn)在還有點(diǎn)想不通昨晚為了完成客戶的單子,很晚才睡,頂著熊貓眼T_T

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容