JavaScript語法
一、JavaScript的組成
完整的JavaScript是由ECMAScript(語法)、Browser Objects(DOM、BOM)(特性)組成的。
二织中、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。
<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);//及格