標(biāo)準(zhǔn)ECMAScript,JavaScript是一種實(shí)現(xiàn)標(biāo)準(zhǔn)募疮。
JS可鑲嵌在網(wǎng)頁中捞挥。
方法1:放在<head>中的<script>...</script>中
<html> <head> <script>
alert('hello this is JS');
</script> </head> <body> ...</body> </html>
方法2:
放在一個(gè).js文件中纤掸,并在html中引用
<html> <head> <script src="...path/file.js"></script>...
(2020.02.17補(bǔ) 上述兩種方法官份,JS的引用都在head中窘游,JS文件會(huì)依次解釋逻淌,在解釋器對(duì)head中內(nèi)容完成解釋之前肥惭,html頁面不會(huì)被瀏覽器加載和顯示宋雏,這種引用會(huì)出現(xiàn)明顯的加載延遲在有些情況下。一種更好的引用方式是在<body>中頁面內(nèi)容的后面引用JS文件[2]务豺。如下:
<body>
<!--html頁面內(nèi)容-->
<scripts type = 'text/javascript' src = 'xxx.js'></script>
</body>
JS可寫在html中磨总,但是建議寫成外部文件調(diào)用js,可以提高可維護(hù)性笼沥,亦可緩存以提高加載速度蚪燕。
)
語法與Java相似,每個(gè)語句用“;”結(jié)尾奔浅,但并不嚴(yán)格馆纳,瀏覽器會(huì)在沒有";"結(jié)尾的語句中自動(dòng)加入,為便于閱讀汹桦,建議加入鲁驶。
賦值 var x = 1; //如果一個(gè)變量沒有用var聲明就使用,則成為全局變量;但如果在.js文件頭加入字符'use strict'舞骆,則在變量初始化時(shí)如未使用var钥弯,會(huì)出現(xiàn)
{}部分注意換行時(shí)的縮進(jìn);
注釋的方式//, /*...*/督禽;
嚴(yán)格區(qū)分大小寫脆霎;
動(dòng)態(tài)語言:類型不固定,而靜態(tài)語言如Java狈惫,在初始化時(shí)需要指定類型名睛蛛,并且修改值時(shí)只能在同類型值中修改。
判斷兩個(gè)值是否相同胧谈,使用'==='忆肾,而非'=='。前者比較數(shù)據(jù)時(shí)如果類型不同則返回false菱肖,只比較同類型數(shù)據(jù)客冈,而后者比較時(shí)會(huì)先轉(zhuǎn)換類型再做比較。注意:堅(jiān)決使用'==='比較數(shù)據(jù)蔑滓,不使用'=='郊酒。
邏輯運(yùn)算:與&&? 或|| 非!
數(shù)字類型不區(qū)分float和int遇绞,NaN/Infinity也是數(shù)字。注意NaN與自身的比較也會(huì)返回false燎窘,NaN === NaN返回false摹闽。十六進(jìn)制: 0x...
空值是null,未定義是undefined褐健。
JS的字典稱作對(duì)象付鹿,定義形式與python相同,引用方式dict_name.feature蚜迅。
字符串:特殊符號(hào)舵匾,比如",在字符中顯示時(shí)需要加\谁不,如\"坐梯,換行\(zhòng)n等等。
字符串拼接 >>
var a = 1; var b = 'ext';
var c = a+ b + 'asdf'
字符串c的自帶方法, .length(), .toUpperCase(), .toLowerCase(), .substring(start_index, end_index = last_ele), .indexOf(...返回..的首index)
數(shù)組array:
元素可修改刹帕,通過a[index] = ...的方式修改吵血,類比Python的list。
數(shù)組定義完成了如果賦值的index超過了數(shù)組長度偷溺,則數(shù)組自動(dòng)延長蹋辅,沒定義的indices都被定義為undefined.
a.indexOf(x)返回?cái)?shù)組中元素x的index。
a.slice(s, e): 類似于字符串的substring功能挫掏,注意end index是e-1侦另,這點(diǎn)與Python相同。
push/pop分別是向尾部添加元素和蔥尾部刪除元素尉共。
unshift/shift分別是向頭部添加元素和從頭部刪除元素褒傅。
splice(si, number, ...)是指定一個(gè)初始位置si,其后的number個(gè)元素被后面的...替換爸邢。如果不指定替換元素樊卓,則刪除前面指定位置的元素。
concat([..])相當(dāng)于拼接杠河。
用符號(hào)拼接,a.join('-')
條件判斷 if () {} else {}:
如果執(zhí)行語句只有一條浇辜,可以去掉{}券敌,但是建議不管執(zhí)行語句多少條都加{}.并不以自動(dòng)縮進(jìn)作為語句的語法。每條指令的結(jié)束加';'柳洋,這個(gè)';'要加在{}以內(nèi)待诅。條件語句中的并列條件中間用&&而非Python中的and。
沒有':'只有';'在else之前熊镣。
循環(huán):
for (初始條件; 終止條件; 變化)? {;}? 類似于C++
for ... in ...循環(huán)的表達(dá)
var ad = {key1: 1, key2: 2};
for (var x in ad) {console.log(x);} 其中的x是ad的key
var aa = ['1','asdf',2']
for (var x in aa) {console.log(x); console.log(aa[x]);}其中的x返回?cái)?shù)組的index卑雁。
for (var x of aa) {console.log(x);}x是數(shù)組中的元素募书。
while(條件) {執(zhí)行語句; 變化;}
do {執(zhí)行語句; 變化;} while (條件);
JavaScript有行末自動(dòng)添加分號(hào)的機(jī)制。
JS函數(shù):
形式1
function fn(x,y) { 執(zhí)行語句; return ans;}
形式2(匿名函數(shù)形式)
var fn = function(x,y) { 執(zhí)行語句; return ans;};
JS的函數(shù)引入一個(gè)關(guān)鍵字arguments测蹲,在函數(shù)內(nèi)部不需要定義arguments莹捡,它代表了函數(shù)傳入的所有變量,可以當(dāng)做一個(gè)數(shù)組扣甲。如arguments.length返回傳入?yún)?shù)個(gè)數(shù)篮赢。
2020.02.13
函數(shù)中變量的作用域:
在函數(shù)中定義變量時(shí)加var可使其成為局部變量。
JS掃描函數(shù)體琉挖,在一個(gè)函數(shù)內(nèi)启泣,只要一個(gè)變量被聲明,不管是在調(diào)用前后示辈,變量都被"提升"寥茫,也就是后聲明不會(huì)報(bào)錯(cuò)。但如果調(diào)用在聲明前矾麻,返回undefined坠敷,即變量聲明被提升,但變量賦值不會(huì)提升射富。建議用一個(gè)var在函數(shù)開始聲明所有變量膝迎,形式如
var x=1, y = 2, z = 3;
注意其中標(biāo)點(diǎn)符號(hào)使用。
不在函數(shù)內(nèi)定義的變量都是全局變量胰耗,全局變量的調(diào)用限次,可以直接調(diào)用變量名,也可以通過調(diào)用JS默認(rèn)的全局對(duì)象windows的以變量名為名的屬性柴灯。如下
'use strict'
var x = 1;
alert(window.x);
函數(shù)也是全局對(duì)象的一種屬性卖漫,直接調(diào)用函數(shù)名和通過window.函數(shù)名()方式調(diào)用的效果相同。
為避免定義的函數(shù)與window namespace中的變量/函數(shù)重名赠群,可在程序開始定義一個(gè)字典羊始,用以保存自定義的變量和函數(shù),對(duì)變量和函數(shù)的定義都是字典的一個(gè)key查描。
解析賦值:
一個(gè)數(shù)組的元素賦給不同的變量
var [x, [y, z]] = [1,[2,3]]
(對(duì)象中的)方法:
對(duì)象(即字典)中不僅可以保存變量突委,也可以保存函數(shù)。形如
var aob = { birth: 99,
age : function () { var x = this.birth - 1;
return x;}
};
age函數(shù)中的this.birth引用了aob對(duì)象中的變量birth冬三,this類似于python類中的self.
2020.02.14
window.onload()方法(插入在html文件中的)用于在網(wǎng)頁加載完成后立即執(zhí)行的方法匀油,通常用于<body>元素。
reference:
1