JavaScript語法

JavaScript語法

一、JavaScript的組成

完整的JavaScript是由ECMAScript(語法)、Browser Objects(DOM、BOM)(特性)組成的。

JavaScript的組成.jpg

二织中、javaScript的語法規(guī)則

1.注釋:

單行://
多行:/**/
語句結(jié)束使用分號,如果省略衷戈,則由解析器確定語句的結(jié)尾

注:ECMAScript中的一切(變量狭吼、函數(shù)和操作符)都區(qū)分大小寫

2.標(biāo)識符

變量、函數(shù)殖妇、屬性的名字或者函數(shù)的參數(shù)即標(biāo)識符

命名規(guī)則:
(1)由字母刁笙、數(shù)字、下劃線(_)或美元符號($)組成
(2)不能以數(shù)字開頭
(3)不能使用關(guān)鍵字谦趣、保留字等作為標(biāo)識符疲吸。

3.變量
ECMAScript的變量是松散類型
松散類型:可以用來保存任何類型的數(shù)據(jù)
換句話說,每個變量僅僅是一個用于保存值的占位符而已前鹅。
1.變量聲明:
變量的聲明要使用var操作符摘悴,
語法:var 變量名

2.變量賦值:
聲明的同時賦值:var 變量名=值
先聲明后賦值: 變量名=值

一次聲明多個變量,用逗號隔開舰绘,如:var id,sex,age,name=“marry”;
省略var聲明的變量是全局變量
不推薦省略var操作符來定義全局變量

<script>
    //聲明保存用戶名的變量
    var name;
    name="marry";
    //聲明保存年齡的變量
    var age = 18;
    //聲明保存郵箱的變量
    var email="marry@sina.com.cn";
    //一次聲明多個變量
    var name_1="tom",age1=19,email1="tom@sohu.com",address;
</script>

4.JavaScript數(shù)據(jù)類型

ECMAScript中有5種簡單數(shù)據(jù)類型(也稱為基本數(shù)據(jù)類型):
Undefined蹂喻、Null延赌、Boolean、Number和String叉橱。
還有1種復(fù)雜數(shù)據(jù)類型:Object。

JavaScript數(shù)據(jù)類型.jpg
typeof.jpg
<script>
    //聲明保存用戶名的變量
    var name;
    name="marry";
    //聲明保存年齡的變量
    var age = 18;
    //聲明保存郵箱的變量
    var email="marry@sina.com.cn";
    //一次聲明多個變量
    var name_1="tom",age1=19,email1="tom@sohu.com",address;
    console.log(name)
    console.log(age)
    console.log(typeof name) //string
    console.log(typeof(age)) //number
</script>

(1)undefined
undefined類型只有一個值者蠕,即特殊的undefined窃祝。

說明:一般而言,不存在需要顯式地把一個變量設(shè)置為undefined值的情況踱侣。

(2)null
1粪小、null值表示一個空對象指針
2、如果定義的變量準(zhǔn)備在將來用于保存對象抡句,那么最好將改變量初始化為null而不是其他值探膊。

說明:undefined值是派生自null值的,所以undefined==null
返回結(jié)果是true待榔。

(3)Number
Number:表示整數(shù)和浮點(diǎn)數(shù)
NaN:即非數(shù)值(Not a Number)是一個特殊的數(shù)值

說明:
1逞壁、任何涉及NaN的操作(例如NaN/10)都會返回NaN。
2锐锣、NaN與任何值都不相等腌闯,包括NaN本身。

var age = 18;
console.log(age-3); //15
console.log(age-"abc") //NaN
console.log(typeof(age-"abc"));//number

isNaN():
語法:isNaN(n)
功能:檢測n是否是“非數(shù)值”
返回值:boolean
參數(shù):參數(shù)n可以是任何類型
說明:isNaN()在接收到一個值之后雕憔,會嘗試將這個值轉(zhuǎn)換為數(shù)值姿骏。
某些不是數(shù)值的值會直接轉(zhuǎn)換為數(shù)值。

var age = 18;
var email="marry@sina.com.cn";
var id = "16";
console.log(isNaN(age));//false
console.log(isNaN(email));//true
console.log(isNaN(id));//false

(4)String
String類型用于表示由零或多個16位Unicode字符組成的字符序列斤彼,即字符串分瘦。字符串可以由雙引號(”)或單引號(’)表示。

toString()與String():
語法:str.toString()
功能:將str轉(zhuǎn)換為字符串
返回值:str的一個副本
參數(shù):str是要轉(zhuǎn)換的內(nèi)容琉苇,可以是數(shù)值嘲玫、布爾值、對象和字符串并扇。

說明: 在不知道要轉(zhuǎn)換的值是不是null或undefined的情況下趁冈,還可以使用String()函數(shù),它能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換為字符串拜马。

var ids = 78965;
var idstr = ids.toString();
console.log(typeof idstr) //string 78965
console.log(String(ids)); //78965

var m;
console.log(String(m));//不清楚m為什么類型渗勘,盡量使用String();

(5)Boolean
用于表示真假的類型,即true表示真俩莽,false表示假

