2018.9.11 JavaScript學習的總結
1.javascript是解釋型語言,不要進行編譯的語言
***編譯:一次性把程式碼轉換成cpu看得懂的語言,一行一行的進行執行
***解釋:一行一行的解析,解析一行執行一行,解釋沒有編譯那麼快。
2.js的組成
***ECMAScript:js的語法的規範.
***DOM:js用來操作網頁上的元素的API。
***BOM:js操作瀏覽器的部分功能API。
3.script的屬性
***<script src="main.js"></script>:用來引入外部的的js便於後續的維護。
***<script type="text/javascript"></script>:用來告訴HTML為解釋的文件。
***<script async="async"></script>:非同步,多個人進行做多件事。
***<scritp sync="sync"></script>:同步,一個人有序做多件事。就是一步一步來。
***<script src="main.js" defer="defer"></script>:外部指令碼的文件將會被延遲的進行顯示,直到文件全部被解析完成才會去顯示和解釋執行外部指令碼文件,和async還有很大的區別的。
********小練習***********
***進行交換兩個數 的第一種方式:
var num1=99; var num2=66;
var temp=num1; num1=num2; num2=temp;
console.log(num1); console.log(num2); ------>輸出的為 66 99
***第二種方式:
num1=num1+num2; num2=num1-num2; num1=num1-num2;//注意這種小練習一定要爛熟於心
4.資料型別
***基本資料型別: Number String Boolean Undefined Null
***複雜資料型別:Object Array Date
***檢視當前的資料型別:typeof name或者 typeof (name)
這裡要注意的是,在進行浮點數比較時候,要轉換成*10或者*100進行比較,不然很容易就會出現精度問題
例如:console.log(0.07*100) //這裡輸出的不是7而是 7.000000000000001
console.log(0.1+0.2);//這裡輸出的也不是0.3而是0.30000000000000004
NaN:不是數值
***isNaN():就是任何不能轉換數值的,進行轉換的話就會觸發這個函式:例如:isNaN("red")//輸出的是true
一個小練習: var num=prompt("請輸入一個數"); //會彈出一個輸入框,得到您輸入的東西進行判斷!
if(isNaN(num)){ console.log("您輸入的不是數值")
else{ console.log("您輸入的是數值!")}
\t:表示四個空格 \:進行轉義 \n:進行換行
字串是不可變的,一旦建立,值的話就是不能改變了,如果說要往裡新增,那麼就會在棧中重新開闢一個新的記憶體空間
舉個小栗子:var str="abc"; var str2=str+"123456";
console.log(str2);//這裡的str2的話是重新開闢了空間的。
*** 這裡要注意的是: var a="abc" ; var b=234; var c=a+b;//這裡做字串的拼接的話 ,數值會轉換為字串,然後一起作拼接!如果是相減的話就是轉化成數值:var d=a-b;//結果為NaN因為abc不是數值。
NaN,unfined,0,null,空字串,返回值都為false
undefined:標識變數為賦值,這種型別字面量就一個數值undefined
型別的轉換:
***轉換成字串:
第一種方法:
var age=16; console.log(age.tostring())
tostring();//預設十進位制 tostring(8);//八進位制 tostring(16);//十六進位制 tostring(2);//二進位制
***這裡要注意啦:null和undefined是沒有tostring()方法的
第二種方法:使用string()函式來進行轉換null,undefined
第三種方法:用字串進行拼接。
****轉換成數值:Number(), parseInt(), paserFloat(),
Number():可以把任意數值進行轉換成陣列,如果要轉換成字串中有一個不是熟知的字元就會返回NaN;
true:返回值為1 false:返回值為0;
下面有個經常遇到的小問題:
++a:表示先a++,在進行返回值; ++a:表示先進行返回,在進行a=a+1;
邏輯運算子: &&有一個為false返回為false
|| :有一個 為true就返回true
!進行取反;
***&&:如果兩個運算元都不是boolean的型別,且左右兩邊都是true的話,則返回第二個運算元;如果有一個運算元是false的話那麼返回的就是這個運算元的具體的值(注意不是返回false) 同理可得||的用法。
判斷語句:switch主要用於多條件的時候把,其他的if比較簡單。
下面是一些小練習:
//進行輸出1-100
for(var i=0;i<=100;i++){
console.log(i);
}
//列印1-100的和
var sum=0;
for(var j=0;j<=100;j++){
sum=sum+j;
}
console.log(sum);
//求1-100之間所有的偶數和,所有的奇數的和
var oddSum=0;
//偶數和
var evenSum=0;
for(var i=1;i<=100;i++)
{
if(evenSum%2==0){
//先判斷是否為偶數
evenSum+=i;
}else{
//奇數
oddSum+=i;
}
}
console.log("奇數和為:"+evenSum);
console.log("偶數和為:"+oddSum);
//求1-100 之間所有數的和,平均值
var sum=0,avg; //avg可以不用賦初值
for(var i=0;i<=100;i++){
sum+=i;
}
//求平均數
avg=sum/100;
console.log("1-100的平均數是:"+avg);
//年利率千分之三 5年後獲得的本金是多少
var money=10000;//定義本金
var rate=0.003;//定義年利率
for(var i=1;i<=5;i++){
money +=money*rate;
}
console.log("五年後的本金為:"+money);
//這題的思想很重要
//關於兔子問題 這個 問題困擾我好久 規律是這樣子的 1,1,2,3,5,8,13,21
var n1=1;
var n2=1;
for( var i=3;i<=12;i++){
//定義一個第三個月的對數
sum=n1+n2;
n1=n2;//往後移動了一位
n2=sum;//同理往後移動一位
}
console.log("第12個月的兔子的對數為:"+sum);
//進行列印9*9乘法口訣表
document.write("<table border='1px' cellpadding='0' cellspacing='0'>");
for(var i=1;i<=9;i++){//外迴圈控制行
document.write("<tr>")
for(var j=1;j<=i;j++){//內迴圈控制列
document.write("<td>");
document.write(i+"*"+j+"="+i*j);
document.write("</td>");
}
document.write("</tr>")
}
document.write("</table>")
//列印10行10列的正方形
for(var i=1;i<=10;i++){
for(var j=1;j<=10;j++){
document.write("☆");
}
document.write("<br/>");
}
//列印直角三角形
for(var i=1;i<=10;i++){
for(var j=1;j<=i;j++){
document.write("(* ̄︶ ̄)");
}
//進行分行處理
document.write("<br/>");