python之路2.0_Python之路【第二十一篇】:JS基础
1.2 ECMAScript
盡管 ECMAScript 是一個重要的標準,但它并不是 JavaScript 唯一的部分,當然,也不是唯一被標準化的部分。實際上,一個完整的 JavaScript 實現(xiàn)是由以下 3 個不同部分組成的:
●?核心(ECMAScript)
●?文檔對象模型(DOM) Document object model (整合js,css,html)
●?瀏覽器對象模型(BOM) Broswer object model(整合js和瀏覽器)
●?Javascript 在開發(fā)中絕大多數(shù)情況是基于對象的.也是面向?qū)ο蟮?
簡單地說,ECMAScript描述以下內(nèi)容:
● 語法
● 類型
● 語句
● 關(guān)鍵字
● 保留字
● 運算符
● 對象(封裝、繼承、多態(tài))基于對象的語言,使用對象
1.3 JavaScript的引入方式
Title二、JavaScript基礎(chǔ)
2.1 變量
x=12
y=16
z=x+y
在代數(shù)中,我們使用字母(比如x)來保存值(比如12)。
通過上面的表達式z=x+y,我們能夠計算出z的值為28.
在JavaScript中,這些字母被稱為變量。
0變量時弱類型的(很隨便);
1、聲明變量時不用聲明變量類型,全部使用var關(guān)鍵字;
1 var a;
2、一行可以聲明多個變量,并且可以是不同類型;
1 var name='simon', age=23, job='teacher';
3、聲明變量時,可以不用var,如果不用var,那么它是全局變量。
4、變量命名,首字母只能是字母,下劃線,$美元符 三選一,且區(qū)分大小寫,x與X是兩個變量
5、變量還應(yīng)遵循以下命名規(guī)則:
Camel 標記法
首字母是小寫的,接下來的字母都以大寫字符開頭。例如:
var myTestValue = 0, mySecondValue = "hi";
Pascal 標記法
首字母是大寫的,接下來的字母都以大寫字符開頭。例如:
Var MyTestValue = 0, MySecondValue = "hi";
匈牙利類型標記法
在以 Pascal 標記法命名的變量前附加一個小寫字母(或小寫字母序列),說明該變量的類型。例如,i 表示整數(shù),s 表示字符串,如下所示“
Var iMyTestValue = 0, sMySecondValue = "hi";
注意:
function func1(){
var a = 123;
b=456
}
func1();
// alert(a);
// alert(b);
// 不推薦
2.2 基礎(chǔ)規(guī)范
1、每行結(jié)束可以不加分號,沒有分號會以換行符作為每行的結(jié)束
a=1;b=2;
a=1 b=2;------錯誤
a=1b=2
//推薦
a=1;
b=2;
{
a=1;
b=2;
//推薦加tab
a=1;
b=2;
}
2、注釋 支持多行注釋和單行注釋 /*? */? //
3、使用{}來封裝代碼塊
2.3 常量和標識符
常量?:直接在程序中出現(xiàn)的數(shù)據(jù)值
標識符:
1、由不以數(shù)字開頭的字母、數(shù)字、下劃線(_)、美元符號($)組成
2、常用于表示函數(shù)、變量等的名稱/
3、例如:_abc,$abc,abc,abc123是標識符,而1abc不是
4、JavaScript語言中代表特定含義的詞稱為保留字,不允許程序再定義為標識符
三、 數(shù)據(jù)類型
3.1 數(shù)字類型(Number)
簡介
最基本的數(shù)據(jù)類型
不區(qū)分整型數(shù)值和浮點型數(shù)值
所有數(shù)字都采用64位浮點格式存儲,相當于Java和C語言中的double格式
能表示的最大值是±1.7976931348623157 x 10308能表示的最小值是±5 x 10 -324
整數(shù):
在JavaScript中10進制的整數(shù)由數(shù)字的序列組成
精確表達的范圍是?-9007199254740992 (-253) 到 9007199254740992 (253)
超出范圍的整數(shù),精確度將受影響
浮點數(shù):
使用小數(shù)點記錄數(shù)據(jù)
例如:3.4,5.6
使用指數(shù)記錄數(shù)據(jù)
例如:4.3e23 = 4.3 x 1023
16進制和8進制數(shù)的表達
16進制數(shù)據(jù)前面加上0x,八進制前面加0
16進制數(shù)是由0-9,A-F等16個字符組成
8進制數(shù)由0-7等8個數(shù)字組成
16進制和8進制與2進制的換算
# 2進制: 1111 0011 1101 0100 16進制:0xF3D4 10進制:62420# 2進制: 1 111 001 111 010 100 8進制:0171724
3.2 字符串(String)
簡介
是由Unicode字符、數(shù)字、標點符號組成的序列
字符串常量首尾由單引號或雙引號括起
JavaScript中沒有字符類型
常用特殊字符在字符串中的表達
字符串中部分特殊字符必須加上右劃線\
常用的轉(zhuǎn)義字符 \n:換行 \':單引號 \":雙引號 \\:右劃線
String數(shù)據(jù)類型的使用
● 特殊字符的使用方法和效果
● Unicode的插入方法
varstr="\u4f60\u597d\n歡迎來到\"JavaScript世界\"";
alert(str);
3.3 布爾型(Boolean)
簡介
Boolean類型僅有兩個值:true和false,也代表1和0,實際運算中true=1,false=0
布爾值也可以看作on/off、yes/no、1/0對應(yīng)true/false
Boolean值主要用于JavaScript的控制語句,例如
if (x==1){
y=y+1;
}else {
y=y-1;
}
3.4 Null & Undefined
Undefined 類型
Undefined 類型只有一個值,即 undefined。當聲明的變量未初始化時,該變量的默認值是 undefined。
當函數(shù)無明確返回值時,返回的也是值 "undefined";
Null 類型
另一種只有一個值的類型是 Null,它只有一個專用值 null,即它的字面量。值 undefined 實際上是從值 null 派生來的,因此 ECMAScript 把它們定義為相等的。
盡管這兩個值相等,但它們的含義不同。undefined 是聲明了變量但未對其初始化時賦予該變量的值,null 則用于表示尚未存在的對象(在討論 typeof 運算符時,簡單地介紹過這一點)。如果函數(shù)或方法要返回的是對象,那么找不到該對象時,返回的通常是 null。
var person=new Person()
var person=null
3.5 數(shù)據(jù)類型轉(zhuǎn)換
JavaScript屬于松散類型的程序語言
變量在聲明的時候并不需要指定數(shù)據(jù)類型
變量只有在賦值的時候才會確定數(shù)據(jù)類型
表達式中包含不同類型數(shù)據(jù)則在計算過程中會強制進行類別轉(zhuǎn)換
數(shù)字 +字符串:數(shù)字轉(zhuǎn)換為字符串
數(shù)字 +布爾值:true轉(zhuǎn)換為1,false轉(zhuǎn)換為0
字符串 + 布爾值:布爾值轉(zhuǎn)換為字符串true或false
3.6強制類型轉(zhuǎn)換函數(shù)
函數(shù)parseInt: 強制轉(zhuǎn)換成整數(shù) 例如parseInt("6.12")=6 ; parseInt(“12a")=12 ; parseInt(“a12")=NaN ;parseInt(“1a2")=1
函數(shù)parseFloat: 強制轉(zhuǎn)換成浮點數(shù) parseFloat("6.12")=6.12
函數(shù)eval: 將字符串強制轉(zhuǎn)換為表達式并返回結(jié)果 eval("1+1")=2 ; eval("1<2")=true
3.7?類型查詢函數(shù)(typeof)
ECMAScript提供了typeof運算符來判斷一個值是否在某種類型的范圍內(nèi)。可以用這種運算符判斷一個值是否表示一種原始類型:如果它是原始類型,還可以判斷它表示哪種原始類型。
函數(shù)typeof :查詢數(shù)值當前類型? (string / number / boolean /object )
例如typeof("test"+3) "string"例如typeof(null) "object "例如typeof(true+1) "number"例如typeof(true-false) "number"
// typeof:區(qū)分基本數(shù)據(jù)類型
console.log(typeof 123);
console.log(typeof "hello");
console.log(typeof true);
console.log(typeof null);
console.log(typeofundefined);
console.log(typeof [1,2,3,4]);
console.log(typeof {"name":"simon"});
顯示如下:
四、ECMAScript運算符
4.1?ECMAScript 算數(shù)運算符
加(+)、 減(-)、 乘(*) 、除(/) 、余數(shù)(% ) 加、減、乘、除、余數(shù)和數(shù)學(xué)中的運算方法一樣 例如:9/2=4.5,4*5=20,9%2=1
-除了可以表示減號還可以表示負號 例如:x=-y
+除了可以表示加法運算還可以用于字符串的連接 例如:"abc"+"def"="abcdef"
遞增(+ +)、遞減(- -)
假如x=2,那么x++表達式執(zhí)行后的值為3,x--表達式執(zhí)行后的值為1
i++相當于i=i+1,i--相當于i=i-1遞增和遞減運算符可以放在變量前也可以放在變量后:--i
var i=1;
console.log(i++);
console.log(++i);
console.log(i--);
console.log(--i);
一元加減法:
var a=1;
var b=1;
a=-a; //a=-1
var c="10";
alert(typeof(c));
c=+c; //類型轉(zhuǎn)換
alert(typeof(c));
// -------------------
var d="yuan";
d=+d;
alert(d);//NaN:屬于Number類型的一個特殊值,當遇到將字符串轉(zhuǎn)成數(shù)字無效時,就會得到一個NaN數(shù)據(jù)
alert(typeof(d));//Number
//NaN特點:
var n=NaN;
alert(n>3);
alert(n<3);
alert(n==3);
alert(n==NaN);
alert(n!=NaN);//NaN參與的所有的運算都是false,除了!=
五、ECMAScript邏輯運算符
等于 ( == ) 、不等于( != ) 、 大于( > ) 、 小于( < ) ?大于等于(>=) 、小于等于(<=)
與 (&&) 、或(||) 、非(!)
&& 1 = 1 1 || 1 = 1
&& 0 = 0 1 || 0 = 1
&& 0 = 0 0 || 0 = 0
!0=1
!1=0
邏輯 AND 運算符(&&)
邏輯 AND 運算的運算數(shù)可以是任何類型的,不止是 Boolean 值。
如果某個運算數(shù)不是原始的 Boolean 型值,邏輯 AND 運算并不一定返回 Boolean 值:
如果某個運算數(shù)是 null,返回 null。
如果某個運算數(shù)是 NaN,返回 NaN。
如果某個運算數(shù)是 undefined,返回undefined。
邏輯 OR 運算符(||)
與邏輯 AND 運算符相似,如果某個運算數(shù)不是 Boolean 值,邏輯 OR 運算并不一定返回 Boolean 值
六、ECMAScript賦值運算符
賦值 =JavaScript中=代表賦值,兩個等號==表示判斷是否相等
例如,x=1表示給x賦值為1
if (x==1){...}程序表示當x與1相等時
if(x==“on”){…}程序表示當x與“on”相等時
配合其他運算符形成的簡化表達式
例如i+=1相當于i=i+1,x&=y相當于x=x&y
實例:
2 == “2”
2 === “2”
4 != “4”
4 !== “4”
var a = 2; var b = 4;
var c = a--a;
var c = a--a;
var c = a--a;
var c = a--a;
七、ECMAScript等性運算符
執(zhí)行類型轉(zhuǎn)換的規(guī)則如下:
如果一個運算數(shù)是 Boolean 值,在檢查相等性之前,把它轉(zhuǎn)換成數(shù)字值。false 轉(zhuǎn)換成 0,true 為 1。
如果一個運算數(shù)是字符串,另一個是數(shù)字,在檢查相等性之前,要嘗試把字符串轉(zhuǎn)換成數(shù)字。
如果一個運算數(shù)是對象,另一個是字符串,在檢查相等性之前,要嘗試把對象轉(zhuǎn)換成字符串。
如果一個運算數(shù)是對象,另一個是數(shù)字,在檢查相等性之前,要嘗試把對象轉(zhuǎn)換成數(shù)字。
在比較時,該運算符還遵守下列規(guī)則:
值 null 和 undefined 相等。
在檢查相等性時,不能把 null 和 undefined 轉(zhuǎn)換成其他值。
如果某個運算數(shù)是 NaN,等號將返回 false,非等號將返回 true。
如果兩個運算數(shù)都是對象,那么比較的是它們的引用值。如果兩個運算數(shù)指向同一對象,那么等號返回 true,否則兩個運算數(shù)不等。
八、ECMAScript關(guān)系運算符(重要)
var bResult = "Blue" < "alpha";
alert(bResult); //輸出 true
在上面的例子中,字符串 "Blue" 小于 "alpha",因為字母 B 的字符代碼是 66,字母 a 的字符代碼是 97。
比較數(shù)字和字符串
另一種棘手的狀況發(fā)生在比較兩個字符串形式的數(shù)字時,比如:
var bResult = "25" < "3";
alert(bResult); //輸出 "true"
上面這段代碼比較的是字符串 "25" 和 "3"。兩個運算數(shù)都是字符串,所以比較的是它們的字符代碼("2" 的字符代碼是 50,"3" 的字符代碼是 51)。
不過,如果把某個運算數(shù)該為數(shù)字,那么結(jié)果就有趣了:
var bResult = "25" < 3;
alert(bResult); //輸出 "false"
這里,字符串 "25" 將被轉(zhuǎn)換成數(shù)字 25,然后與數(shù)字 3 進行比較,結(jié)果不出所料。
總結(jié):
比較運算符兩側(cè)如果一個是數(shù)字類型,一個是其他類型,會將其類型轉(zhuǎn)換成數(shù)字類型。
比較運算符兩側(cè)如果都是字符串類型,比較的最高位的asc碼,如果最高位相等,繼續(xù)取第二位比較。
九、Boolean運算符(重要)
var temp=new Object();// false;[];0; null; undefined;object(new Object();)
if(temp){
console.log("yuan")
}else{
console.log("alex")
}
十、全等號和非全等號
等號和非全等號的同類運算符是全等號和非全等號。這兩個運算符所做的與等號和非等號相同,只是它們在檢查相等性前,不執(zhí)行類型轉(zhuǎn)換。
十一、控制語句
11.1 if控制語句
if-else基本格式
if (表達式){
語句1;
......
}else{
語句2;
.....
}
功能說明
如果表達式的值為true則執(zhí)行語句1,
否則執(zhí)行語句2
var x= (new Date()).getDay();
//獲取今天的星期值,0為星期天
var y;
if ( (x==6) || (x==0) ) {
y="周末";
}else{
y="工作日";
}
alert(y);
//等價于
y="工作日";
if ( (x==6) || (x==0) ) {
y="周末";
}
if可以單獨使用
if語句嵌套格式
if (表達式1) {
語句1;
}else if (表達式2){
語句2;
}else if (表達式3){
語句3;
} else{
語句4;
}
if (x==1){
y="星期一";
}else if (x==2){
y="星期二";
...
}else if (x==6){
y="星期六";
}else if (x==0){
y="星期日";
}else{
y="未定義";
11.2 switch 選擇控制語句
switch基本格式
switch (表達式) {
case 值1:語句1;break;
case 值2:語句2;break;
case 值3:語句3;break;
default:語句4;
}
switch(x){
case 1:y="星期一"; break;
case 2:y="星期二"; break;
case 3:y="星期三"; break;
case 4:y="星期四"; break;
case 5:y="星期五"; break;
case 6:y="星期六"; break;
case 7:y="星期日"; break;
default: y="未定義";
}
switch比else if結(jié)構(gòu)更加簡潔清晰,使程序可讀性更強,效率更高。
switch為什么高效率?
首先要看一個問題,if 語句適用范圍比較廣,只要是 boolean 表達式都可以用 if 判斷;而 switch 只能對基本類型進行數(shù)值比較。兩者的可比性就僅限在兩個基本類型比較的范圍內(nèi)。
說到基本類型的數(shù)值比較,那當然要有兩個數(shù)。然后重點來了——
if 語句每一句都是獨立的,看下面的語句:
if (a == 1) ...
else if (a == 2) ...
這樣 a 要被讀入寄存器兩次,1 和 2 分別被讀入寄存器一次。于是你是否發(fā)現(xiàn)其實 a 讀兩次是有點多余的,在你全部比較完之前只需要一次讀入寄存器就行了,其余都是額外開銷。但是 if 語句必須每次都把里面的兩個數(shù)從內(nèi)存拿出來讀到寄存器,它不知道你其實比較的是同一個 a。
于是 switch case 就出來了,把上面的改成 switch case 版本:
switch (a) {
case 0:
break;
case 1:
}
總結(jié):
1.switch用來根據(jù)一個整型值進行多路分支,并且編譯器可以對多路分支進行優(yōu)化
2.switch-case只將表達式計算一次,然后將表達式的值與每個case的值比較,進而選
擇執(zhí)行哪一個case的語句塊
3.if..else 的判斷條件范圍較廣,每條語句基本上獨立的,每次判斷時都要條件加載
一次。
所以在多路分支時用switch比if..else if .. else結(jié)構(gòu)要效率高。
十二、for循環(huán)控制語句
for循環(huán)基本格式
for (初始化;條件;增量){
語句1;
...
}
功能說明
實現(xiàn)條件循環(huán),當條件成立時,執(zhí)行語句1,否則跳出循環(huán)體
var attr=[111,222,333];
// for (var i=0; i
// document.write(i);
// document.write("
");
// document.write(attr[i])
// document.write("
");
// }
// for (var i in attr){
// document.write(i);
// document.write("
");
// document.write(attr[i])
// document.write("
");
// }
for (var i=1;i<=7;i++){
document.write("hello");
document.write("
");
}
----------------------------------------------
var arr=[1,"hello",true]//var dic={"1":"111"}
for (var i in arr){
console.log(i)
console.log(arr[i])
}
注意:
doms=document.getElementsByTagName("p");
for (var i in doms){
console.log(i); // 0 1 2 length item namedItem
//console.log(doms[i])
}
//循環(huán)的是你獲取的th一個DOM元素集,for in用來循環(huán)對象的所有屬性,dom元素集包含了你上面輸出的屬性。
//如果你只要循環(huán)dom對象的話,可以用for循環(huán):
for (var i=0;i
console.log(i) ; // 0 1 2
//console.log(doms[i])
}
結(jié)論:for i in 不推薦使用
十三、while循環(huán)控制語句
while循環(huán)基本格式
while (條件){
語句1;
. . .
}
功能說明
運行功能和for類似,當條件成立循環(huán)執(zhí)行語句大括號{}內(nèi)的語句,否則跳出循環(huán)
var i=1;
while (i<=7) {
document.write("hello");
document.write("
");
i++;
}
//循環(huán)輸出H1到H7的字體大小
/* sayhello是定義的函數(shù)名,前面必須加上function和空格*/
functionsayHello(){
varhellostr;
varmyname=prompt("請問您貴姓?","朱銳");
hellostr="您好,"+myname+'先生,歡迎進入"探索之旅"!';
alert(hellostr);
document.write(hellostr);
}
//這里是對前面定義的函數(shù)進行調(diào)用
sayHello();
練習(xí):分別用for循環(huán)和while循環(huán)計算出1-100的和?
while循環(huán)實現(xiàn):
// while循環(huán)實現(xiàn)
var x=0;
var i=1;
while (i<=100){
x+=i;
i++;
}
console.log(x)
for循環(huán)實現(xiàn):
// for循環(huán)實現(xiàn)
var sum=0;
for (var i=0;i<101;i++){
sum+=i;
}
console.log(sum)
十四、異常處理
try {
//這段代碼從上往下運行,其中任何一個語句拋出異常該代碼塊就結(jié)束運行
}
catch (e) {
// 如果try代碼塊中拋出了異常,catch代碼塊中的代碼就會被執(zhí)行。
//e是一個局部變量,用來指向Error對象或者其他拋出的對象
}
finally {
//無論try中代碼是否有異常拋出(甚至是try代碼塊中有return語句),finally代碼塊中始終會被執(zhí)行。
}
// 異常
try {
console.log(123);
throw Error("define error")
}
catch(e){
console.log(e)
}
finally{
console.log("finally")
}
顯示:
總結(jié)
以上是生活随笔為你收集整理的python之路2.0_Python之路【第二十一篇】:JS基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]嵌入式SQC文件编译
- 下一篇: 用stack处理中缀表达式【+、-、*、