類型轉(zhuǎn)換:
1旺坠、除0之外的所有數(shù)字,轉(zhuǎn)換為布爾型都為true
2扮超、除””之外的所有字符取刃,轉(zhuǎn)換為布爾型都為true
3蹋肮、null和undefined轉(zhuǎn)換為布爾型為false

var isStudent=true;
var isChild=false;
console.log(typeof isStudent);//boolean

console.log(isChild.toString());//false 此時的false是一個字符串

var x=1;
console.log(Boolean(x));//true
var y=12343
console.log(Boolean(y));//true
var z=0;
console.log(Boolean(z));//false

var strings="welcome";
console.log(Boolean(strings));//true

var strings1="";
console.log(Boolean(strings1));//false

var strings2=" ";
console.log(Boolean(strings2));//true

var h;
console.log(Boolean(h));//false

var timer=null
console.log(Boolean(timer));//false

5.數(shù)值轉(zhuǎn)換
有3個函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值:Number()、parseInt()和
parseFloat()璧疗。
其中Number()可以用于任何數(shù)據(jù)類型坯辩,而parseInt()和parseFloat()則專門用于把字符串轉(zhuǎn)換成數(shù)值。

(1)parseInt():會忽略字符串前面的空格崩侠,直至找到第一個非空格字符漆魔。

說明:
1、parseInt():轉(zhuǎn)換空字符串返回NaN却音。
2改抡、parseInt()這個函數(shù)提供第二個參數(shù):轉(zhuǎn)換時使用的基數(shù)(即多少進(jìn)制)

var id = "16";
console.log(typeof id);//string
id=Number(id);
console.log(typeof id);//number

var name="tom"
name = Number(name);
console.log(name);//NaN

// var topVal="28px";
var topVal=parseInt("28px");
console.log(topVal);//28

var c="abc58"; //非數(shù)字開頭
console.log(parseInt(c));//NaN  parseInt轉(zhuǎn)換的必須以數(shù)字開頭

console.log(parseInt("0xf"));//15  把0xf轉(zhuǎn)化為16進(jìn)制

(2)parseFloat:從第一個字符開始解析每個字符,直至遇見一個無效的浮點(diǎn)數(shù)字符為止

說明:
除了第一個小數(shù)點(diǎn)有效外系瓢,parseFloat()與parseInt()的第二個區(qū)別在于它始終都會忽略前導(dǎo)的零阿纤。

var a = parseFloat("12.34px");
console.log(a);//12.34

var b = parseInt("12.34px");
console.log(b) //12

var c = parseFloat("12.34.56px");
console.log(c);//12.34 第二個小數(shù)點(diǎn)會忽略

var e = parseInt("0123");
console.log(e);//123

var f = parseFloat("0123");
console.log(f);//123

var g = parseFloat("0.123abc");
console.log(g);//0.123

三、JavaScript操作符

1.表達(dá)式

將同類型的數(shù)據(jù)(如常量夷陋、變量欠拾、函數(shù)等),用運(yùn)算符號按一定的規(guī)則連接起來的骗绕、有意義的式子稱為表達(dá)式清蚀。

2.JavaScript操作符分類

1、算數(shù)操作符

+ :加
- :減
* :乘
/ :除
%:取余

遞增和遞減
(1)遞增
++a與a++都是對a進(jìn)行遞增的操作
區(qū)別:
++a先返回遞增之后的a的值
a++先返回a的原值爹谭,再返回遞增之后的值
(2)遞減同理

var num1=10,num2="abc";
console.log(num1*num2); //NaN

var num1=10,num2="5";
console.log(num1*num2); //50 隱式類型轉(zhuǎn)換


var a=10,b=5,
    c=++a+b;
console.log(a);//11
console.log(c);//16

var a=10,b=5,
    c=a++-b;
console.log(a);//11
console.log(c);//5

x1=20,
x2=30,
x3=--x1+x2--;
console.log(x1);//19
console.log(x2);//29
console.log(x3);//49

2枷邪、邏輯操作符
邏輯操作符:
①&&:與
&& 與 (只要有一個條件不成立,返回false)

說明:在有一個操作數(shù)不是布爾值的情況诺凡,邏輯與操作就不一定返回值东揣,
此時它遵循下列規(guī)則:
1、如果第一個操作數(shù)隱式類型轉(zhuǎn)換后為true腹泌,則返回第二個操作數(shù)
2嘶卧、如果第一個操作數(shù)隱式類型轉(zhuǎn)換后為false,則返回第一個操作數(shù)
3凉袱、如果有一個操作數(shù)是null芥吟,則返回null
4、如果有一個操作數(shù)是NaN专甩,則返回NaN
5钟鸵、如果有一個操作數(shù)是undefined,則返回undefined

var num1=10,
    num2=20,
    num3=30,
    str="welcome",
    bool=true,
    n=null,
    m;
console.log(num1<num2 && num2<num3);//true
console.log(num1<num2 && num2==num3);//false
console.log(num1<num2 && num3>num1 && false);//false

console.log(str && num3);//30
console.log(80 && 50);//50
console.log("hello" && 65 && "abc");//abc 多個時返回最后一個操作數(shù)的值

