前端瞬息萬變,但萬變不離其宗墨微,這個“宗”指的就是javascript,很多現(xiàn)在很熱門的框架扁掸,比如angluar.js翘县、vue.js、jquery都是基于javascript谴分。我承認(rèn)我手動敲代碼的能力有點薄弱锈麸,尤其是javascript這塊,不想一直重復(fù)造輪子牺蹄,所以才想深入js
1忘伞、嚴(yán)格模式與混雜模式的區(qū)別
嚴(yán)格模式:又稱標(biāo)準(zhǔn)模式,是瀏覽器按照w3c標(biāo)準(zhǔn)解析代碼
混雜模式:又稱兼容模式沙兰,瀏覽器用自己的方式解析代碼
h5并無嚴(yán)格模式與混雜模式之分氓奈,因為它的文檔的聲明是這樣的<!DOCTYPE ?html>,沒有dtd
其實現(xiàn)在是用h5了鼎天,所以很少聽到說嚴(yán)格模式與混雜模式之分舀奶,因為最近在深入js,書上總是提到嚴(yán)格模式斋射,所以我不得不去了解下育勺,記住一點嚴(yán)格模式就是瀏覽器按照w3c的標(biāo)準(zhǔn)去解析代碼
2但荤、<noscript></noscript>的作用,如果當(dāng)前瀏覽器不支持腳本或者該瀏覽器禁用了腳本
我們可以使用noscript來寫內(nèi)容涧至,可以在上面說的兩種情況下呈現(xiàn)纱兑,但是對于支持腳本的瀏覽器則是無效的,不會顯示noscript里面的內(nèi)容
3化借、script 的defer屬性可以讓當(dāng)前該腳本在文檔呈現(xiàn)之后再執(zhí)行腳本(好像并沒有什么用),async屬性表示當(dāng)前腳本不必等其他腳本,也不會阻塞其他腳本(好像很少用到,不過這些知識還是知道的好)
4、一個關(guān)于ECMAscript的變量的問題(劃重點)捡多,用var定義的變量在該函數(shù)的作用域當(dāng)中是局部變量蓖康,離開該函數(shù)的作用域之后,變量就會被銷毀
如:function test(){
var message = “hi";//局部變量
}
test();
alert(message);//錯誤
如:function test(){
?message = “hi";//局部變量(不推薦省略var 來定義全局變量垒手,因為局部作用域中定義的全部變量很難維護(hù)蒜焊,況且在嚴(yán)格模式下給未聲明的變量賦值會拋出一個ReferenceError錯誤,那在哪里定義全局變量呢科贬,當(dāng)然是函數(shù)外面拉)
}
test();
alert(message);//hi
5泳梆、數(shù)據(jù)類型,undefined榜掌、boolean优妙、string、number憎账、object套硼、null,這里特別強(qiáng)調(diào)的是undefined胞皱,是使用var關(guān)鍵字聲明但是并沒有初始化(重點重點)邪意,之前我以為就是沒有聲明就是返回undefined,誰知理解錯誤
比如 var message反砌; alert(message)雾鬼;//undefined
6、null指針是一個特殊的對象(object)宴树,不得不提null與undefined的區(qū)別策菜,,undefined是派生自null的森渐,null是要要保存對象但是并沒有真正的保存對象做入,undefined與null的意思很相近,但還是有些細(xì)微的差別同衣,比如轉(zhuǎn)化為數(shù)值的是后竟块,undefined是NaN(not a number非數(shù)值),null是0耐齐±嗣兀看了阮一峰的日志蒋情,總結(jié)到,null表示”此處沒有值“耸携,而undefined表示”此處有值棵癣,但還沒有定義“
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ù)字型,則只是簡單傳入與返回喳篇;如果是null則返回0敞临;如果是undefined則返回NaN;如果是數(shù)字型的字符串杭隙,則返回數(shù)字哟绊,如果是進(jìn)制的數(shù)字則返回相同大小的十進(jìn)制,其他類型的字符串則返回NaN(非數(shù)字)
8痰憎、一元操作符的注意事項票髓,比如說 ?var n=’z'; ? var s1='2'; ? s1++ //變成數(shù)值型的3,而n++//返回NaN
9、按位異或(如果兩個都是1或者都是0的話返回0铣耘,其他的返回1洽沟。按照我們高中老師的說法,性別相同的人生不出孩子蜗细,有點小污~~~~)?
10裆操、==與===的區(qū)別==只會判斷值是否相等,而===會判斷值和類型是否一致
比如undefined==null 返回true炉媒,因為它們會返回類似的值
null===undefined會false踪区,因為他們是不同類型的值
11、label語句label:statement
比如start:for ( var i=0; i<count; i++){ alert(i); } ? ? ?start可以用break或者continue引用吊骤,加標(biāo)簽的語句一般與for語句配合使用(講真缎岗,以前看不懂這種寫法)
12、with語句:作用是將代碼的作用域設(shè)置到一個特定的對象當(dāng)中 with(expression)statement白粉;
比如:var qs=location.search.substring(1);
? ? ? ? var ?hostname=loaction.hostname;
? ? ? ? var url = location.href;
上面的代碼都包含了location對象传泊,使用with語句可以這么做
with(location){
var qs = search.substring(1);
var ?hostname = hostname;
var url = ?href;
}(使用了with語句關(guān)聯(lián)了location對象)嚴(yán)格模式當(dāng)中不允許使用with語句鼠渺,否則將視為語法錯誤
使用大量的with語句會導(dǎo)致性能下降,因此在大型的項目開發(fā)當(dāng)中不建議使用with語句
13眷细、參數(shù)
ECMAscript不介意傳遞進(jìn)來多少個參數(shù)拦盹,也不介意參數(shù)的類型,之所以這樣溪椎,是因為ECMAscript的參數(shù)是用一個數(shù)組表示的普舆,在函數(shù)體可以通過arguments對象去訪問這個數(shù)組,從而獲取每一個參數(shù)校读,他并不是數(shù)組的實例奔害,只是與數(shù)組類似颤诀,比如訪問第一個參數(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 因為只有一個參數(shù)
doAdd(20,30); ? ?//50 因為有兩個參數(shù)
14折剃、ECMAscript沒有重載(不能向其他語言一樣比如java捶障,重載的意思就是為一個函數(shù)編寫兩個定義,只要這兩個函數(shù)定義的簽名(接受的類型和數(shù)量)不同即可端考,但是是ECMAscript沒有簽名,因此無法真正的重載
比如 ?function sum1(num){ ? ? return num+100 ; ?}
? function sum1(num ) { ? return num+200揭厚; ?}
var result = sum1(100); //300
留下兩個問題!現(xiàn)在還有點想不通昨晚為了完成客戶的單子却特,很晚才睡,頂著熊貓眼T_T