字符集:
1.區(qū)分大小寫(xiě)飞涂,
2.空格,換行符,和格式控制字符要轉(zhuǎn)義
3.注釋采用//單行注釋
/多行注釋//
4.直接量:js中直接使用的量较店,比如數(shù)字士八,小數(shù),字符串文本梁呈,文本婚度,布爾值,正則表達(dá)式直接量官卡,null空蝗茁,對(duì)象和數(shù)組5.標(biāo)識(shí)符和保留字:js中標(biāo)識(shí)符必須是字母,_寻咒,$開(kāi)始哮翘,保留字是js中使用的字母,不能用于標(biāo)識(shí)符毛秘。
5.分號(hào)可選饭寺,不過(guò)建議還是按規(guī)范寫(xiě)好。
類(lèi)型叫挟,值和變量:
以下是概要艰匙,有個(gè)大致理解
j s的值分為兩類(lèi):原始類(lèi)型(primitive type)和對(duì)象類(lèi)型(object type)。
原始類(lèi)型包含:
數(shù)字抹恳,字符串员凝,布爾值。其中有兩個(gè)特殊的原始值(null 和 undefined),他們不是數(shù)字适秩,字符串或者布爾值绊序,而是代表各自特殊類(lèi)型的唯一成員。
對(duì)象類(lèi)型:
對(duì)象(object)是屬性(property)的集合秽荞,每個(gè)屬性都由“名:值”成對(duì)(值可以是數(shù)字骤公,字符串或者對(duì)象)構(gòu)成。
普通的對(duì)象是“命名值”的無(wú)序集合扬跋,js還定義了一種特殊的對(duì)象——數(shù)組(array)阶捆,是帶有編號(hào)的值的有序集合。
還有一種特殊對(duì)象就是函數(shù)钦听,函數(shù)的定義:函數(shù)是具有與他相關(guān)聯(lián)的可執(zhí)行代碼的對(duì)象洒试,通過(guò)調(diào)用函數(shù)來(lái)運(yùn)行可執(zhí)行的代碼。(他們都是真值)
用new初始化一個(gè)新建的對(duì)象朴上,稱(chēng)之為構(gòu)造函數(shù)垒棋。每個(gè)構(gòu)造函數(shù)定義了一類(lèi)對(duì)象——由構(gòu)造函數(shù)初始化的對(duì)象組成的集合。類(lèi)看做是對(duì)象類(lèi)型的子類(lèi)型痪宰。(叼架?畔裕?)
js定義的類(lèi):數(shù)組(array)類(lèi),函數(shù)(function)類(lèi)乖订,日期(date)類(lèi)定義了代表日期的對(duì)象扮饶,正則(RegExp)類(lèi)定義了正則表達(dá)式(用于匹配,很實(shí)用)乍构,錯(cuò)誤(Error)類(lèi)定義了程序運(yùn)行時(shí)錯(cuò)誤和錯(cuò)誤語(yǔ)法的對(duì)象甜无。
js解釋器有自己的內(nèi)存管理機(jī)制,簡(jiǎn)單點(diǎn)就是說(shuō)不必?fù)?dān)心對(duì)象會(huì)浪費(fèi)內(nèi)存資源哥遮,對(duì)象不用了他就自動(dòng)回收內(nèi)存資源
js是面向?qū)ο蟮恼Z(yǔ)言岂丘,比如對(duì)數(shù)組排序,不必將a傳入sort函數(shù)眠饮,而是調(diào)用a 的sort()方法(大白話(huà):函數(shù)方法為對(duì)象服務(wù)元潘,而不是對(duì)象去迎合函數(shù))
a.sort();// sort(a)的面向?qū)ο蟀姹?
js可以改變對(duì)象屬性和數(shù)組元素的值,但不能改變數(shù)字本身君仆,字符串也不能被改變。
js的數(shù)據(jù)類(lèi)型是可以相互轉(zhuǎn)換的牲距。
不在函數(shù)內(nèi)聲明的變量稱(chēng)為全局變量返咱,在任何地方都是可見(jiàn)的。另外還有局部變量牍鞠,在函數(shù)內(nèi)聲明的變量咖摹。
1.數(shù)字
js不區(qū)分整數(shù)和浮點(diǎn)數(shù),取值范圍類(lèi)似于double难述。
1.1整型直接量
能識(shí)別十進(jìn)制萤晴,十六進(jìn)制(0x開(kāi)頭,后跟隨09和af 代表1015)胁后,八進(jìn)制(0開(kāi)頭店读,后跟隨07)的值。
1.2浮點(diǎn)型直接量
3.14
.333333
6.02e23 //6.0210^23
6.02E-23 //6.0210^-23
1.3算數(shù)運(yùn)算符
溢出:數(shù)字過(guò)大時(shí)攀芯,Infinity表示無(wú)窮大屯断,數(shù)字過(guò)小時(shí),-Infinity表示無(wú)窮小
下溢:正數(shù)表示比最小值還小時(shí)侣诺,0殖演。負(fù)數(shù)下溢時(shí)返回-0
NaN不是數(shù)字,正0值和負(fù)0值相等年鸳,但正無(wú)窮和負(fù)無(wú)窮不等
1.4 浮點(diǎn)數(shù)和四舍五入
.3-.2的近似值并不等于.2-.1
1.5日期和時(shí)間
Date()構(gòu)造函數(shù)趴久,創(chuàng)建表示時(shí)間和日期的對(duì)象,example:
var then = new Date(2011,0,1);//2011.1.1
var later = new Date(2011,0,1,17,10,30);//2011.1.1 下午5:10:30
var now = new Date()//當(dāng)前時(shí)間
var elapsed=new-then//計(jì)算時(shí)間間隔的毫秒數(shù)
later.getFullYear() //2011
later.getMonth() //0 -->從0開(kāi)始計(jì)數(shù)的月份
later.getDate()//1 -->從1開(kāi)始計(jì)數(shù)的天
later.getDay()//5--> 0 周日 ,5 周一
later.getHours()//當(dāng)?shù)貢r(shí)間
later.getUTHours()//基于時(shí)區(qū)
2.文本
2.1字符串直接量
字符串由16位值組成的序列
“” 表示空字符串
“two\lines” //這里定義了兩行字符串搔确,ECMAScript5定義的
2.2轉(zhuǎn)義字符
\n換行
\ 的組合:\o nul字符 \b 退格符
2.3字符串的使用
字符串有很多方法
var s=“hello”
s.length //s的長(zhǎng)度彼棍,還有很多方法可以參考api
s.split()
s.replace()
s.toUpperCase()
s.charAt()
可以用+連接兩個(gè)字符串
2,4 模式匹配
正則表達(dá)式灭忠,可以看30分鐘入門(mén)正則(其實(shí)不止30分鐘,但看了就能理解了)
http://deerchao.net/tutorials/regex/regex.htm
3 布爾值
true or false
|| 或 滥酥,&& 與更舞,建議去看一下真值表。(大學(xué)離散數(shù)學(xué)學(xué)過(guò))
4.null 和undefined
null 是一個(gè)對(duì)象坎吻,通常描述空值或者無(wú)值缆蝉。
undefined表示更深層次的空值,這個(gè)屬性或者元素不存在
null和undefined兩者往往可以互換瘦真,undefined可以理解為系統(tǒng)級(jí)別出乎意料的空值或錯(cuò)誤刊头,null是程序級(jí)的,正常意料之中的錯(cuò)誤诸尽。
5.全局函數(shù)
全局屬性:undefined Infinty NaN
全局函數(shù):isNaN() parseInt() eval()
構(gòu)造函數(shù):Date() RegExp() String() Object() Arrary()
全局對(duì)象:Math() JSON
全局函數(shù)代碼最頂級(jí)原杂,還有window,在客戶(hù)端中(瀏覽器)充當(dāng)了全局對(duì)象
6.包裝對(duì)象
思考以下
var a ="hello";// 創(chuàng)建一個(gè)字符串
a.len="5" //給她設(shè)置一個(gè)屬性
var b=a.len //查詢(xún)這個(gè)屬性您机,結(jié)果并不是5穿肄,而是undefined。
答案
一般情況下我們用的屬性和方法都是通過(guò)“.”來(lái)訪問(wèn)的际看。比如
console.log("hello".length);//結(jié)果是5
但其實(shí)js已經(jīng)隱式的為我們創(chuàng)建了一個(gè)包裝對(duì)象
console.log(new String("hello".length));//結(jié)果是5
兩者看似沒(méi)區(qū)別咸产,其實(shí)有區(qū)別:
var a1="test";
var a2=new String("test");
console.log(a1==a2);//true
console.log(a1===a2);//false
js自己創(chuàng)建的和你自己創(chuàng)建的就是不一樣。
還有個(gè)不同就是
再拿之前的的例子:
var a ="hello";// 創(chuàng)建一個(gè)字符串
a.len="5" //給她設(shè)置一個(gè)屬性仲闽,此時(shí)隱式的創(chuàng)建了一個(gè)對(duì)象脑溢,但是用完之后就銷(xiāo)毀了
var b=a.len //查詢(xún)這個(gè)屬性,結(jié)果并不是5赖欣,而是undefined屑彻。(銷(xiāo)毀了,自然不存在.len的賦值)
總之推薦自己包裝對(duì)象顶吮,不易出錯(cuò)
7.不可變的原始值和可變的對(duì)象引用
原始值(undefined社牲,null,字符串云矫,數(shù)字膳沽,布爾值)是值的比較,值是無(wú)法改變的让禀。值的長(zhǎng)度和索引的字符位置也相同時(shí)兩個(gè)字符相同
var s="hello"; // 定義一個(gè)字符串
s.toUpperCase();//返回HELLO
s //返回hello 挑社,原始字符串的值并未改變
對(duì)象(數(shù)組和函數(shù))的值是可以改變的,對(duì)象相等必須是引用同一個(gè)基對(duì)象巡揍。
var o ={x:1}痛阻;//創(chuàng)建一個(gè)對(duì)象o
o.x=2;//修改對(duì)象的 屬性值來(lái)改變對(duì)象
o.y=3;//再次更改這個(gè)對(duì)象,并增加一個(gè)新屬性
var a=[1,1,2];//創(chuàng)建數(shù)組
a[0]=2;//第一個(gè)元素修改為2
a[3]=5;//給數(shù)組增加一個(gè)新元素
8.類(lèi)型轉(zhuǎn)換
js一般會(huì)自動(dòng)轉(zhuǎn)換所需要的類(lèi)型腮敌。
“==”是判斷兩個(gè)值是否相等
“===”判斷兩個(gè)值和類(lèi)型是否相等
顯式轉(zhuǎn)換:
Number("3") -----3 數(shù)字
String(false) -----"false",字符串
Boolean([]) ---true
Object(3) -----new number(3)
9.變量聲明
使用變量之前先聲明阱当,如果沒(méi)有聲明俏扩,那他就是undefined
var i,sum;
var message="hello";
var i=1,j=2,k=3;
10.變量的作用域
通俗來(lái)講,在整個(gè)代碼中定義的變量弊添,那他的作用域則是整篇代碼录淡,就是全局變量
在函數(shù)內(nèi)定義的變量,作用域是當(dāng)前函數(shù)油坝,就是局部變量嫉戚。
局部變量的優(yōu)先級(jí)高于同名的全局變量
var scope ="global";
function checkscope(){
var scope = "local";
return scope; // 返回局部變量而不是全局變量
}
checkscope() //---->local
函數(shù)作用域和聲明提前:在函數(shù)內(nèi)部,不管在哪里聲明澈圈,其實(shí)他們都是統(tǒng)一被放在函數(shù)頂部被聲明彬檀。所以通常的做法是在函數(shù)頂部統(tǒng)一聲明變量。(預(yù)解析瞬女,并不會(huì)進(jìn)行賦值等操作)
作為屬性的變量
全局變量是全局對(duì)象的屬性窍帝,是不可刪除的(無(wú)法通過(guò)delete運(yùn)算符刪除)纪挎。而在局部變量中則沒(méi)有這個(gè)規(guī)定涯鲁。而你沒(méi)有聲明全局變量時(shí),由js自己創(chuàng)建的全局變量時(shí)可以刪除的肢簿。
var truevar=1;//聲明一個(gè)不可刪除的全局變量
fakevar=2;//由js創(chuàng)建的全局變量
this.fakevar2=3;//同上
delete turevar// FALSE沒(méi)有被刪除
delete fakevar//true 刪除了
delete this.fakevar2//TRUE 刪除了