1. 程式人生 > >web前端(14)—— JavaScript的資料型別,語法規範1

web前端(14)—— JavaScript的資料型別,語法規範1

編輯器選擇

對js的編輯器選用,有很多,能對html編輯的,也能對js編輯,比如notepad++,visual studio code,webstom,atom,pycharm,sublime text,Hbuilder等等的,根據你的喜好來就行

除錯

在我們編寫js時,也可以像調整css樣式一樣的線上編輯,在每個瀏覽器的除錯介面(按快捷鍵f12可以直接開啟,或者右鍵滑鼠-檢查)裡,都可以直接進行js的編寫除錯

例:

 

以上的語法您暫且可以忽略,因為下面緊接著就會講解到

 

變數

稍微對程式設計開發有點耳聞的老哥們,應該都知道只要是一門程式語言,都有變數一詞,這個變數究竟是什麼呢?簡而言之就是暫存資料的很小的容器。

顧名思義,變數,那當然是會變的量了

這樣也方便開發,如果沒有變數的話,那麼後面的一切都將無法展開,因為後面的一切都是建立在變數的基礎上的,所以這個朋友您必須得理解了

 

如果以上的幾句話您看起來還覺得不太懂的話,你可以看我最近準備發的【Python高階】系列裡對變數的講解:傳送門

 

好的,那麼怎麼定義變數呢?先看個例子,是的,也就是上面那個例子:

格式:使用關鍵詞var+空格+變數名 = 值,這樣就定義好了一個變數

 

首先var是js裡的保留關鍵詞,有特殊的意義,以後還會學到很多有特殊意義的關鍵詞,那麼什麼是關鍵詞呢?就是有特殊功能的小詞語。關鍵字後面一定要有空格隔開

變數名隨意取,但是必須符合命名規範,這個命名規範在所有的程式語言裡都通用,可能部分的語言有很細微的差別,在js的命名規範:

只能由英語字母、數字、下劃線、美元符號$構成,且不能以數字開頭,並且不能是JavaScript保留字

(作為了解,以後會逐一介紹)js的保留關鍵詞:

bstract、boolean、byte、char、class、const、debugger、double、enum、export、extends、final、float、goto implements、import、int、interface、long、native、package、private、protected、public、short、static、super、synchronized、throws、transient、volatile

然後這個等號—— 【=】也有點講究的,暫且不表,下面運算子給介紹

值和下面的資料型別相關,也暫且不表,下面會介紹

 

好的,還有種比較標準的定義變數的方法:

這種定義變數每一行意思是,先用var宣告一個變數,再給此變數賦值,再訪問此變數,這個和前面的var test= 2其實是同一個,只不過var test=2把宣告加賦值同時進行了,不過瀏覽器解析還是拆開來兩個步驟單獨操作的

這個就不同於Python了,Python定義變數公式: test = 2即可。也就是說js定義變數時先宣告再賦值(或者說先定義再賦值),之後才能訪問這個變數。不信的話,可以試試直接訪問:

 

報錯了,且報錯提示意思就是說a 沒有事先定義

 

注意:console.log();是一種控制檯裡的輸出語句,這個在介紹js的DOM和BOM物件會詳細介紹

  

簡單資料型別

有了變數的定義,當然我們肯定不會滿足於只是定義下簡答的變數,當然還想做更高階的操作,要做這些高階的操作,那就必須先學好不同的資料型別

數值型別:number

說白了就是其他語言裡說的整形,所有的數字都是數值型別,比如剛才我們定義的 test = 2,那麼怎麼確認test就是數值型別呢?有個關鍵詞可以判定:typeof

例:

可以這麼寫:typeof  xx 或者 typeof(XX)

 

注意:如果你是在瀏覽器控制檯進行操作的話,就按上面的方式來,如果你不是在瀏覽器控制檯進行操作的話,請使用console.log(typeof test)打印出來:

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>title</title>
    <style>       

    </style>
</head>
<body>
    <div class="box1">
        <p>test</p>
    </div>

</body>
<script type="text/javascript">
    var test = 2;
    console.log(typeof test);
    
</script>
</html>