console.log(0 && 88);//0
console.log("" && 0 && 30>20);//空

console.log(n && num3);//null  操作數(shù)中只要有一個是null 結(jié)果就是null
console.log(33*"abc" && 55);//NaN
console.log(m && true); //undefined

②||:或
|| 或 (只要有一個條件成立涤躲,返回true)

說明:在有一個操作數(shù)不是布爾值的情況棺耍,邏輯與操作就不一定返回
值,此時它遵循下列規(guī)則:
1种樱、如果第一個操作數(shù)隱式類型轉(zhuǎn)換后為true蒙袍,則返回第一個操作數(shù)
2俊卤、如果第一個操作數(shù)隱式類型轉(zhuǎn)換后為false,則返回第二個操作數(shù)
3害幅、如果兩個操作數(shù)是null消恍,則返回null
4、如果兩個操作數(shù)是NaN以现,則返回NaN
5狠怨、如果兩個操作數(shù)是undefined,則返回undefined

console.log(55>88 || 33<66);//true
console.log(55!="55" || 88==="88");//false
console.log("hello" || 0);//hello
console.log(99 || 0 || "abc");//99
console.log("" || 88 || true);//88
console.log("" || 0 || "abc");//abc
console.log("" || 0 || null);//null
console.log("" || 0 || null || "hello");//hello
var m;
console.log(m || NaN);//NaN
console.log(m || NaN || 99);//99
console.log("" || m);//undefined
console.log(30*"abc" || 55-"def");//NaN

③5鸱纭:非
! 非

說明:
1、無論操作數(shù)是什么數(shù)據(jù)類型棍苹,邏輯非都會返回一個布爾值
2无宿、 ! ! 同時使用兩個邏輯非操作符時:
第一個邏輯非操作會基于無論什么操作數(shù)返回一個布爾值,
第二個邏輯非則對該布爾值求反枢里。

console.log(!false);//true
console.log(!88);//false
console.log(!0);//true
console.log(!"red");//false
console.log(!NaN);//true
console.log(!null);//true

console.log(!!"");//false
console.log(!!"blue");//true

3孽鸡、賦值操作符
簡單賦值:=
復(fù)合賦值:+=、-=栏豺、*=彬碱、/=、%=

var a=10;
var b=20;
a+=5;
b%=4;
console.log(a);//15
console.log(b);//0

var str="hello ";
str+="world"http://連接符 str=str+"world";
console.log(str); //hello world

4奥洼、比較操作符

>巷疼、<、>=灵奖、<=嚼沿、==、===瓷患、!=骡尽、!==
==:相等擅编,只比較值是否相等
===:相等攀细,比較值的同時比較數(shù)據(jù)類型是否相等
!=:不相等爱态,比較值是否不相等
谭贪!==:不相等,比較值的同時比較數(shù)據(jù)類型是否不相等
返回值:boolean型

例:

var x=10,
    y="10",
    c=x==y;//值是否相等
console.log(c);//true

z=x===y;//全等
console.log(z);//false

var m=15,
    n=y!=m;
console.log(n);//true
k=x!=y;
console.log(k);//false
j=x!==y;
console.log(j);//true

console.log(null==undefined);//true
console.log(null===undefined);//false

5锦担、三元操作符
語法:
條件 ? 執(zhí)行代碼1:執(zhí)行代碼2

說明:可代替簡單的if語句故河,如果條件成立,執(zhí)行代碼1吆豹,否則執(zhí)行代碼2

var score=85;
var result=(score>=60)?"及格":"不及格";
console.log(result);//及格
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鱼的,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凑阶,更是在濱河造成了極大的恐慌,老刑警劉巖姨俩,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異师郑,居然都是意外死亡环葵,警方通過查閱死者的電腦和手機(jī)宝冕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來地梨,“玉大人菊卷,你說我怎么就攤上這事”ζ剩” “怎么了洁闰?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵扑眉,是天一觀的道長。 經(jīng)常有香客問我襟雷,道長仁烹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任卓缰,我火速辦了婚禮征唬,結(jié)果婚禮上捌显,老公的妹妹穿的比我還像新娘总寒。我一直安慰自己,他們只是感情好善镰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乎完,像睡著了一般品洛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桥状,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機(jī)與錄音转晰,去河邊找鬼砾肺。 笑死防嗡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚁趁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼番官,長吁一口氣:“原來是場噩夢啊……” “哼钢属!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起淆党,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤染乌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后荷憋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡串前,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年酪呻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玩荠。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡佳晶,死狀恐怖蚁袭,靈堂內(nèi)的尸體忽然破棺而出螟左,到底是詐尸還是另有隱情艰额,我是刑警寧澤劳景,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布盟广,位于F島的核電站瓮钥,受9級特大地震影響筋量,放射性物質(zhì)發(fā)生泄漏碉熄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一呀酸、第九天 我趴在偏房一處隱蔽的房頂上張望琼梆。 院中可真熱鬧,春花似錦艾栋、人聲如沸蛉顽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闲勺。三九已至扣猫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間申尤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工勺远, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留时鸵,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓初坠,卻偏偏與公主長得像彭雾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子冠跷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容