前端瞬息萬變,但萬變不離其宗,這個“宗”指的就是javascript,很多現(xiàn)在很熱門的框架,比如angluar.js、vue.js、jquery都是基于javascript。我承認我手動敲代碼的能力有點薄弱,尤其是javascript這塊,不想一直重復(fù)造輪子,所以才想深入js
1、嚴格模式與混雜模式的區(qū)別
嚴格模式:又稱標準模式,是瀏覽器按照w3c標準解析代碼
混雜模式:又稱兼容模式,瀏覽器用自己的方式解析代碼
h5并無嚴格模式與混雜模式之分,因為它的文檔的聲明是這樣的<!DOCTYPE ?html>,沒有dtd

其實現(xiàn)在是用h5了,所以很少聽到說嚴格模式與混雜模式之分,因為最近在深入js,書上總是提到嚴格模式,所以我不得不去了解下,記住一點嚴格模式就是瀏覽器按照w3c的標準去解析代碼
2、<noscript></noscript>的作用,如果當前瀏覽器不支持腳本或者該瀏覽器禁用了腳本
我們可以使用noscript來寫內(nèi)容,可以在上面說的兩種情況下呈現(xiàn),但是對于支持腳本的瀏覽器則是無效的,不會顯示noscript里面的內(nèi)容
3、script 的defer屬性可以讓當前該腳本在文檔呈現(xiàn)之后再執(zhí)行腳本(好像并沒有什么用),async屬性表示當前腳本不必等其他腳本,也不會阻塞其他腳本(好像很少用到,不過這些知識還是知道的好)
4、一個關(guān)于ECMAscript的變量的問題(劃重點),用var定義的變量在該函數(shù)的作用域當中是局部變量,離開該函數(shù)的作用域之后,變量就會被銷毀
如:function test(){
var message = “hi";//局部變量
}
test();
alert(message);//錯誤
如:function test(){
?message = “hi";//局部變量(不推薦省略var 來定義全局變量,因為局部作用域中定義的全部變量很難維護,況且在嚴格模式下給未聲明的變量賦值會拋出一個ReferenceError錯誤,那在哪里定義全局變量呢,當然是函數(shù)外面拉)
}
test();
alert(message);//hi
5、數(shù)據(jù)類型,undefined、boolean、string、number、object、null,這里特別強調(diào)的是undefined,是使用var關(guān)鍵字聲明但是并沒有初始化(重點重點),之前我以為就是沒有聲明就是返回undefined,誰知理解錯誤
比如 var message; alert(message);//undefined
6、null指針是一個特殊的對象(object),不得不提null與undefined的區(qū)別,,undefined是派生自null的,null是要要保存對象但是并沒有真正的保存對象,undefined與null的意思很相近,但還是有些細微的差別,比如轉(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ù)字,如果是進制的數(shù)字則返回相同大小的十進制,其他類型的字符串則返回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引用,加標簽的語句一般與for語句配合使用(講真,以前看不懂這種寫法)
12、with語句:作用是將代碼的作用域設(shè)置到一個特定的對象當中 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對象)嚴格模式當中不允許使用with語句,否則將視為語法錯誤
使用大量的with語句會導(dǎo)致性能下降,因此在大型的項目開發(fā)當中不建議使用with語句
13、參數(shù)
ECMAscript不介意傳遞進來多少個參數(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