注意:js的語法在每一行要給一個分號作為結尾(雖然不給也可以,因為js比較隨意,沒有固定一定要這麼寫,但是這是語法規範,養成良好的習慣)

效果測試:

開啟瀏覽器訪問此html檔案,同時請開啟控制檯,然後切換到console,才能看到列印的結果:

好的,確實列印的number對吧? 

 

字串型別:string

字串就是有引號包圍的字元,就是字串:

確實是sting對吧?

這裡要說下,為什麼在定義變數的時候出現undefined,控制檯輸出的是你輸入的表示式計算出的結果,如果你輸入的是js語句,或者沒有返回值的函式,就輸出undefined。可以用confirm()和prompt()函式測試(這兩個函式後期會講解的,如果朋友您喜歡研究的話,可以提前學習

 

布林型別:boolean

 

空物件:Null

 

這裡為什麼返回一個object,因為null本來就是一個物件

 

未定義:Undefined

  

運算子

賦值運算子

 

算術運算子

 

這裡要著重說下 +

 

對於字串來說 ,+ 表示字串拼接,對於數值型別來說,+ 表示數值相加

例:

 

根據上面這個例子,你發現一個很奇怪的事,數值型別和字串相加,居然沒有報錯,而且還加上返回了一個新的字串,這種就是隱式的資料轉換,當數值和字串使用+時,數值會被轉換為字串再參與運算

 

那麼,再使用 - ,*,/試試看:

 

又變了,當數值和字串使用  - ,*,/時,字串會被轉換成數值再參與運算

 

關於資料型別轉換下面會介紹 

比較運算子

 

這裡要著重說下,= 與 == 與 === 

= :指賦值

== : 判斷,判斷符號兩邊的變數的值是否等於

=== :判斷,判斷符號兩邊的變數的資料型別和值是否等於

 

資料型別轉換

number轉為string:

隱式轉換:

var n1 = 123;
var n2 = '123';
var n3 = n1+n2;
// 隱式轉換
console.log(typeof n3);

  

強制轉換:

// 強制型別轉換String(),toString()
var str1 = String(n1);
console.log(typeof str1);

var num = 234;
console.log(num.toString())

  

string轉為numer:

隱式轉換:使用-,*,/對字串轉換

 

強制轉換:

var  stringNum = '456.123wa';
var num2 =  Number(stringNum);
console.log(num2); //NaN  Not a Number 但是一個number型別

// parseInt()可以解析一個字串 並且返回一個整數
console.log(parseInt(stringNum)); //456
console.log(parseFloat(stringNum)); //456.123

  

 

其他任何型別轉為boolean:

var b1 = '123'; //true
var b2 = 0; //false
var b3 = -123 //true
var b4 = Infinity; //true
var b5 = NaN; //false
var b6; //false
var b7 = null; //false

 

還可以Boolean(變數),來檢視當前變數的真假  

 

流程控制if……else

if

var test = 2;
if(test>1){
  console.log('yes');
}
// 返回yes

 

注:對js程式碼的註釋,使用 //來註釋掉後面的字元,比如上面的 // 返回yes 

if...else

var test = 2;
if(test<1){
    console.log('yes');
}else{
    console.log('no');
}
// 返回no

  

多層if...else

var test = 80;
if(test>=100){
    console.log('A');
}else if(test>=90){
    console.log('B');
}else if(test>=80){
    console.log('C');
}else if(test>=70){
    console.log('D');
}
// 返回C

  

 

邏輯與&&、 邏輯或||

&&表示都成立,||表示其中任意一個成立則成立

例:

    var test = 80;
    if(test > 50 && test< 90){
        console.log('邏輯與成立')
    }
    if(test>50 || test>90){
        console.log('邏輯或成立')
    }

  

效果測試:

 

switch...case語句

不同於if...else,也不同於下面要講解的迴圈,它就是針對性的輸出,從上往下走,走到滿足條件時,則跳出,例:

    var test = 80;
    switch(test){
        case 100:
            console.log('A');
            break;
        case 90:
            console.log('B');
            break;

        case 80:
            console.log('C');
            break;
        case 70:
            console.log('D');
            break;
    }

  

效果展示:

 

但是這裡要注意,假如某個case沒有給break跳出的話,則會這樣:

    var test = 80;
    switch(test){
        case 100:
            console.log('A');
            break;
        case 90:
            console.log('B');
            break;

        case 80:
            console.log('C');
        case 70:
            console.log('D');
            break;
    }

  

 

因為當滿足條件時,沒有跳出,接著往下走了,直到遇到break了才跳出。這樣的話就容易導致一些不可估量的結果,所以,我們在用switch時,在每個case下必須給break,且最後給一個預設值保證switch語句一定能結束:

    var test = 80;
    switch(test){
        case 100:
            console.log('A');
            break;
        case 90:
            console.log('B');
            break;

        case 80:
            console.log('C');
        case 70:
            console.log('D');
            break;
        default:
            console.log('不及格')
    }

 

迴圈

while迴圈

while迴圈三個步驟:

  1. 初始化迴圈變數
  2. 判斷迴圈條件
  3. 更新迴圈變數

例:

// 例子:列印 1~9之間的數
var i = 1; //初始化迴圈變數
while(i<=9){ //判斷迴圈條件
    console.log(i);
    i = i+1; //更新迴圈條件
}

  

do...while迴圈

雷同while,但是是在執行迴圈之前就一定會走一次迴圈體,這個很少用

var i = 3;//初始化迴圈變數
do{

    console.log(i)
    i++;//更新迴圈條件

}while (i<10) //判斷迴圈條件

  

這裡的3就是最開始走的那一次

 

for迴圈

for迴圈表示遍歷,在js中比較常用,對給定的資料型別從頭到尾迴圈一遍

例:

 

//輸出1~10之間的數
for(var i = 1;i<=10;i++){
     console.log(i)
 }

 

如果您想寫一個死迴圈,務必寫上足夠的分號:

for(var i = 1;;){
     console.log(i)
 }

 

內建物件

陣列array

陣列就是一個數據容器,裡面可以存多個數據,可以是多個數值,可以是多個字串等等,類似Python裡列表

 

建立陣列的方式:

1.此方式最簡單最粗暴也最常用
var colors = ['red','green','blue'];
2.使用建構函式建立
var colors = new Array();
//通過下標進行賦值
colors[0] = 'red';
colors[1] = 'green';
colors[2] = 'blue';
console.log(colors);

  

陣列的常用方法:

 

concat(),組合陣列

var north = ['北京','上海','天津'];
var south = ['貴州','深圳','成都'];

var city = north.concat(south);
console.log(City)

 

join(),字串格式化拼接

var score = [98,78,76];
var str = score.join(',');
console.log(str);//"98,78,76"

slice(start,end),同Python裡的列表切片

 

var arr = ['張三','李四','王五','趙六'];
var newArr  = arr.slice(1,3);
console.log(newArr);//["李四", "王五"]

  

pop,刪除陣列的最後一個位置的元素

var arr = ['張三','李四','王五','趙六'];
arr.pop();
console.log(arr);//["張三", "李四","王五"]

 

push(),向陣列最後一個位置新增元素

var arr = ['張三','李四','王五','趙六'];
arr.push('李琪');
console.log(arr);//["張三", "李四","王五","趙六","李琪"]

 

reverse() ,翻轉陣列

var arr = ['張三','李四','王五','趙六'];
arr.reverse();
console.log(arr) // ['趙六','王五','李四,'張三']

  

sort,對陣列排序

 

var arr = ['張三','李四','王五','趙六'];
arr.sort();
console.log(arr); //["張三", "李四", "王五", "趙六"]

  

isArray(),判斷是否是陣列

var arr = ['張三','李四','王五','趙六'];
var test = 80;
console.log(Array.isArray(arr)); //true
console.log(Array.isArray(test)); // false

  

清空陣列的幾種方式

    var array = [1,2,3,4,5,6];
    array.splice(0);      //方式1:刪除陣列中所有專案
    array.length = 0;     //方式2:length屬性可以賦值,在其它語言中length是隻讀
    array = [];           //方式3:推薦

  

字串string

 

 

chartAt() 返回指定索引的位置的字元

var str = 'test';
var charset = str.charAt(1);
console.log(charset);//e

  

concat 返回字串值,表示兩個或多個字串的拼接

var str1 = 'te';
var str2  = 'st';
console.log(str1.concat(str2,str2));//testst

  

replace(a,b) 將字串a替換成字串b

var a = '1234567755';
var newStr = a.replace("4567","****");
console.log(newStr);//123****755

  

indexof() 查詢字元的下標,如果找到返回字串的下標,找不到則返回-1 。跟seach()方法用法一樣

var str = 'test';
console.log(str.indexOf('e'));//1
console.log(str.indexOf('p'));//-1

  

slice(start,end) 左閉右開 分割字串

var str = '小情歌';
console.log(str.slice(1,2));//情

  

split('a',1) 以字串a分割字串,並返回新的陣列。如果第二個引數沒寫,表示返回整個陣列,如果定義了個數,則返回陣列的最大長度

var  str =  '我的天呢,是嘛,你在說什麼阿薩德發撒地方呢?哈哈哈';
console.log(str.split('a'));//["我的天呢,", "是嘛,你在說什麼阿薩德發撒地方呢?", "哈哈哈"]

  

substr(statr,end) 左閉右開

var  str =  '我的天呢,是嘛,你在說什麼阿斯頓發大水發呢?哈哈哈';
console.log(str.substr(0,4));//我的天呢

  

toLowerCase()轉小寫

var str = 'XIAO';
console.log(str.toLowerCase());//xiao

  

toUpperCase()轉大寫

var str = 'xia';
console.log(str.toUpperCase());//XIA

  

特別:

//1.將number型別轉換成字串型別
var num = 132.32522;
var numStr = num.toString()
console.log(typeof numStr)
//四捨五入
var newNum = num.toFixed(2)
console.log(newNum)

 

Math內建物件

Math.ceil() 向上取整,'天花板函式'

var x = 1.234;
//天花板函式  表示大於等於 x,並且與它最接近的整數是2
var a = Math.ceil(x);
console.log(a);//2

  

Math.floor 向下取整,'地板函式'

var x = 1.234;
// 小於等於 x,並且與它最接近的整數 1
var b = Math.floor(x);
console.log(b);//1

  

max,min 求兩個數的最大值和最小值

console.log(Math.max(2,5));//5
console.log(Math.min(2,5));//2

  

Math.random() 隨機數 

var ran = Math.random();
console.log(ran);[0,1)

  

特別的:

min - max之間的隨機數: min+Math.random()*(max-min);

 

自定義函式

首先函式就是上面給的保留關鍵詞裡,有很多其實就是函式,比如console.log()函式。那麼只是那些函式,肯定是不夠我們用的,所以我們需要自定義函式,怎麼自定義呢?

格式:

function 函式名(引數){

}

 

就這樣既可,例:

    function myfunc(arg){
        console.log(arg);
    }
    var a = myfunc('test');

  

結果:

 

函式的作用:

  • 解決大量的重複性的語句
  • 簡化程式設計,讓程式設計模組化

 

注意:

  • function:是一個關鍵字。中文是“函式”、“功能”。
  • 函式名字:命名規定和變數的命名規定一樣。只能是字母、數字、下劃線、美元符號,不能以數字開頭。
  • 引數:後面有一對小括號,裡面是放參數用的。
  • 大括號裡面,是這個函式的語句

 

暫且就這樣的,以後再深入

 

 

偽陣列arguments

arguments代表的是實參,arguments只在函式中使用

    function fn(a,b,c) {
        console.log(arguments);
        console.log(fn.length);         //獲取形參的個數
        console.log(arguments.length);  //獲取實參的個數

        console.log("----------------");
    }
    fn(2,4);
    fn(2,4,6);
    fn(2,4,6,8);

  

結果:

 

arguments可以修改元素,但不能改變陣列的長短

function fn(a,b) {
        arguments[0] = 99;  //將實參的第一個數改為99
        arguments.push(8);  //此方法不通過,因為無法增加元素

 

但是陣列的length方法可以修改長度,上面清除陣列的幾種方式裡有,array.length = 0 則清除