昨天花一天時(shí)間弃甥,把css基本上的整理了一下爽室,畢竟知識(shí)點(diǎn)并不算很多,而且也是沒說動(dòng)畫這些CSS3的新東西淆攻,梳理的時(shí)候自己也重新理解一遍阔墩,還是值得的。那么繼續(xù)瓶珊,把JS也整理一下啸箫。
首先依舊是如何在html和css在加入js:
方法有兩種:
- 一種就是style標(biāo)簽里面直接寫
- 還有就是外部類似這樣 <script src="index.js"></script>
我們還得給我們所要使用的變量,屬性伞芹,函數(shù)取一個(gè)不錯(cuò)的名字忘苛,這稱之為標(biāo)識(shí)符
標(biāo)識(shí)符是有一些規(guī)則的:
- 區(qū)分大小寫
- 第一個(gè)字符必須是字母、下劃線(_)唱较、或者是$
- 后面的可以是字母扎唾、數(shù)字、下劃線绊汹、$
一些命名規(guī)范稽屏,比如駝峰命名,等
變量
js是弱類型語言西乖,也就是說,我在聲明的時(shí)候不需要規(guī)定是什么類型坛增,并且可以在之后變化获雕。(甚至在比較的時(shí)候也會(huì)自動(dòng)轉(zhuǎn)換)
注意的事情:變量提升
一般來說js是按行執(zhí)行的(所以雖然可以不加;但是最好還是加上以免出錯(cuò))收捣,但是變量聲明是先解析届案,所以你在聲明之前用的時(shí)候不會(huì)報(bào)錯(cuò),但是呢是沒有賦值的罢艾,是undefined楣颠。但是話又說回來尽纽,你這不是沒事找事嘛,一般要用變量就把他放到最上面吧童漩。
順道再說下:函數(shù)提升
上面剛說js是按行執(zhí)行的弄贿,但是函數(shù)又不一樣,也就是說函數(shù)也可以在聲明前使用矫膨,我就直接給代碼差凹,也很簡(jiǎn)單。
1.
// Outputs: "Definition hoisted!"
definitionHoisted();
// TypeError: undefined is not a function
definitionNotHoisted();
function definitionHoisted() {
console.log("Definition hoisted!");
}
var definitionNotHoisted = function () {
console.log("Definition not hoisted!");
};
2.
// ReferenceError: funcName is not defined
funcName();
// TypeError: undefined is not a function
varName();
var varName = function funcName() {
console.log("Definition not hoisted!");
};
稍微解釋下侧馅,1是說明了危尿,如果吧函數(shù)賦值給變量,變量只是變量提升馁痴。
2呢則是吧有函數(shù)嗎的賦值給變量谊娇,只有變量提升,沒有函數(shù)提升罗晕。
最后的命名的時(shí)候注意一些關(guān)鍵字和保留字济欢。具體就不在這里浪費(fèi)空間了,網(wǎng)上到處都是攀例。
數(shù)據(jù)類型
接下來就是極為重要的數(shù)據(jù)類型船逮,數(shù)據(jù)類型一般分為兩種,一種是原始類型粤铭,也就是不可拆分的(字符串挖胃,布爾值,數(shù)值)梆惯,以及對(duì)象這種復(fù)合類的酱鸭,至于null和undefined屬于類型特殊情況。
(es6還有一個(gè)symbol垛吗,這個(gè)暫時(shí)先不提凹髓,回頭再總結(jié))
對(duì)象又可以分成三個(gè)子類型。
- 狹義的對(duì)象(object)
- 數(shù)組(array)
- 函數(shù)(function)
狹義的對(duì)象和數(shù)組是兩種不同的數(shù)據(jù)組合方式怯屉,而函數(shù)其實(shí)是處理數(shù)據(jù)的方法蔚舀。JavaScript把函數(shù)當(dāng)成一種數(shù)據(jù)類型,可以像其他類型的數(shù)據(jù)一樣锨络,進(jìn)行賦值和傳遞赌躺,這為編程帶來了很大的靈活性,體現(xiàn)了JavaScript作為“函數(shù)式語言”的本質(zhì)羡儿。
這里需要明確的是礼患,JavaScript的所有數(shù)據(jù),都可以視為廣義的對(duì)象。不僅數(shù)組和函數(shù)屬于對(duì)象缅叠,就連原始類型的數(shù)據(jù)(數(shù)值悄泥、字符串、布爾值)也可以用對(duì)象方式調(diào)用
基本類型肤粱、引用類型
- 基本類型值(數(shù)值弹囚、布爾值、null和undefined):指的是保存在棧內(nèi)存中的簡(jiǎn)單數(shù)據(jù)段狼犯;
- 引用類型值(對(duì)象余寥、數(shù)組、函數(shù)悯森、正則):指的是那些保存在堆內(nèi)存中的對(duì)象宋舷,變量中保存的實(shí)際上只是一個(gè)指針,這個(gè)指針執(zhí)行內(nèi)存中的另一個(gè)位置瓢姻,由該位置保存對(duì)象
typeof運(yùn)算符
JavaScript有三種方法祝蝠,可以確定一個(gè)值到底是什么類型。
- typeof運(yùn)算符
- instanceof運(yùn)算符
- Object.prototype.toString方法
先介紹null和undefined
對(duì)于null和undefined幻碱,可以大致可以像下面這樣理解绎狭。
- null表示空值,即該處的值現(xiàn)在為空褥傍。典型用法是:
- 作為函數(shù)的參數(shù)儡嘶,表示該函數(shù)的參數(shù)是一個(gè)沒有任何內(nèi)容的對(duì)象。
作為對(duì)象原型鏈的終點(diǎn)恍风。
- undefined表示不存在值蹦狂,就是此處目前不存在任何值。典型用法是:
- 變量被聲明了朋贬,但沒有賦值時(shí)凯楔,就等于undefined。
- 調(diào)用函數(shù)時(shí)锦募,應(yīng)該提供的參數(shù)沒有提供摆屯,該參數(shù)等于undefined。
- 對(duì)象沒有賦值的屬性糠亩,該屬性的值為undefined虐骑。
- 函數(shù)沒有返回值時(shí),默認(rèn)返回undefined赎线。
boolean布爾值
只有兩個(gè)值 true 和 false(并不是字符富弦,也可以寫作1和0,對(duì)和錯(cuò)氛驮,只是表示兩個(gè)狀態(tài))
常用做條件判斷
下列運(yùn)算符會(huì)返回布爾值:
- 兩元邏輯運(yùn)算符: && (And),|| (Or)
- 前置邏輯運(yùn)算符: !(Not)
- 相等運(yùn)算符:===济似,!==矫废,==盏缤,!=
- 比較運(yùn)算符:>,>=蓖扑,<唉铜,<=
如果JavaScript預(yù)期某個(gè)位置應(yīng)該是布爾值,會(huì)將該位置上現(xiàn)有的值自動(dòng)轉(zhuǎn)為布爾值律杠。轉(zhuǎn)換規(guī)則是除了下面六個(gè)值被轉(zhuǎn)為false潭流,其他值都視為true。
- undefined
- null
- false
- 0
- NaN
- ""(空字符串)
值得一說的是空對(duì)象和空數(shù)組都是true
Number數(shù)值
- 在js里面柜去,數(shù)字都用number灰嫉,不分浮點(diǎn)數(shù)和整數(shù),還有一些其他的進(jìn)制:
var a = 10; //十進(jìn)制
var b = 073; //八進(jìn)制
vat c = 0xf3; //十六進(jìn)制
- number是有范圍的嗓奢,具體值反正很大讼撒,超出就會(huì)成為Infinity
- 如果0當(dāng)成分母的除法在js中并不會(huì)報(bào)錯(cuò),答案是NaN股耽。NaN不等于NaN根盒。
- 數(shù)值轉(zhuǎn)換
- 有三個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值
Number()
parseInt()
parseFloat() - Number規(guī)則相當(dāng)復(fù)雜而且不合理,幾乎不使用物蝙,常用的是后兩個(gè)炎滞,兩個(gè)規(guī)則類似
- 忽略字符串前面的空白字符,找到第一個(gè)非空白字符
- 如果第一個(gè)字符不是-或者數(shù)字返回NaN
- 如果是繼續(xù)解析诬乞,直到非數(shù)值模式為止
- 0開頭會(huì)當(dāng)做八進(jìn)制册赛,0x開頭會(huì)當(dāng)做十六進(jìn)制,但是可以指定第二個(gè)參數(shù)指定基數(shù)
parseInt('blue'); //NaN
parseInt('-23ABS'); // -23
parseInt('0xf1'); // 241
parseInt('101', 2); // 5
String(字符串)
- String是Unicode字符組成的序列丽惭,俗稱字符串击奶,可以用雙引號(hào)或者單引號(hào)表示,沒有區(qū)別责掏,匹配即可
字符串也有一些轉(zhuǎn)義字符
\n: 換行
\r: 回車
\t:水平制表符
\:\ - 可以使用 + 運(yùn)算符將多個(gè)字符串連接起來
- 字符串的長(zhǎng)度可以通過length屬性獲得
- 字符串方法
- indexOf:獲取字符位置
"abc".indexOf('b'); // 1
- toLowerCase:轉(zhuǎn)換為小寫柜砾,toUpperCase:轉(zhuǎn)換為大寫
"aBcD".toLowerCase(); // "abcd"
"aBcD".toUpperCase(); // "ABCD"
- trim:刪除兩端空白字符(IE9+)
" sd f ".trim(); // "sd f"
- replace:字符串替換
"abc".replace('b', 'B'); // "aBc"
- split:分割字符串位數(shù)組
"a,bc,d,e".split(','); // [a, bc, d, e]
- substr(start, length):獲取子字符串
"abcdef".substr(2,3); // "cde"
- substring(start, end):獲取子字符串
"abcdef".substring(2,3); // "c"
-
String.prototype.concat()
連接兩個(gè)字符串文本,并返回一個(gè)新的字符串换衬。 -
String.prototype.contains() **
判斷一個(gè)字符串里是否包含其他字符串痰驱。 -
String.prototype.match()
使用正則表達(dá)式與字符串相比較。
String.prototype.replace()
被用來在正則表達(dá)式和字符串直接比較瞳浦,然后用新的子串來替換被匹配的子串担映。
String.prototype.search()
對(duì)正則表達(dá)式和指定字符串進(jìn)行匹配搜索,返回第一個(gè)出現(xiàn)的匹配項(xiàng)的下標(biāo)叫潦。 -
String.prototype.slice()
摘取一個(gè)字符串區(qū)域蝇完,返回一個(gè)新的字符串。